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扩展我的课程。