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);但是奇怪的是一个例子第二次画的会把第一次画的刷掉。第二个线程做同样的事,不同的是一个自己电脑,一个公司电脑
但是两次画的,都会显示出来。到底默认是,那种是正确的呢?哥,都郁闷了。
这是什么原因呢?2. 我有两个例子都在线程里通过
第一次画
Canvas canvas= mSurfaceHolder.lockCanvas(null);
//这里画画,位置1
mSurfaceHolder.unlockCanvasAndPost(canvas);第二次画画
Canvas canvas= mSurfaceHolder.lockCanvas(null);
//这里画画,位置2
mSurfaceHolder.unlockCanvasAndPost(canvas);但是奇怪的是一个例子第二次画的会把第一次画的刷掉。第二个线程做同样的事,不同的是一个自己电脑,一个公司电脑
但是两次画的,都会显示出来。到底默认是,那种是正确的呢?哥,都郁闷了。
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);
}
}