【问题标题】:Disable Calling of onDraw after finish drawing android完成绘制android后禁用onDraw的调用
【发布时间】:2013-12-17 12:47:35
【问题描述】:

我想做以下事情:

  1. 获取画布

  2. 在画布上绘制矩形和位图列表 基于for循环

  3. 在绘制所有项目后不要调用 onDraw,直到 我旋转设备,因为我尝试时应用程序太慢 浏览它

  4. 我的画布在 Horizo​​ntalScrollView 中

当我尝试滚动时它非常慢

编辑:我正在扩展 View 类,所以我可以保存视图并且不要调用 onDraw,除非我想让它失效??

编辑 2:这是我的 onDraw 方法

@Override
    protected void onDraw(Canvas canvas) {


        super.onDraw(canvas);

        for (int i = 0 ; i < mIcons.size() ; i++) {

            prepareItem(canvas, paint, mIcons.get(i));
        }

    }

请任何人帮忙??

【问题讨论】:

    标签: java android android-canvas


    【解决方案1】:

    你不能阻止 onDraw 被调用,但你可以覆盖它并使用标志来判断它是否应该执行。我没有看到您的代码,但我建议您使用以下代码:

    布尔 callOnDraw = true;

       @Override
        protected void onDraw(Canvas canvas) {
    
            super.onDraw(canvas);
    
          if(callOnDraw){
            for (int i = 0 ; i < mIcons.size() ; i++) {
    
                prepareItem(canvas, paint, mIcons.get(i));
            }
            callOnDraw = false;
          }
    
        }
    

    当你想停止绘图时,你设置标志callOnDraw = false;

    【讨论】:

    • 我尝试添加标志 callOnDraw 并在我完成 for 循环时将其设置为 false,但是它绘制画布然后清除它会发生什么
    • 你能展示一下你是怎么做的代码吗?因为如果你不调用 super.onDraw(canvas);它不会被绘制。
    • 我在原帖中添加了onDraw方法的代码,但是没有callOnDraw标志
    • 我用你的代码再次尝试过,我有同样的行为,它绘制画布,然后清除所有绘图,只显示白屏
    • 如果你把 super.onDraw 放在 if(callondraw) 里面?
    【解决方案2】:

    我找到了一种解决方法来完成这项工作,我已经绘制了位图,每次我尝试调用 onDraw() 时,我都会检查我的位图是否不为空,使用它

    谢谢大家

    【讨论】:

      猜你喜欢
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多