whe*_*ies 5 android surfaceview drawable
SurfaceView首次启动应用程序时,我想打开一个带有图标的图标放在屏幕中央.我正在唤起图标创建,使用一个实现SurfaceHolder.Callback来跟踪'Canvas'对象何时准备就绪.我的问题是有更好的方法吗?是否有不那么繁琐的方法来启动SurfaceView一些Drawables加载创建而不必诉诸于在回调对象中放置绘制逻辑?
这是我的代码供参考.首先绘制的对象:
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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后我的私人回调对象:
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.");}
}
Run Code Online (Sandbox Code Playgroud)
我只是通过将我想要的图像分配给布局 XML 文件中的视图来完成类似的操作。如果您必须等到画布和所有内容都准备好,为什么不直接使用默认属性呢?我的打开启动画面只是一个视图
android:background="@drawable/splash"
Run Code Online (Sandbox Code Playgroud)
添加到其布局中。
| 归档时间: |
|
| 查看次数: |
2163 次 |
| 最近记录: |