【问题标题】:Android Threaded Surfaceview Does not RefreshAndroid Threaded Surfaceview 不刷新
【发布时间】:2012-07-19 23:11:52
【问题描述】:

我编写了一个线程化的表面视图。它可以工作,但似乎不能很好地刷新。我的意思是刷新不好是EX:如果我移动一个位图位置,它会继续绘制在最后一个位置+是一个新位置。

这是我的代码:

public GameView(Context context) 
{               
    super(context);
    holder=getHolder(); 
    currentScreen=new TestScreen();
    currentScreen.Load(this.getResources());
}

protected void Resume()
{
    isRunning=true;
    renderThread=new Thread(this);
    renderThread.start();   
}


public void run() 
{
    while(isRunning)
    {
        gametime=lasttime-System.nanoTime();
        lasttime=System.nanoTime();
        if(!holder.getSurface().isValid())
                continue;

        if(!(currentScreen==null))
        {
            currentScreen.Update(gametime);
            Canvas cv=holder.lockCanvas();
            currentScreen.Draw(cv, gametime);        
            holder.unlockCanvasAndPost(cv);                         
        }       
    }
}

public void pause()
{
    isRunning=false;
    while(true)
    {
        try
        {
            renderThread.join();
        }
        catch (InterruptedException e)
        {

        }
        break;
    }
    renderThread=null;
}

Screen 类代码:

public void Load(Resources resources) {
    square=BitmapFactory.decodeResource(resources, R.drawable.square);
    x=y=0;
    super.Load(resources);
}

@Override
public void Update(long gametime) {
    x++;
    super.Update(gametime);
}

@Override
public void Draw(Canvas cv, long gametime) {
    cv.drawBitmap(square, x, y, null);
    super.Draw(cv, gametime);
}

我尝试不使用 Screen 类方法,但它做同样的事情。我是否遗漏了一些行来清除屏幕?

【问题讨论】:

    标签: android multithreading refresh surfaceview


    【解决方案1】:

    由于您没有为 lockCanvas() 提供脏矩形,因此系统不会保证在 unlockCanvasAndPost(Canvas) 和下次调用 lockCanvas() 之间 Canvas 会发生什么。

    因此,您必须重新绘制 Canvas 的全部内容,而不仅仅是已更改的部分。看起来您只是在绘制移动的正方形,而没有绘制背景来填充 Canvas 的其余部分。

    注意:如果你使用 lockCanvas(Rect dirty),情况会有所不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多