surfaceView
子线程一改变作画内容,改变一次休眠一次:
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里面要关掉两个子线程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】