¿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 ().

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.

  • 71mb añadido al tamaño de la aplicación para el paso de peatones
  • setLoadWithOverviewMode para XWalkView
  • Cruce de la pasarela de Córdoba
  • Deshabilitar el menú de selección contextual en el paso de peatones (cordova)
  • Cómo combinar Cordova, Crosswalk y marco iónico
  • Error al crear la aplicación Cordova mediante el complemento de CrossView WebView
  • ¿Hay algún beneficio real usando el paso de peatones para Android 4.4 y superiores?
  • Crosswalk No se pudieron resolver todas las dependencias para la configuración ': _armv7DebugCompile'
  • Es peatonal más rápido que cocoon
  • ¿Cómo eliminar el Crosswalk from a Cordova project?
  • Android Build falló después de agregar Crosswalk a Ionic
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.