Vorrei aprire uno SurfaceView
con un'icona posta al centro dello schermo quando si avvia un'applicazione per la prima volta. Sto evocando la creazione di icone utilizzando un'implementazione di SurfaceHolder.Callback
per tracciare quando l'oggetto 'Canvas' è pronto. La mia domanda è c'è un modo migliore? Esistono metodi meno ingenti di avvio di uno SurfaceView
con alcuni Drawables
caricati alla creazione senza dover ricorrere alla logica di disegno all'interno di un oggetto di richiamata?Inizializzazione di SurfaceView con un Drawable
Ecco il mio codice per riferimento. In primo luogo l'oggetto che non disegno:
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);
}
}
}
}
e poi il mio oggetto callback privato:
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.");}
}
Ho molti problemi con SurfaceView. Non riesco a completare l'attività di SurfaceView come finish() mehtod. Sto ottenendo OutOfMemoryException quando apro dire 13 SufraceView ... ooohh sono nei guai. sai come finirli? Sto estendendo la mia classe con SurfaceView. –