¿Cómo puedo tomar una captura de pantalla de una vista web, capturar la página completa?
Creo que el título lo cubre bastante, pero tengo una webview en mi actividad. He cargado una url en la webview y me gustaría tomar una captura de pantalla de la página completa (lo que está en la ventana de visualización y las cosas "debajo del doblez" también).
Tengo código que funciona para instantáneas de la ventana gráfica, y sé que esto se puede hacer en iOS mediante la ampliación de la webview antes de instantáneas. He intentado usar la misma técnica aquí:
- Android detecta cambio de URL de webview
- ¿Cómo usar WebView con Picasso?
- AdjustResize no funciona después de despedir el teclado haciendo clic en el teclado exterior
- SaveState de Webview no maneja WebViewClient personalizado
- Utilice una barra de acción contextual personalizada para la selección de texto de WebView
WebView browserView = (WebView) findViewById(R.id.browserView); //Resize the webview to the height of the webpage int pageHeight = browserView.getContentHeight(); LayoutParams browserParams = browserView.getLayoutParams(); browserView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, pageHeight)); //Capture the webview as a bitmap browserView.setDrawingCacheEnabled(true); Bitmap bitmap = Bitmap.createBitmap(browserView.getDrawingCache()); browserView.setDrawingCacheEnabled(false); //Create the filename to use String randomFilenamepart = String.valueOf(new SecureRandom().nextInt(1000000)); String filename = Environment.getExternalStorageDirectory().toString() + "/Screenshot_" + randomFilenamepart + ".jpg"; File imageFile = new File(filename); //Stream the file out to external storage as a JPEG OutputStream fout = null; try { fout = new FileOutputStream(imageFile); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fout); fout.flush(); fout.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { browserView.setLayoutParams(browserParams); }
Pero todavía estoy captando sólo el visor. Haciendo caso omiso de cosas como quedarse sin memoria porque la página es demasiado grande, ¿alguien sabe lo que estoy haciendo mal o cómo puedo incluir la porción fuera de la ventana gráfica?
- Hacer AppBarLayout responder a desplazamiento en WebView
- Android - forma simple de entrada de usuario web-view para back-end java con jQuery Mobile
- Android Load Cache Only no funciona. Mostrar WebView fuera de línea
- WebView y HTML5 <video>
- OnPageFinished () nunca llamado (webview)!
- Rotación de 90 grados en la vista web de FrameLayout en Android
- ¿Cómo acceder a los activos locales desde una URL remota en Android WebView?
- Reproducción de vídeo local en WebView en Android
Prueba éste
import java.io.FileOutputStream; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Picture; import android.os.Bundle; import android.view.Menu; import android.webkit.WebView; import android.webkit.WebViewClient; public class MainActivity extends Activity { WebView w ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); w = new WebView(this); w.setWebViewClient(new WebViewClient() { public void onPageFinished(WebView view, String url) { Picture picture = view.capturePicture(); Bitmap b = Bitmap.createBitmap( picture.getWidth(), picture.getHeight(), Bitmap.Config.ARGB_8888); Canvas c = new Canvas( b ); picture.draw( c ); FileOutputStream fos = null; try { fos = new FileOutputStream( "mnt/sdcard/yahoo.jpg" ); if ( fos != null ) { b.compress(Bitmap.CompressFormat.JPEG, 100, fos); fos.close(); } } catch( Exception e ) { } } }); setContentView(w); w.loadUrl("http://search.yahoo.com/search?p=android"); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; }
}
Agregue el permiso de INTERNET en el archivo AndroidManifest.xml.
@avinash thakur códigos realmente funciona, que acaba de olvidar mencionar a añadir <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
en el archivo de manifiesto de Android, de lo contrario, Android no permitirá que su flujo para escribir datos / archivo en el dispositivo .
aclamaciones.