Android';s setDrawingCacheEnabled()是否正常工作?
我有一个UI,其中根布局是相对的。它有许多视图,如字段、按钮等 还有另外两个面板最初是不可见的。当用户单击按钮时,其中一个面板从左侧滑入,另一个面板从底部滑入。问题是Nexus S的帧速率太低了 我想使用setDrawingCacheEnabled(true),以便(我希望)加速这两个面板的动画。作为一个简化的例子,这里大致是我如何滑入其中一个面板的。我称之为“细节面板” 现在在DetailPanel中,我尝试使用缓存。我希望通过缓存进行位图渲染可以提高性能:Android';s setDrawingCacheEnabled()是否正常工作?,android,Android,我有一个UI,其中根布局是相对的。它有许多视图,如字段、按钮等 还有另外两个面板最初是不可见的。当用户单击按钮时,其中一个面板从左侧滑入,另一个面板从底部滑入。问题是Nexus S的帧速率太低了 我想使用setDrawingCacheEnabled(true),以便(我希望)加速这两个面板的动画。作为一个简化的例子,这里大致是我如何滑入其中一个面板的。我称之为“细节面板” 现在在DetailPanel中,我尝试使用缓存。我希望通过缓存进行位图渲染可以提高性能: public class Deta
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);
}
}
}
位图是非空的,大小正确,但它是完全黑色的
为什么我的位图是黑色的?该代码可能是严重错误的;我已经尝试了一百万种不同的方法,但都无法解决问题。在使用绘图缓存之前,您可能需要先构建绘图缓存,否则它会给您一个空白位图
public void someButtonClicked(View view) {
detailPanel.startAnimation(detailEnterAnimation);
detailPanel.setVisibility(View.VISIBLE);
detailPanel.setDrawingCacheEnabled(true);
detailPanel.buildDrawingCache(); //may be you need to add this?
}
来自Android文档(): 启用图形缓存类似于在关闭硬件加速时设置图层。启用“硬件加速”时,启用图形缓存对渲染没有影响,因为系统使用不同的加速机制,而忽略该标志。如果要在视图中使用位图,即使启用了硬件加速,请参阅setLayerType(int,android.graphics.Paint)以了解如何启用软件和硬件层
也许这就是你的情况?你试过扩展滑动抽屉吗?它已经有了滑动动画。也许这是正确的方向:具体的动画不是我真正想要的。更重要的是,我希望对图形缓存的工作原理有一个大致的了解,这样我就可以将它应用到各种UI中。我知道它非常古老,但你解决了这个问题吗?我(不幸地)需要支持相对较旧的设备,我希望这可以提高性能,但我的视图返回非null且为空。
public void someButtonClicked(View view) {
detailPanel.startAnimation(detailEnterAnimation);
detailPanel.setVisibility(View.VISIBLE);
detailPanel.setDrawingCacheEnabled(true);
detailPanel.buildDrawingCache(); //may be you need to add this?
}