Je voudrais ouvrir un SurfaceView
avec une icône placée au centre de l'écran lorsqu'une application est d'abord commencé. J'évoque la création d'une icône en utilisant une implémentation de SurfaceHolder.Callback
pour suivre quand l'objet 'Canvas' est prêt. Ma question est la suivante: y a-t-il un meilleur moyen? Y at-il des méthodes de démarrage d'une SurfaceView
avec une Drawables
chargée sur la création moins encombrants, sans avoir à recourir à placer la logique de tirage dans un objet de rappel?SurfaceView avec un Initializing Drawable
Voici mon code pour référence. Tout d'abord l'objet qui ne dessin:
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);
}
}
}
}
puis mon objet de rappel privé:
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.");}
}
J'ai beaucoup de mal à l'aide SurfaceView. Je ne peux pas finir SurfaceView comme activité avoir fini() mehtod. Je reçois OutOfMemoryException quand j'ouvre dire 13 SufraceView ... ooohh Je suis en difficulté. Savez-vous comment les finir? Je prolonge ma classe avec SurfaceView. –