在我的自定义视图中,我有 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(bitmap,srcRect,destRect,paint)....
现在,我想避免使用 SurfaceView(我只有 1 个动画,而 View 使用的资源更少)。我认为动画很慢,因为每次调用 invalidate() 时,onDraw 都需要绘制整个屏幕,这可能很慢(使用 png 图像绘制 64 个图块)。我知道 invalidate 方法 invalidate(Rect dirty) 有一个重载,但我真的不知道如何使用它。如果您认为这是答案,请写下如何避免绘制整个 onDraw 方法(或者我可以覆盖 invalidate(Rect) 方法使用的什么方法,如果有的话)。
如果您有任何其他更好的方法来加速动画,请发布它。提前致谢....