Einstellung Bild-hintergrund im SurfaceView, immer schwarzer Bildschirm
Okay, so Im Versuch, den hintergrund einer SurfaceView zu einer JPG-Datei. Aber es scheint nicht zu wollen, zeichnen Sie das Bild, und alles was ich bekomme ist ein schwarzer Bildschirm.
Hier:s mein code:
public class FloorplanActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MapView mapView = new MapView(getApplicationContext());
setContentView(mapView);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.floorplan, menu);
return true;
}
class MapView extends SurfaceView{
Rect testRectangle1 = new Rect(0, 0, 50, 50);
Bitmap scaled;
int x;
int y;
public MapView(Context context) {
super(context);
}
public void surfaceCreated(SurfaceHolder arg0){
Bitmap background = BitmapFactory.decodeResource(getResources(), R.drawable.floorplan);
float scale = (float)background.getHeight()/(float)getHeight();
int newWidth = Math.round(background.getWidth()/scale);
int newHeight = Math.round(background.getHeight()/scale);
scaled = Bitmap.createScaledBitmap(background, newWidth, newHeight, true);
}
public void onDraw(Canvas canvas) {
canvas.drawBitmap(scaled, 0, 0, null); //draw the background
}
Nicht sicher, warum es nicht zeichnen "floorplan" - Bild, das ich gespeichert haben, in den drawable-mdpi Ordner.
Jemand irgendwelche Vorschläge?
Dank.
EDIT: Nachdem ich einige debugging mit breakpoints, wie es scheint, den "skaliert" - variable wird "Infinity" aus irgendeinem Grund und als solche die newWidth und newHeight Variablen werden weniger als 0 und stürzt die Anwendung ab.
Dies ist nur, wenn ich Sie den ganzen surfaceCreated in den Konstruktor, wenn ich den code belassen wie er ist hier, dann ist es nicht alles tun, beyind die Anzeige einen schwarzen Bildschirm.
Keine Ahnung, was es verursacht, das zu tun, obwohl...
InformationsquelleAutor Hallow | 2013-02-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersten, die Sie implementieren sollten, SurfaceHolder.Callback-Schnittstelle mit Ihrem MapView-Klasse, und legen Sie es als callback für seine SurfaceHolder, um die app rufen Sie Ihre onSurfaceCreated() metod.
Zweitens, wenn Sie möchten, dass Ihre onDraw () - Methode aufgerufen werden, dann rufen Sie setWillNotDraw(false) in der MapView Konstruktor.
Habe ich getan, wie folgt:
Und es funktioniert gut.
HINWEIS: Verschoben MapView-Klasse in eine separate *.java-Datei.
Update Beobachten, Duplizieren, Kopieren, Verschieben
Das ist zwar alt, DANK. Ich habe die Zerschlagung meinen Kopf an genau dem gleichen problem zu lange jetzt.
Wenn u wollen, zeichnen Sie etwas auf dieser surfaceview mit hintergrund, u hv zu löschen, rufen Sie zu setWillNotDraw(false) else u was u ziehen, wird nicht sichtbar sein
Beachten Sie, dass SurfaceView besteht aus zwei teilen, die Oberfläche und die Aussicht. Die Oberfläche ist eine separate Schicht, die zusammengesetzt ist hinter der Ebene, mit allen Ansichten, also im Normalfall die SurfaceView ist der Ansicht, nur ein transparentes Fenster, das die layout-code verwendet, um herauszufinden, wo die Oberfläche sollte spähen durch. Wenn Sie überschreiben
onDraw()
sind Sie rendering-Ansicht auf; wenn Sie füllen Sie die Ansicht mit undurchsichtigen Pixel, dann gibt es keinen Grund, sich über eine SurfaceView (nur eine benutzerdefinierte Ansicht erstellen).InformationsquelleAutor QArea