Java 完成绘图后禁用对onDraw的调用

Java 完成绘图后禁用对onDraw的调用,java,android,android-canvas,Java,Android,Android Canvas,我想提出以下几点: 获取画布 在画布上绘制矩形和位图列表 基于for循环 绘制完所有项目后,直到 我旋转设备,因为我尝试时应用程序太慢 浏览 我的画布在水平滚动视图中 当我尝试滚动时,它非常慢 编辑:我正在扩展视图类,所以我可以保存视图并且不调用onDraw,除非我希望它无效吗 编辑2:这是我的onDraw方法 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas);

我想提出以下几点:

  • 获取画布

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

  • 绘制完所有项目后,直到 我旋转设备,因为我尝试时应用程序太慢 浏览

  • 我的画布在水平滚动视图中

  • 当我尝试滚动时,它非常慢

    编辑:我正在扩展视图类,所以我可以保存视图并且不调用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));
            }
    
        }
    
    @覆盖
    受保护的void onDraw(画布){
    super.onDraw(帆布);
    对于(int i=0;i

    请任何人都可以帮忙???

    您不能阻止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;
          }
    
        }
    
    @覆盖
    受保护的void onDraw(画布){
    super.onDraw(帆布);
    if(callOnDraw){
    对于(int i=0;i

    当您想要停止绘图时,您可以设置flag
    callOnDraw=false

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


    谢谢大家

    我尝试添加标记callOnDraw,并在我完成for循环时将其设置为false,但是如果它绘制画布然后清除,会发生什么情况?您能向代码展示您是如何做到的吗?因为如果不调用super.onDraw(canvas);它将不会被绘制。我已经在原始帖子中添加了onDraw方法的代码,但是没有callOnDraw标志,我用你的代码再次尝试了它,我有相同的行为,它绘制画布,然后清除所有的图形,只显示白色屏幕,如果你把super.onDraw放在里面,如果(callOnDraw)?