在自定义视图中加速位图动画

时间:2013-08-08 01:07:58

标签: android animation view bitmap

在我的自定义视图中,我有1个需要按需运行的动画(在平铺点击时)。目前我正在使用这种方法:

 public boolean onTouchEvent(MotionEvent event) {
            switch(event.getAction()){

            case MotionEvent.ACTION_DOWN:
    //check what tile for clicked
                    getHandler().removeCallbacks(explosionThread); 
                    getHandler().post(explosionThread);
                    }

                }
            break;
        }
        return super.onTouchEvent(event);

    }

所以我正在调用(或发送查看线程,具体而言)一个Runnable,它自己调用它直到它结束图像......

private Runnable explosionThread=new Runnable(){
        @Override
        public void run() {
            invalidate();
            if(expCount<15){
            getHandler().postDelayed(this, 10);
            }
        }   
    };

在我的onDraw()方法中,我实现了逻辑以投掷位图并在屏幕上绘制(使用cnavas.drawBitmap(位图,srcRect,destRect,paint)....

现在,我想避免使用SurfaceView(我只有1个动画,而View使用的资源更少)。 我认为动画很慢,因为每次使用invalidate()时,onDraw都需要绘制整个屏幕。女巫可以很慢(用png图像绘制64个图块)。我知道有一个invalidate方法的重载,invalidate(Rect dirty)但我真的不知道如何使用它。如果您认为这就是答案,请写下如何避免绘制整个onDraw方法(或者我可以覆盖invalidate(Rect)方法使用的方法,如果有的话)。

如果你有任何其他更好的方法来加速动画发布它PLZ。 提前谢谢....

2 个答案:

答案 0 :(得分:0)

没错。加速画布渲染速度的方法之一是使用invalidate(Rect)。传递给invalidate方法的Rect定义了将重绘的区域。在画布上设置剪裁区域后,将在无效后调用onDraw。所以你的所有“drawBitmap”都会被rect剪掉。

答案 1 :(得分:0)

运行动画的

是使用 .gif 文件,还是使用在线程上运行的一系列图像来显示动画?