Android 刷新、重绘 画布
吐槽
在自定义View中,如果你需要重绘画布达到动态的效果,你的第一个想法是在onDraw
方法中把canvas画布对象拿出来,可是你会发现,拿出来的对象是Null,不管你怎么赋值都没用,这可能也是你找到这帖子的原因。
正题
如果需要动态的更换画布,首先你需要将里面的数据写到随时能调用的地方,比如说全局变量。
重写 invalidate方法
invalidate方法是可以被外部调用的,每当调用该方法,这方法就会调用onDraw
方法,通过这种机制就可以达到刷新效果。
@Override
public void invalidate() {
angle++;
super.invalidate();
}
我重写了该方法,然后在里面做了值的变化。当然你也可以通过外部传值,就写个方法,只要最后调用invalidate
就可以了,比如:
public void myRefresh(int [] arge){
//自己的代码逻辑
invalidate();
}
只要实现调用invalidate
代码就可以了。然后在什么时候调用,就看你的需求了。
注意
如果需要放到线程里面调用,请不要直接调用invalidate,在线程调用需要把invalidate,改为postInvalidate方法,这个方法会调用invalidate方法,所有不影响你在
invalidat
里面编写的逻辑