Ich erstelle eine App, die Zeichnungen und dergleichen unter den Benutzern Kontrolle und lassen Sie sie speichern. Ich versuche dies zu erreichen, indem ich ein benutzerdefiniertes Bitmap verwende, auf dem das Canvas gezeichnet wird, und dann die resultierende Bitmap speichern.UnsupportedException von Canvas.setBitmap (Bitmap)
Alles funktioniert wie erwartet, bis Canvas.setBitmap (Bitmap) aufgerufen wird.
Ich bekomme den folgenden Fehler.
03-24 13:47:50.741: E/AndroidRuntime(27888): FATAL EXCEPTION: main
03-24 13:47:50.741: E/AndroidRuntime(27888): Process: example.imageeditor, PID: 27888
03-24 13:47:50.741: E/AndroidRuntime(27888): java.lang.UnsupportedOperationException
03-24 13:47:50.741: E/AndroidRuntime(27888): at android.view.HardwareCanvas.setBitmap(HardwareCanvas.java:39)
-Code, der die Ausnahme wirft:
protected void onDraw(Canvas canvas) {
mResultImage=Bitmap.createBitmap(width,height,mOriginalImage.getConfig());
canvas.setBitmap(mResultImage);
canvas.save();
if(mOriginalImage!=null)
canvas.drawBitmap(mOriginalImage, width, height, paint);
else
canvas.drawText("Image loading...", width/2f-20, height/2, paint);
canvas.drawText(text, x, y-20, paint);
canvas.restore();
super.onDraw(canvas);
}
Die android.view.HardwareCanvas ist nicht einmal auf der Referenz von Android. Aber ich konnte einige Informationen darüber finden. Es scheint, dass es SetBitmap (Bitmap) ist noch nicht geschrieben, und das ist in Ordnung.
Meine Frage ist, warum die OnDraw (Canvas) eine HardwareCanvas-Klasse zurückgibt? Es ist nicht einmal eine super Klasse für Canvas.
Bonus Frage: Irgendwo in der Nähe?
Nun, das beantwortet meine Bonusfrage. Aber warum haben wir diese Methode, wenn wir sie nicht benutzen sollen? Es ist auch nicht veraltet und enthält keine Warnungen in der Referenz. Wie auch immer, danke für die Antwort. – torque203
Diese Methode sollte völlig in Ordnung sein, wenn Sie versuchen, ein von Ihnen selbst erstelltes Zeichenfeld zu ändern. Versuchen Sie sich vorzustellen, was Sie dort versuchen wollen. Sie verfügen über die Zeichenfläche der Ansicht, bei der es sich um die Zeichenfläche handelt, mit der sie sich auf dem Bildschirm darstellen, und Sie versuchen, diese Zeichenfläche stattdessen auf einer Bitmap zu zeichnen. Das würde alle anderen Ansichten zerstören, die auf der gleichen Leinwand gezeichnet werden sollen. Ziemlich klar, es könnte nicht funktionieren, oder? –
Ich habe auch die UnsupportedOperationException ausgeführt, nachdem ich die Dokumentation gelesen und festgestellt habe, dass setBitmap den internen Zeichenpuffer des Canvas-Bereichs festlegt, mit dem Sie dann arbeiten können. Es ist nicht so und Sie müssen einen zusätzlichen Canvas erstellen, aber es gibt keine ausreichende Warnung im Dokument. – comodoro