对android中的surfaceview的困惑,双缓冲区该怎么理解?
这几天想在surfaceview中做个小东西,然后自己试着写了下demo,但是关于他的双缓冲,我一直无法理解,看了很多博客,也不是很明白。
demo很简单,就是获取surfaceview的画布,然后写上0~20的数字,也就是这个显示结果,让我看不明白,先贴效果图:

这是最后的显示画面。问题就是,为什么是间隔了两个数字?也就是说,第一帧:只显示0,第二帧:只显示1,第三帧:只显示2.。按我的理解,不应该是第三帧的时候显示:0 2 么?这样才像是两个画布,而不是三个。
可能问题有点幼稚,还望大神不吝赐教,或者有什么好博客可以推荐下,谢谢。
附源码:
public class MainActivity extends Activity implements Runnable {
Button button;
SurfaceView surfaceView;
SurfaceHolder surfaceHolder;
Thread thread;
private final String TAG = "MainActivity.java";
private boolean isStarted = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
button = (Button) findViewById(R.id.button1);
surfaceView = (SurfaceView) findViewById(R.id.surfaceView1);
surfaceHolder = surfaceView.getHolder();
thread = new Thread(this);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (!isStarted) {
isStarted = true;
thread.start();
}
}
});
}
@Override
public void run() {
// TODO Auto-generated method stub
if (surfaceHolder == null) {
Log.i(TAG, "surfaceHolder==null");
return;
}
int i = 0;
Paint mPaint = new Paint();
mPaint.setColor(Color.WHITE);// 画笔为绿色
mPaint.setStrokeWidth(2);// 设置画笔粗细
mPaint.setTextSize(50);;
while (i < 20) {
Canvas canvas = surfaceHolder.lockCanvas();
canvas.drawText(""+i, 100, 50+50*i, mPaint);
surfaceHolder.unlockCanvasAndPost(canvas);// 解锁画布,提交画好的图像
i++;
try {
thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${packageName}.${activityClass}" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="22dp"
android:text="开始" />
<SurfaceView
android:layout_below="@id/button1"
android:id="@+id/surfaceView1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
相关推荐
漂亮的走势图
利用SurfaceView实现的一个漂亮的走势图Demo
chrome-headless-shell-win32-159.0.8132.0(Canary).zip
chrome-headless-shell-win32-159.0.8132.0(Canary).zip
惠普150 联想1821 1831 1831W定影清零,转印带清零
惠普150 联想1821 1831 1831W定影清零,转印带清零,报错不打印,通过清零软件可以清除。内附使用说明。
【电液伺服执行器与PI控制器】带有PI控制器的电液伺服执行器的模拟研究(Simulink仿真实现)
内容概要:本文围绕带有PI控制器的电液伺服执行器开展模拟研究,利用Simulink工具构建系统仿真模型,深入分析PI控制器在电液伺服系统中的控制性能与动态响应特性。研究内容涵盖系统建模、PI控制参数整定、仿真结果分析等关键环节,重点探讨PI控制器对系统稳定性、响应速度及抗干扰能力的优化作用,并通过仿真验证控制策略的有效性与实用性; 适合人群:具备自动控制原理、液压传动基础知识及Simulink仿真能力的自动化、机械电子、控制工程等相关专业的高校学生、研究生及工程技术人员; 使用场景及目标:①用于自动控制类课程的教学实验或课程设计,帮助学生深入理解电液伺服系统的工作原理与典型控制方法;②应用于工业高精度执行机构的控制器设计,为实际工程中的系统优化提供理论支撑与仿真验证手段; 阅读建议:文中提供的Simulink模型与仿真流程具备良好的可复现性,建议读者结合具体工况调整PI参数,进一步探究PID或其他先进控制算法的改进效果,以深化对控制系统设计的理解与应用能力。
FYZN PcbDesigner.App.1.0.18.12-win10.rar
打开与保存 常用格式直接读写:打开、编辑、保存 .PcbDoc(含设计规则、层叠等信息)也能打开看结构 原理图文档:打开 / 新建 .SchDoc,和 PCB 文档一起在左侧项目树里管理,双击节点即可重开 另存为通用 ASCII:原理图与 PCB 都能导出为 ASCII 格式,方便文本比对、脚本处理,或交给别的流程 底图参考:需要对着图描的时候,可以给每个图层各放一张参考底图,与文件分开存 JSON,迁移工程时能一起带走 最近文件:最近打开的文件列表里可以直接右键「打开文件位置」 win10版本


