SurfaceView 两个疑问?
1. onDraw()函数SurfaceView本来是系统不调用的,但是mGameSurfaceView.setBackgroundColor(Color.WHITE)后onDraw()就会被调用了?但是这样Canvas canvas= mSurfaceHolder.lockCanvas(null);后画的就不会显示出来了?这是什么原因呢?
2. 我有两个例子都在线程里通过
第一次画
Canvas canvas= mSurfaceHolder.lockCanvas(null);
//这里画画,位置1
mSurfaceHolder.unlockCanvasAndPost(canvas);
第二次画画
Canvas canvas= mSurfaceHolder.lockCanvas(null);
//这里画画,位置2
mSurfaceHolder.unlockCanvasAndPost(canvas);
但是奇怪的是一个例子第二次画的会把第一次画的刷掉。
第二个线程做同样的事,不同的是一个自己电脑,一个公司电脑
但是两次画的,都会显示出来。
到底默认是,那种是正确的呢?
哥,都郁闷了。 --------------------编程问答-------------------- 第二个线程做同样的事,不同的是一个自己电脑,一个公司电脑
但是两次画的,都会显示出来。
、、、、
神马意思?
同一个 地方 就是 覆盖的 --------------------编程问答-------------------- 覆盖了吧.线程睡眠了没有啊 --------------------编程问答-------------------- package draw.test;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class GameSurfaceView extends SurfaceView
implements SurfaceHolder.Callback,Runnable
{
//定义SurfaceHolder对象
SurfaceHolder mSurfaceHolder = null;
int y = 50;
public GameSurfaceView(Context context)
{
super(context);
// 实例化SurfaceHolder
mSurfaceHolder = this.getHolder();
// 添加回调
mSurfaceHolder.addCallback(this);
this.setFocusable(true);
}
// 在surface的大小发生改变时激发
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
{
}
// 在surface创建时激发
public void surfaceCreated(SurfaceHolder holder)
{
//开启绘图线程
new Thread(this).start();
}
// 在surface销毁时激发
public void surfaceDestroyed(SurfaceHolder holder)
{
}
// 绘图循环
public void run()
{
while (true)
{
try
{
Thread.sleep(200);
}
catch (Exception e)
{
}
Draw();
}
}
// 绘图方法
public void Draw()
{
//锁定画布,得到canvas
Canvas canvas= mSurfaceHolder.lockCanvas();
// 绘图
Paint mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setColor(Color.BLUE);
canvas.drawCircle((320 - 25) / 2, y, 50, mPaint);
y=y+50;
// 绘制后解锁,绘制后必须解锁才能显示
mSurfaceHolder.unlockCanvasAndPost(canvas);
}
}
--------------------编程问答-------------------- --------------------编程问答-------------------- 为嘛,结果是哪个不停的话,从上到下画了一排。
不是应该,永远只画一个,后画的应该擦除前面画的呀? --------------------编程问答-------------------- 我测试的结果是连续run的话,只把最后一次画的图提供的画布上,我想你应该也是这样的问题,你希望能把每次unlockCanvasAndPost提供到画布上显示出来,我也有这样的期望,不知道是使用问题还是bug --------------------编程问答-------------------- 不好意思,刚才测试错误,特收回刚才的话。有测试结果再来留言。 --------------------编程问答-------------------- 楼主有没有考虑过双缓存的问题啊?
补充:移动开发 , Android