Ich benutze CrossWalk, um Webseite anzuzeigen, es funktioniert gut. Ich habe eine Funktion, um den gesamten Inhalt als Bitmap zu speichern, in SDCard zu speichern, aber ich kann keine Lösung finden. Mit TexturView kann nur eine Bildschirmgröße Bitmap erfassen, hat jeder das gleiche Problem? Übrigens kann ich den gesamten Inhalt mit WebView.draw() erfassen.Wie kann ich die gesamte Ansicht in einer Bitmap erfassen, wenn ich den Zebrastreifen verwende, um die Webseite anzuzeigen?
Antwort
Hier ist ein Pseudo-Code, der helfen kann. Sie können die Höhe und Breite des Inhalts von der Webansicht abrufen und dann können Sie webview.draw() ... so etwas wie das Folgende nutzen.
Bitmap bitmap = Bitmap.createBitmap(webView.getWidth(), webView.getContentHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
webView.draw(canvas);
Dann können Sie Ihre Ausgabe-Bitmap-Datei mit bitmap.compress und Ausgabe in einer Datei Ausgabestrom
//fos is a FileOutputStream, you can use something else if needed. bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
Das einzige Problem, das ich mit diesem voraussehen ist, dass die Bitmap den Inhalt Clip kann horizontal, da WebView keine Methode zum Abrufen der Inhaltsbreite besitzt. Ansonsten denke ich, das sollte funktionieren.
Ich benutze nie crosswalk vorher, aber ich vermute der Crosswalk WebView ist auch von android.view.View abgeleitet. Wenn ja, dann könnten Sie den Zeichnungscache von android view verwenden. Es sieht wie dieses
yourWebView.setDrawingCacheEnabled(true);
Bitmap bmp = yourWebView.getDrawingCache();
Damals wie Paulus sagte, außer durch Fileoutputstream
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
getDrawingCache() kann nur einen Teil des WebView nicht den gesamten Seiteninhalt erhalten. – handrenliang
Sie können nicht durch Standard-Wege XWalkView Bild erfassen, wie in den Antworten oben beschrieben, da Crosswalk XWalkView arbeitet mit Hardware-Schicht (zB SurfaceView oder TextureView). Sie können aber die getBitmap() - Methode der TextureView-Klasse verwenden.
Kurz gesagt, Sie sollten mit der TextureView in Fußgängerübergang aktivieren, bevor XWalkView wird (in Anwendungsunterklasse zum Beispiel) initialisiert werden mit:
XWalkPreferences.setValue(XWalkPreferences.ANIMATABLE_XWALK_VIEW, true);
Und finden TextureView in Aussicht Baum GetBitmap() auf sie nennen.
So etwas:
/**
* Returns TextureView which is used in XWalkView
*
* @param group
* @return
*/
private TextureView findXWalkTextureView(ViewGroup group) {
int childCount = group.getChildCount();
for (int i = 0; i < childCount; i++) {
View child = group.getChildAt(i);
if (child instanceof TextureView) {
String parentClassName = child.getParent().getClass().toString();
boolean isRightKindOfParent = (parentClassName.contains("XWalk"));
if (isRightKindOfParent) {
return (TextureView) child;
}
} else if (child instanceof ViewGroup) {
TextureView textureView = findXWalkTextureView((ViewGroup) child);
if (textureView != null) {
return textureView;
}
}
}
return null;
}
/**
* Example of capturing image from XWalkView based on TextureView
*
* @return
*/
public Bitmap captureImage() {
if (mXWalkView != null) {
Bitmap bitmap = null;
boolean isCrosswalk = false;
try {
Class.forName("org.xwalk.core.XWalkView");
isCrosswalk = true;
} catch (Exception e) {
e.printStackTrace();
}
if (isCrosswalk) {
try {
TextureView textureView = findXWalkTextureView(mXWalkView);
bitmap = textureView.getBitmap();
} catch (Exception e) {
e.printStackTrace();
}
} else {
bitmap = Bitmap.createBitmap(mXWalkView.getWidth(), mXWalkView.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bitmap);
mXWalkView.draw(c);
}
return bitmap;
} else {
return null;
}
}
Überprüfen Sie diesen Code: https://github.com/gitawego/cordova-screenshot/blob/master/src/android/Screenshot.java für weitere Details.
Ich möchte die ganze Ansicht nicht ein Bildschirm Teil davon erfassen. – handrenliang
- 1. Wie kann ich eine Webseite vorab laden, um sie anzuzeigen?
- 2. Wie verwende ich die Diagrammsteuerung, um Diagramme auf der Webseite anzuzeigen?
- 3. Wie verwende ich AJAX, um die Daten aus einer JSON-Datei in einer Tabelle anzuzeigen?
- 4. Wie kann ich die Farbtiefe einer Bitmap überprüfen?
- 5. Wie kann ich die Ereignisfilterung einer Datentabelle in Primzahlen erfassen
- 6. Wie kann ich die gesamte Zeile auswählen, wenn max
- 7. Wie verwende ich die String-Manipulation, um bestimmte Teile einer Eingabetextdatei zu erfassen?
- 8. Wie bekomme ich FB um die Nachricht anzuzeigen
- 9. Wie bekomme ich die Eigenschaften einer Bitmap?
- 10. Android: Wie kann ich den Hintergrund einer Ansicht zentrieren?
- 11. Wie verwende ich den Befehl cut in bash, um alle Spalten außer den angegebenen anzuzeigen?
- 12. Wie kann ich verhindern, dass die Webseite nach oben scrollt, wenn ich die Folie benutze?
- 13. Die beste Möglichkeit, eine Webseite innerhalb einer Webseite anzuzeigen?
- 14. Wie kann ich die Antwort und Ladezeit einer Webseite messen?
- 15. Wie kann ich die Kantenfarbe ändern, wenn ich die Füllfunktion in MATLAB verwende?
- 16. Wie verwende ich die Zeichenfolgenformatierung, um BEIDE führende Nullen und die Genauigkeit von 3 anzuzeigen?
- 17. Wie verwende ich einen Parameter, um ein Standardbild anzuzeigen?
- 18. Wie verwende ich einen Timer, um Inhalt anzuzeigen?
- 19. Wie kann ich die Bildschirmansicht erfassen und teilen?
- 20. Wie kann ich Perl verwenden, um Text von einer Webseite zu erfassen, die dynamisch mit JavaScript generiert wird?
- 21. Wie verwende ich Dojo, um DIV anzuzeigen/zu verbergen, indem ich auf den Radiobutton klicke?
- 22. Wie verwende ich die ios-Charts-Bibliothek, um Diagramme in meiner App anzuzeigen?
- 23. Erfassen Sie den Bildschirm in eine Bitmap
- 24. Wie kann ich die Großschreibung beibehalten, wenn ich die Autocomplete-Funktion in Emacs verwende?
- 25. Wie kann ich den Hash einer Webseite in Java erstellen?
- 26. Welche Tools kann ich verwenden, um herauszufinden, wie JavaScript die Webseite hängt, wenn sie selten auftritt?
- 27. Wie verwende ich die Ansicht von einem anderen Controller?
- 28. Wie kann ich die Ausgabe einer CustomScriptExtension erhalten, wenn ich Azure Resource Manager verwende?
- 29. Wie bekomme ich die aktuelle Sitzung, wenn ich MapperFactoryBean verwende?
- 30. Wie bekomme ich die ursprüngliche Ausnahme, wenn ich ContinueWith() verwende?
Ich verwende diese Methode, um WebView Inhalte zu erfassen, aber es funktioniert nicht mit CrossWalk WebView. – handrenliang
Ich bin nicht vertraut mit Cross-Walk, aber mit Blick auf ihre Dokumentation ist klar, das wird nicht funktionieren. Es tut mir Leid. Die XWalkView ist eine Unterklasse von FrameLayout, nicht die Webansicht. Gibt es etwas, das Sie daran hindert, Ihren HTML-Code in eine Webansicht zu laden und von dort zu speichern? –
Wie Sie wissen, verwenden WebView unter 4.4 Webkit, um Seite zu rendern, es saugt. Ich erstelle einen Hypertext-Editor, der unterhalb von 4.4 nicht gut funktioniert. – handrenliang