我有一个UI,根布局是RelativeLayout。它有许多视图,例如字段,按钮等。
还有另外两个最初看不见的面板。当用户单击按钮时,其中一个面板从左侧滑入,另一个从底部滑入。问题是帧速率在Nexus S上是可悲的。
我想使用setDrawingCacheEnabled(true)以便(我希望)加速这两个面板的动画。作为一个简化的例子,这里大致是我在其中一个面板中滑动的方式。我称之为“detailPanel”。
public class MyActivity extends Activity {
// Initially invisible.
private View detailPanel;
// A simple slide animation.
private Animation detailEnterAnimation;
...
public void someButtonClicked(View view) {
detailPanel.startAnimation(detailEnterAnimation);
detailPanel.setVisibility(View.VISIBLE);
detailPanel.setDrawingCacheEnabled(true);
}
}
现在在DetailPanel中我尝试使用缓存。我希望通过缓存进行位图渲染可以提高性能:
public class DetailPanel extends LinearLayout {
public void draw(Canvas canvas) {
Bitmap cache = getDrawingCache();
if (cache != null) {
canvas.drawBitmap(cache, 0, 0, null);
} else {
super.draw(canvas);
}
}
}
位图非空,尺寸合适,但完全是黑色。
为什么我的位图会变黑?该代码可能是错误的;我已经尝试了一百万种不同的东西而且无法理解它。
答案 0 :(得分:7)
来自Android文档(http://developer.android.com/reference/android/view/View.html#setDrawingCacheEnabled%28boolean%29):
启用绘图缓存类似于关闭硬件加速时设置图层。打开硬件加速时,启用绘图缓存对渲染没有影响,因为系统使用不同的加速机制忽略该标志。如果要对视图使用位图,即使启用了硬件加速,请参阅setLayerType(int,android.graphics.Paint)以获取有关如何启用软件和硬件层的信息。
也许这是你的情况?
答案 1 :(得分:3)
您可能希望在使用之前构建绘图缓存,否则它将为您提供空白位图
public void someButtonClicked(View view) {
detailPanel.startAnimation(detailEnterAnimation);
detailPanel.setVisibility(View.VISIBLE);
detailPanel.setDrawingCacheEnabled(true);
detailPanel.buildDrawingCache(); //may be you need to add this?
}