当前位置:编程学习 > wap >>

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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,