android 初始化屏幕,android – 使用Drawable初始化SurfaceView

首次启动应用程序时,我想打开一个带有图标的SurfaceView,该图标位于屏幕中央.我正在使用SurfaceHolder.Callback的实现来唤起图标创建,以跟踪’Canvas’对象何时准备就绪.我的问题是有更好的方法吗?是否有更简单的方法来启动SurfaceView,并在创建时加载一些Drawable,而不必诉诸于在回调对象中放置绘制逻辑?

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

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.");}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值