在我的自定义视图中,我有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。 提前谢谢....
答案 0 :(得分:0)
没错。加速画布渲染速度的方法之一是使用invalidate(Rect)。传递给invalidate方法的Rect定义了将重绘的区域。在画布上设置剪裁区域后,将在无效后调用onDraw。所以你的所有“drawBitmap”都会被rect剪掉。
答案 1 :(得分:0)
是使用 .gif 文件,还是使用在线程上运行的一系列图像来显示动画?