surfaceView
2015-10-15 23:05
211 查看
子线程一改变作画内容,改变一次休眠一次: public class WelcomeViewGoThread extends Thread{ WelcomeView welcomeView; private int sleepPan = 150; private boolean flag = true; //循环标志 public WelcomeViewGoThread(WelcomeView welcomeView) { this.welcomeView = welcomeView; } @Override public void run() { while(flag){ welcomeView.drawIndex++; //图片序号自驾 if(welcomeView.drawIndex > welcomeView.bitmapsID.length-1){ welcomeView.drawIndex = welcomeView.bitmapsID.length - 10; //防止数组越界 } if(welcomeView.drawIndex % 5 == 0){ welcomeView.drawString = !welcomeView.drawString; } try { Thread.sleep(sleepPan); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public void setFlag(boolean flag){ this.flag = flag; } } 子线程二: public class WelcomeViewDrawThread extends Thread{ WelcomeView welcomeView; //使用它的类的引用 private int sleepPan = 100; private boolean flag = true; //循环标志 private SurfaceHolder surfaceHolder; //SufaceHolder的引用 public WelcomeViewDrawThread(WelcomeView welcomeView) { this.welcomeView = welcomeView; surfaceHolder = welcomeView.getHolder(); //得到surfaceHolder的引用 } @Override public void run() { Canvas c; //申明画布 while(flag){ c = null; try{ //锁定整个画布 c = this.surfaceHolder.lockCanvas(); synchronized(this.surfaceHolder){ //同步 welcomeView.onDraw(c); } }finally { if(c != null){ //更新显示屏幕新内容 this.surfaceHolder.unlockCanvasAndPost(c); } } try { Thread.sleep(sleepPan); } catch (InterruptedException e) { e.printStackTrace(); } } } public void setFlag(boolean flag){ this.flag = flag; } }
SurfaceView由于可以直接从内存或者DMA等硬件接口取得图像数据,因此是个非常重要的绘图容器,
SurfaceHolder回调可以在底层的Surface被创建和销毁的时候通知View,并传递给它对SurfaceHolder对象的引用,其中包含了当前有效的Surface。
使用方法:
SurfaceView都是配合线程来使用的,在子线程上作画,主线程上显示
public class WelcomeView extends SurfaceView implements SurfaceHolder.Callback{
KLSDActivity activity;
//主线程对象引用
WelcomeViewDrawThread welcomeViewDrawThread;
//欢迎刷真线程
WelcomeViewGoThread welcomeViewGoThread;
//动画生成线程
}
最后收尾工作:
在surfaceView的销毁方法surfaceDestroyed里面要关掉两个子线程
相关文章推荐
- WEB技术之四层架构
- IOS学习笔记-perFormSelector,RunLoop,Debug神器,UIResponder,Cocoa Touch事件处理
- C# 中引用类型和 值类型
- 【一些事晚报】iPhone6s港台退货潮
- u盘安装centos7
- Linux安装gcc编译器详解(CentOS 6.6 64位系统)
- CoreData(数据持久化的方式)
- java Webservice(一)HttpClient使用(二)
- leetcode之Contains Duplicate
- c++拷贝文件
- Python虚拟环境学习
- 逻辑回归(Logistic Regression)
- 双系统引导系统修复
- C/C++函数参数列表变量的计算顺序
- 打车刷单解决办法
- WebRTC手记之WebRtcVideoEngine2模块
- u盘作为启动盘,但是容量变成只有几兆
- 关于java socket 关闭的思考.
- bzoj4099【Usaco2015 Open】Trapped in the Haybales
- lightoj 1152 - Hiding Gold 【奇偶建二分图 求最大匹配】