Captura de pantalla en negro

Estoy tomando instantáneas y creat miniaturas y luego compartir esta imagen. Pero la miniatura muestra todo negro. He utilizado el siguiente código

Bitmap bitmap; View v1 = v.getRootView(); v1.setDrawingCacheEnabled(true); bitmap = Bitmap.createBitmap(v1.getDrawingCache()); String url = Images.Media.insertImage( mContext.getContentResolver(), bitmap, "title", null); 

¿Puede alguien decirme qué está mal con este código.

EDITAR

 private View.OnClickListener shareListener = new View.OnClickListener() { public void onClick(View v) { Bitmap bitmap; View v1 = v.getRootView(); v1.setDrawingCacheEnabled(true); bitmap = Bitmap.createBitmap(v1.getDrawingCache()); String url = Images.Media.insertImage( mContext.getContentResolver(), bitmap, "title", null); v1.setDrawingCacheEnabled(false); Activity activity = (Activity) getContext(); Intent share = new Intent(Intent.ACTION_SEND); share.setType("image/jpeg"); share.putExtra(Intent.EXTRA_STREAM, Uri.parse(url)); activity.startActivity(Intent.createChooser(share, "Share")); } }; 

Imagen en negro Introduzca aquí la descripción de la imagen

Utilice el código siguiente que puede trabajar para usted. Gracias

 SCREENSHOTS_LOCATIONS = Environment.getExternalStorageDirectory().toString() + "/screenshots/"; // Get root view View view = activity.getWindow().getDecorView().getRootView(); // Create the bitmap to use to draw the screenshot final Bitmap bitmap = Bitmap.createBitmap(screenWidth, screenHeight, Bitmap.Config.ARGB_8888); final Canvas canvas = new Canvas(bitmap); // Get current theme to know which background to use final Theme theme = activity.getTheme(); final TypedArray ta = theme .obtainStyledAttributes(new int[] { android.R.attr.windowBackground }); final int res = ta.getResourceId(0, 0); final Drawable background = activity.getResources().getDrawable(res); // Draw background background.draw(canvas); // Draw views view.draw(canvas); // Save the screenshot to the file system FileOutputStream fos = null; try { final File sddir = new File(SCREENSHOTS_LOCATIONS); if (!sddir.exists()) { sddir.mkdirs(); } fos = new FileOutputStream(SCREENSHOTS_LOCATIONS + System.currentTimeMillis() + ".jpg"); if (fos != null) { if (!bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fos)) { Log.d("ScreenShot", "Compress/Write failed"); } fos.flush(); fos.close(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

tratar

 v1.setDrawingCacheEnabled(true); // this is the important code :) // Without it the view will have a dimension of 0,0 and the bitmap will be null v1.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); v1.layout(0, 0, v1.getMeasuredWidth(), v1.getMeasuredHeight()); //Forces the drawing cache to be built if the drawing cache is invalid. v1.buildDrawingCache(true); Bitmap b = Bitmap.createBitmap(v1.getDrawingCache()); v1.setDrawingCacheEnabled(false); // clear drawing cache 

Trate de aplicar este código:

 private File takeScreenshot(boolean showToast) { View v = getWindow().getDecorView(); v.setDrawingCacheEnabled(true); Bitmap cachedBitmap = v.getDrawingCache(); Bitmap copyBitmap = cachedBitmap.copy(Bitmap.Config.RGB_565, true); FileOutputStream output = null; File file = null; try { File path = Places.getScreenshotFolder(); Calendar cal = Calendar.getInstance(); file = new File(path, cal.get(Calendar.YEAR) + "_" + (1 + cal.get(Calendar.MONTH)) + "_" + cal.get(Calendar.DAY_OF_MONTH) + "_" + cal.get(Calendar.HOUR_OF_DAY) + "_" + cal.get(Calendar.MINUTE) + "_" + cal.get(Calendar.SECOND) + ".png"); output = new FileOutputStream(file); copyBitmap.compress(CompressFormat.PNG, 100, output); } catch (FileNotFoundException e) { file = null; e.printStackTrace(); } finally { if (output != null) { try { output.close(); } catch (IOException e) { e.printStackTrace(); } } } if (file != null) { if (showToast) Toast.makeText(getApplicationContext(), "Saved " + file.getAbsolutePath(), Toast.LENGTH_LONG).show(); // sending a broadcast to the media scanner so it will scan the new // screenshot. Intent requestScan = new Intent( Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); requestScan.setData(Uri.fromFile(file)); sendBroadcast(requestScan); return file; } else { return null; } } 

Esto funciona perfectamente para mí. Espero que esto te ayudará.

Tal vez esto suceda porque su área está marcada como segura. Mientras se muestran los iconos, la vista que muestra el contenido se muestra en negro porque es segura:

El usuario puede ver una región en blanco en la pantalla en lugar del contenido de superficies seguras o tampones protegidos.

http://developer.android.com/reference/android/view/Display.html#FLAG_SECURE

Pruebe este código .. Debe ser el trabajo.

 linearLayout.setDrawingCacheEnabled(true); linearLayout.measure(MeasureSpec.makeMeasureSpec(linearLayout.getWidth(), MeasureSpec.AT_MOST),MeasureSpec.makeMeasureSpec(linearLayout.getHeight(), MeasureSpec.EXACTLY)); linearLayout.layout(0, 0, linearLayout.getMeasuredWidth(), linearLayout.getMeasuredHeight()); Bitmap b1 =linearLayout.getDrawingCache(); Bitmap bigbitmap = Bitmap.createBitmap(linearLayout.getMeasuredWidth(), linearLayout.getMeasuredHeight(), Bitmap.Config.ARGB_4444); Canvas bigcanvas = new Canvas(bigbitmap); Paint paint = new Paint(); bigcanvas.drawBitmap(b1, 0, 0, paint); int Measuredwidth = 0; int Measuredheight = 0; Point size = new Point(); WindowManager w = getWindowManager(); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2){ w.getDefaultDisplay().getSize(size); Measuredwidth = size.x; Measuredheight = size.y; }else{ Display d = w.getDefaultDisplay(); Measuredwidth = d.getWidth(); Measuredheight = d.getHeight(); } Log.e(DEB_TAG, ""+Measuredwidth); Log.e(DEB_TAG, ""+Measuredheight); bigbitmap = Bitmap.createScaledBitmap(bigbitmap, Measuredwidth, Measuredheight, true); visiterCoverFlow.setScreenCache(bigbitmap); 
  • Cómo tomar capturas de pantalla en Android 2.3.3 sin root?
  • facebook screenshot-tests-para-android thow NullPointer en hacer captura de pantalla
  • ¿Puedo tomar captura de pantalla de la pantalla de inicio mediante programación, sin enraizar mi dispositivo Android?
  • Captura de pantalla de Android en dispositivo enraizado
  • ¿Toma una captura de pantalla parcial en Android?
  • Android obtiene una captura de pantalla de todos los elementos de ListView
  • Toma de pantalla de la pantalla actual
  • Google Play, capturas de pantalla para tabletas y orden de imágenes
  • Android usando el generador de arte de dispositivo para capturas de pantalla
  • ¿Cuál es la diferencia entre captura de pantalla y screencap en shell de adb?
  • Cómo reorganizar las capturas de pantalla en Google Play
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.