Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

1

13.05.2015, 13:16

Android Webseite in Bitmap rendern

Hi,
für eine App benötige ich eine Methode, die mir für eine gegebene Url ein Bitmap mit dem Webseiten Inhalt erstellt (also so, wie wenn man bei einem Browser einen Screenshot von der Anzeige macht, nachdem die Seite fertig geladen wurde).

Momentan versuche ich es so, erhalte aber nur ein weißes Bitmap:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
//Test Bitmap für Debug Zwecke generieren
            Bitmap bitmap = Bitmap.createBitmap(300, 300, Bitmap.Config.ARGB_8888);

            //Bitmap von Webseite generieren
            WebView mWebView = new WebView(context);
            mWebView.loadUrl(url);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            Canvas c = new Canvas(bitmap);
            mWebView.draw(c);

(http://stackoverflow.com/questions/46339…html-in-android)

Allerdings wird dieser Code nicht in der MainActivity ausgeführt, sondern in einer anderen Klasse (kann das die Fehlerursache sein?).
Deshalb musste ich auch die Zeile " setContentView(mWebView);" weglassen, da dazu in einer anderen Klasse die Referenz fehlt. Wäre die Zeile wichtig?

Danke schon mal für eure Hilfe.

2

13.05.2015, 15:10

Ich vermute mal, du erstellst das Bitmap, während die Seite noch am laden ist bzw. noch nicht fertig geladen ist.
Du Versuchst zwar, mit Thread.sleep(1000); zu warten, jedoch sorgt das dafür, dass die gesamte Ausführung gestoppt wird (also auch die Seite nicht weiter geladen wird).
In dem Post, den du Verlinkt hast siehst du ein onPageFinished-Methode. Wenn du dort einen Handler aufrufen würdest, der dann wiederum die fertige Page als Bitmap rendert, dann sollte es funktionieren.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

13.05.2015, 18:28

Wenn es nicht im GUI-Thread ausgeführt wird, ist es gut möglich, dass da gar nichts gerendert wird. Wird es im GUI-Thread aufgerufen, ist das Sleep da in der Tat wenig hilfreich, da es die UI blockiert. Das loadUrl tut durch das sleep vermutlich ebenfalls nichts und wird auch für eine Sekunde schlafen gelegt. Ein Timer (via Handler) wäre sicherlich sinnvoller. Aber selbst damit ist tatsächlich nicht garantiert, dass nach einer Sekunde alles da ist. Eine Sekunde ist nicht gerade viel für Browser-Operationen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

4

13.05.2015, 19:03

Okay, Thread.sleep() war dann keine gute Idee, wenn dann die Webseite auch nicht weiter geladen wird.

Hab jetzt versucht das Bitmap bei einem Aufruf von "onPageFinished" zu speichern, dabei bliebt das Bitmap aber immer noch einfarbig. Wenn ich es bei in "onNewPicture" speichere, funktioniert alles wie ich es mir vorgestellt habe ^^
Ich hätte es direkt genau so wie auf Stackoverflow beschrieben machen soll, dachte nur die vorgeschlagene Lösung war unnötig aufwendig, aber wenn ich mir den Code mal durchdenke macht das schon sinn so.

Danke für die Hilfe, h_dev und BlueCobold!

Werbeanzeige