¿Cómo puedo capturar toda la vista en un mapa de bits cuando se utiliza el paso de peatones para mostrar la página web?
Yo uso CrossWalk para mostrar la página web, funciona bien. Tengo una característica para capturar todo el contenido como mapa de bits para guardar en SDCard, pero no puedo encontrar una solución. Uso de TextureView sólo puede capturar un mapa de bits de tamaño de pantalla, cualquier persona tiene el mismo problema? BTW, puedo capturar todo el contenido con WebView.draw ().
- ¿Cómo crear XWalkWebResourceResponse?
- Android: gran aumento de tamaño de apk cuando se utiliza el navegador de cruce de peatones
- Android Crosswalk Lite - Integración con Android Studio
- Cómo personalizar o cambiar Default crosswalk decompress dialogue?
- No se puede agregar cruce con cli iónico 1.3.2
- ¿Cómo puedo publicar para reproducir la tienda x86 y ARM apks de mi cordova-crosswalk aplicación?
- CrossWalk Webview no inicia la URL
- No se pudieron resolver todas las dependencias para la configuración ': _armv7DebugCompile'
- CrossWalk - Aceptar encabezado de idioma
- Creación de aplicaciones con CrossWalk incorporado
- ¿Cómo construir android con Crosswalk lite usando ionic-cli?
- Cómo solucionar la entrada duplicada de entrada duplicada: javax / annotation / ParametersAreNullableByDefault.class
- ¿Puedo optimizar el primer tiempo de carga de Meteor Android Cordova?
Aquí hay un pseudo código que puede ayudar. Puede obtener la altura y el ancho del contenido desde la vista web y, a continuación, puede aprovechar webview.draw () … algo así como lo siguiente.
Bitmap bitmap = Bitmap.createBitmap( webView.getWidth(), webView.getContentHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); webView.draw(canvas);
A continuación, puede imprimir su archivo de mapa de bits mediante bitmap.compress y enviarlo a una secuencia de salida de archivos
//fos is a FileOutputStream, you can use something else if needed. bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
El único problema que preveo con esto es que su mapa de bits puede recortar el contenido horizontalmente ya que WebView no tiene un método para obtener el ancho del contenido. De lo contrario creo que esto debería funcionar.
Nunca uso el paso de peatones antes, pero supongo que el Crosswalk WebView es también descendiente de android.view.View. Si es así, entonces podría utilizar la caché de dibujo de vista de Android. Se parece a esto
yourWebView.setDrawingCacheEnabled(true); Bitmap bmp = yourWebView.getDrawingCache();
Entonces, como dijo Pablo, guárdelo a través de FileOutputStream
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
No se puede capturar la imagen XWalkView de manera estándar como se describe en las respuestas anteriores porque Crosswalk XWalkView funciona con la capa de hardware (es decir, SurfaceView o TextureView). Pero puedes usar el método getBitmap () de la clase TextureView para obtenerlo.
En resumen, debe habilitar el uso de TextureView en Crosswalk antes de que se inicialice XWalkView (en la subclase de aplicaciones, por ejemplo) con:
XWalkPreferences.setValue(XWalkPreferences.ANIMATABLE_XWALK_VIEW, true);
Y encuentre TextureView en el árbol de vistas para llamar a getBitmap () en él.
Algo como eso:
/** * 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; } }
Compruebe este código: https://github.com/gitawego/cordova-screenshot/blob/master/src/android/Screenshot.java para más detalles.
- Iniciar una actividad específica al escanear etiquetas NFC
- ¿Qué protege las contraseñas de AccountManager de Android de ser leídas por otras aplicaciones?