Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Captura de pantalla

Estoy desarrollando una aplicación para tomar capturas de pantalla en el dispositivo. En esta aplicación, podemos dibujar cualquier cosa en la pantalla. Para esto estoy usando Canvas, Paint y Path para hacer esto.

Estoy usando este código para tomar capturas de pantalla:

public void saveScreenshot() { if (ensureSDCardAccess()) { Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); onDraw(canvas); File file = new File(mScreenshotPath + "/" + System.currentTimeMillis() + ".jpg"); FileOutputStream fos; try { fos = new FileOutputStream(file); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); fos.close(); } catch (FileNotFoundException e) { Log.e("Panel", "FileNotFoundException", e); } catch (IOException e) { Log.e("Panel", "IOEception", e); } } } /** * Helper method to ensure that the given path exists. * TODO: check external storage state */ private boolean ensureSDCardAccess() { File file = new File(mScreenshotPath); if (file.exists()) { return true; } else if (file.mkdirs()) { return true; } return false; } 

Sin embargo, cuando se ejecuta la línea siguiente:

 Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); 

Mi aplicación se cierra con la siguiente excepción:

 11-28 15:05:46.291: E/AndroidRuntime(8209): java.lang.IllegalArgumentException: width and height must be > 0 

Si cambio la altura y el ancho, se toma la captura de pantalla, pero está vacía:

Vacío

¿Por qué sucede eso? ¿Qué estoy haciendo mal?

6 Solutions collect form web for “Captura de pantalla”

Usted puede hacerlo de esta manera,

Dé el identificador para su disposición principal y después de que usted exhiba el contenido en la pantalla escriba el código abajo en algún oyente diga el tecleo del botón o el artículo de menú o cualquier tal oyente (cerciórese de que usted llame esta línea después de su disposición pantalla en blanco).

  View content = findViewById(R.id.myLayout); content.setDrawingCacheEnabled(true); getScreen(content); 

Método getScreen (contenido)

 private void getScreen(View content) { Bitmap bitmap = content.getDrawingCache(); File file = new File("/sdcard/test.png"); try { file.createNewFile(); FileOutputStream ostream = new FileOutputStream(file); bitmap.compress(CompressFormat.PNG, 100, ostream); ostream.close(); } catch (Exception e) { e.printStackTrace(); } } 

También no para agregar permiso para escribir el archivo a SDCard.

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"> </uses-permission> 

La excepción se debe a que la altura y el ancho del Bitmap de Bitmap que está creando es cero

Intente debajo del código para obtener altura y ancho

 Display display = getWindowManager().getDefaultDisplay(); int width = display.getWidth(); int height = display.getHeight(); 

En caso de que no haya acceso a getWindowManager

 Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); int width = display.getWidth(); int height = display.getHeight(); 

GetWidth (), getHeight () se requiere para ser llamado con el contexto, si lo está intentando fuera de la actividad que fallará. Pruebe getApplicationContext.getWidth ().

¿Podría mostrar más de su código pls? Parece que usted está llamando anchura y altura no tienen valores enteros positivos. Puede depurar esto imprimiendo los valores de anchura y altura.

Me enfrenté a un problema similar y la solución fue:

Usted obtiene el ancho y el alto antes de que su vista se ahogue, así que compruebe primero si ancho o altura igual a cero:

 if (getWidth() == 0 || getHeight() == 0) { initRemote(remote); isViewInitialized=false; } 

IsViewInitialized es un valor de miembro.

A continuación, poner este código en OnSizeChanged

 @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); if(!isViewInitialized&&){ // this is the right place to take snapshot :) } } 

He envuelto el código de captura de pantalla en una biblioteca muy simple. Le permite tomar capturas de pantalla y almacenarlas en el disco si lo desea.

https://github.com/abdallahalaraby/Blink

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.