展会信息港展会大全

Android开发之View的实时刷新
来源:互联网   发布日期:2016-01-14 12:24:20   浏览:1890次  

导读:这几天在做一个界面时,想在用户触摸屏幕之后先绘图一下,待逻辑处理完毕,再绘制最后的图,查看View的重绘方法,得知是invalidate()函数,于是在代码中这么写道:publicclassPuzzleViewextendsView {@Override......

这几天在做一个界面时,想在用户触摸屏幕之后先绘图一下,待逻辑处理完毕,再绘制最后的图,查看View的重绘方法,得知是invalidate()函数,于是在代码中这么写道:

public class PuzzleView extends View {

@Override

protected void onDraw(Canvas canvas) {

//...

}

@Override

public boolean onTouchEvent(MotionEvent event) {

invalidate();

//处理逻辑

invalidate();

}

}

运行后发现只有第二次invalidate做了,第一次打酱油去了,于是查找资料,看到Invalidate()的描述是这样的:当调用线程处于空闲状态时,会调用onDraw,刷新界面,也就是说,该函数仅是标记当前界面过期,并不直接负责刷新界面,奶奶的,不刷。。。继续翻啊翻,看到SurfaceView能实现实时刷新,代码结构如下:

public class PuzzleView extends SurfaceView implementsSurfaceHolder.Callback{

private SurfaceHolder surfaceHolder;

public PuzzleView(Context context){

//....

surfaceHolder = this.getHolder();//获取holder

surfaceHolder.addCallback(this);

}

protected void paint(Canvas canvas) {

//这里的代码跟继承View时OnDraw中一样

}

public void repaint() {

Canvas c = null;

try {

c = surfaceHolder.lockCanvas();

paint(c);

}

finally {

if (c != null) {

surfaceHolder.unlockCanvasAndPost(c);

}

}

}

}

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

赞助本站

人工智能实验室

相关热词: 实时刷新 View

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港