canvas教程

Android中View的实时刷新

字号+ 作者:H5之家 来源:H5之家 2016-01-17 10:48 我要评论( )

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

这几天在做一个界面时,想在用户触摸屏幕之后先绘图一下,待逻辑处理完毕,再绘制最后的图,查看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 implements SurfaceHolder.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的实时刷新了。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • HTML5教程画布Canvas基础知识讲解,html5学习网

    HTML5教程画布Canvas基础知识讲解,html5学习网

    2017-03-14 09:01

  • canvas API ,通俗的canvas基础知识(二)

    canvas API ,通俗的canvas基础知识(二)

    2017-02-01 10:03

  • Canvas基础知识学习

    Canvas基础知识学习

    2016-10-22 14:00

  • [HTML5 Canvas学习] 基础知识

    [HTML5 Canvas学习] 基础知识

    2016-10-11 18:01

网友点评
d