Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用可绘制视图初始化SurfaceView_Android_Drawable_Surfaceview - Fatal编程技术网

Android 使用可绘制视图初始化SurfaceView

Android 使用可绘制视图初始化SurfaceView,android,drawable,surfaceview,Android,Drawable,Surfaceview,我想打开一个SurfaceView,当应用程序第一次启动时,在屏幕中央放置一个图标。我正在使用SurfaceHolder.Callback的一个实现来调用图标创建,以跟踪“Canvas”对象何时准备就绪。我的问题是有更好的办法吗?在创建时加载一些Drawables启动SurfaceView,而无需在回调对象中放置绘制逻辑,是否有更简便的方法 这是我的代码供参考。首先是绘制图形的对象: public class CanvasDraw{ protected final SurfaceHold

我想打开一个
SurfaceView
,当应用程序第一次启动时,在屏幕中央放置一个图标。我正在使用
SurfaceHolder.Callback的一个实现来调用图标创建,以跟踪“Canvas”对象何时准备就绪。我的问题是有更好的办法吗?在创建时加载一些
Drawables
启动
SurfaceView
,而无需在回调对象中放置绘制逻辑,是否有更简便的方法

这是我的代码供参考。首先是绘制图形的对象:

public class CanvasDraw{
    protected final SurfaceHolder mHolder;
    protected final Drawable mDrawable;

    public interface DrawLogic{
        void draw(Rect _surface);
    }

    public CanvasDraw(SurfaceView _view, Drawable _drawable){
        mHolder = _view.getHolder();
        mDrawable = _drawable;
    }

    public void draw(DrawLogic _logic){
        Canvas canvas = null;
        try{
            canvas = mHolder.lockCanvas();
            if( canvas != null ){
                Log.i("DRAWABLE", "Drawing " + mDrawable.toString());
                _logic.draw( mHolder.getSurfaceFrame() );
                mDrawable.draw(canvas);
            }
            else{
                Log.i("DRAWABLE", "Canvas null valued");
            }
        }
        finally{
            if( canvas != null ){
                mHolder.unlockCanvasAndPost(canvas);
            }
        }
    }
}
然后是我的私有回调对象:

private class DrawOnceCallback implements SurfaceHolder.Callback {
    private final SurfaceHolder mHolder;

    public DrawOnceCallback(SurfaceHolder _holder ){
        mHolder = _holder;
        mHolder.addCallback(this);
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        Log.i("SURFACEHOLDER","Surface created.  Canvas available.");
        mDrawTiles.draw( new CanvasDraw.DrawLogic(){

            @Override
            public void draw(Rect _surface) {
                mTiles.setBounds( 
                    _surface.centerX() - mDrawWidth/2,
                    _surface.centerY() - mDrawHeight/2,
                    _surface.centerX() + mDrawHeight/2,
                    _surface.centerY() + mDrawHeight/2);
            }

        });
        mHolder.removeCallback(this);
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {Log.i("SURFACEHOLDER","Surface destroyed.");}
}

我只是通过将想要的图像分配给布局XML文件中的视图来完成类似的操作。如果你必须等到画布和所有东西都准备好了,为什么不使用默认属性呢?我打开的启动屏幕只是一个带有

android:background="@drawable/splash"

添加到其布局。

我在使用SurfaceView时遇到很多问题。我无法完成SurfaceView类活动,请使用finish()方法。当我打开13 SufraceView时,我正在摆脱记忆异常…哦,我有麻烦了。你知道怎么完成吗?我正在用SurfaceView扩展我的课程。