首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >安卓的setDrawingCacheEnabled()是如何工作的?

安卓的setDrawingCacheEnabled()是如何工作的?
EN

Stack Overflow用户
提问于 2011-10-14 13:42:50
回答 2查看 27.6K关注 0票数 25

我有一个根布局是RelativeLayout的UI。它有许多视图,比如字段、按钮等。

还有另外两个最初不可见的面板。当用户单击按钮时,其中一个面板从左侧滑入,另一个面板从底部滑入。问题是Nexus上的帧速率很差。

我想使用setDrawingCacheEnabled(true)来(我希望)加速这两个面板的动画。作为一个简化的例子,下面是我如何在其中一个面板中滑动的大致方式。我会叫它"detailPanel“。

代码语言:javascript
运行
复制
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中,我尝试使用缓存。我希望通过缓存的位图渲染可以提高性能:

代码语言:javascript
运行
复制
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);
    }
  }
}

位图是非空的,大小合适,但它是完全黑色的。

为什么我的位图是黑色的?这段代码可能大错特错;我试过无数种不同的方法,但就是搞不明白。

EN

Stack Overflow用户

发布于 2013-01-04 03:07:00

来自安卓文档(http://developer.android.com/reference/android/view/View.html#setDrawingCacheEnabled%28boolean%29):

启用图形缓存类似于关闭硬件加速时设置图层。启用硬件加速后,启用图形缓存对渲染没有影响,因为系统使用忽略标志的不同加速机制。如果希望在视图中使用位图,即使启用了硬件加速,有关如何启用软件层和硬件层的信息,请参见setLayerType(int,android.graphics.Paint)。

也许这是你的案子?

票数 8
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7763532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档