关于Android调用invalidate()之后不能及时调用ondraw()的解决办法

来源:互联网 发布:qq视频播放器 mac 编辑:程序博客网 时间:2024/04/28 23:21

关于invalidate的解释:当调用线程处于空闲状态时,会调用onDraw,刷新界面,也就是说,该函数仅是标记当前界面过期,并不直接负责刷新界面;这样的结果就是没能及时的刷新界面,导致出现的效果不是你所想要的。

那么怎么实时的刷新view呢?看到SurfaceView能实现实时刷新,代码结构是

public class MapView extends SurfaceView implements Callback {

private static SurfaceHolder holder=null; //控制对象
public MapView(Context context, AttributeSet attr) {
super(context, attr);
// TODO Auto-generated constructor stub
holder=getHolder();
holder.addCallback(this);
}

protected static void Paints(Canvas canvas) {

//这里的代码和处理OnDraw()时的一样

}

public static void RePaint()
{
Canvas canvas = null;
try {
canvas = holder.lockCanvas();
Paints(canvas);
} finally{
if (canvas != null) {
holder.unlockCanvasAndPost(canvas);
}
}
}

这样写好之后,只要在以前调用invalidate()的地方调用RePaint()就可以实现Android View实时刷新了。

1 0
原创粉丝点击