Bir uygulama başlatıldığında ekranın ortasına yerleştirilmiş bir simgeyle SurfaceView
açmak istiyorum. 'Tuval' nesnesinin ne zaman hazır olduğunu izlemek için SurfaceHolder.Callback
numaralı uygulamayı kullanarak simge oluşturma işlemini başlatıyorum. Sorum şu: Daha iyi bir yol var mı? SurfaceView
'u Drawables
ile başlatırken, geri çağırma nesnesi içinde çizim mantığına başvurmak zorunda kalmadan, daha az hantal yöntem var mı?DrawView ile SurfaceView'ın başlatılması
Başvuru için kodum İşte. İlk çizim gelmez nesne:
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);
}
}
}
}
ve sonra benim özel geri arama nesnesi:
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.");}
}
SurfaceView kullanarak çok fazla sorun yaşıyorum. SurfaceView gibi aktiviteyi bitiremiyorum. Ben 13 SufraceView ... ooohh dertte açık olduğumda OutOfMemoryException alıyorum. Onları nasıl bitireceğini biliyor musun? Sınıfımı SurfaceView ile genişletiyorum. –