首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Resume to SurfaceView显示黑屏

Resume to SurfaceView显示黑屏
EN

Stack Overflow用户
提问于 2012-04-23 17:11:56
回答 2查看 7.5K关注 0票数 3

当我启动我的应用程序时,一切都很好。但是当我转到下一个活动并返回SurfaceView时,它看起来像black。当我调试时,我可以看到需要在画布上绘制的线条正在运行,但没有显示任何内容。

下面是我的代码:

代码语言:javascript
复制
public class DrawView extends SurfaceView implements Runnable
{

    Thread thread = null;
    SurfaceHolder holder;
    Bitmap background;
    Canvas canvas;
    Matrix matrixUP = new Matrix();
    Matrix matrixDOWN = new Matrix();
    boolean ok = false;

    public DrawView(Context context) 
    {
        super(context);
        holder = getHolder();
    }

    public void run() 
    {
        while(ok)
        {
            if(!holder.getSurface().isValid())
            {
                continue;
            }
            watch_hand = Bitmap.createScaledBitmap(watch_hand, width/4, height/6, false);
            watch_hand_down = Bitmap.createScaledBitmap(watch_hand_down, width/4, height/6, false);
            background = BitmapFactory.decodeResource(getResources(), R.drawable.needles);
            background = Bitmap.createScaledBitmap(background, width, height/2+20, false);
            canvas = holder.lockCanvas();
            matrixUP.setTranslate(CENTER_X - watch_hand.getWidth()/2, height/4 - watch_hand.getHeight() - 40);
            matrixUP.preRotate((float) degreUP , watch_hand.getWidth()/2 , watch_hand.getHeight()-10);

            matrixDOWN.setTranslate(CENTER_X - watch_hand_down.getWidth()/2, height/2 - watch_hand_down.getHeight() - 20);
            matrixDOWN.preRotate((float) degreDOWN , watch_hand_down.getWidth()/2 , 10);

            canvas.drawARGB(255, 255, 255, 255);
            canvas.drawBitmap(background, 0, 0, null);
            canvas.drawBitmap(watch_hand, matrixUP, null);
            canvas.drawBitmap(watch_hand_down, matrixDOWN, null);
            holder.unlockCanvasAndPost(canvas);
        }           
    }

    public void pause()
    {
        ok = false;
        while(true)
        {
            try
            {
                thread.join();
            }catch (InterruptedException e)
            {
                e.printStackTrace();
            }
            break;
        }
        thread = null;
    }

    public void resume()
    {
        ok = true;
        thread = new Thread(this);
        thread.start();
    }           
}

正如您所看到的,我正在使用一个恢复和暂停功能。它们是从onCreate调用的。为什么会发生这种情况,我如何解决这个问题?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-23 20:23:22

从曲面视图所在活动的onResume()和onPause()方法中调用曲面视图(在本例中为DrawView)的resume()和pause()方法。您提到您是从onCreate()调用的。

这应该可以解决这个问题。

票数 0
EN

Stack Overflow用户

发布于 2012-04-23 17:30:00

答案取决于您如何更改到其他活动。

基本上,当活动暂停、停止或销毁时,您必须考虑如何存储曲面的当前状态。

例如,您可以在活动中重载onSaveInstanceState以保存degreUP和degreDOWN (顺便说一句,它们没有在当前代码片段中定义)。并在onRestoreInstanceState中恢复它们。请参阅Saving Android Activity state using Save Instance State

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10277694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档