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.
- ¿Cómo tomar la captura de pantalla de la página de actividad ENTERO mediante programación?
- Tamaños de captura de pantalla para publicar la aplicación android en Google Play
- Android Captura de pantalla o hace video de imágenes
- Desactivar captura de pantalla en mi aplicación Android
- Detectar una captura de pantalla Android
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
- Tomar una captura de pantalla de una vista completa
- ¿Alguna razón por la que no pueda tomar una captura de pantalla de mi aplicación con el acceso directo integrado de ICS?
- Tomar captura de pantalla de la pantalla actual del dispositivo
- Captura de pantalla desde el servicio de fondo de otra aplicación (mediante programación)
- Generar capturas de pantalla de iPhone y iPad incluyendo el marco del dispositivo
- Necesito establecer la ruta para guardar las imágenes con una aplicación para Android e IOS con UNITY
- Cómo grabar pantalla y tomar capturas de pantalla, utilizando la API de Android?
- La captura de pantalla DDMS no funciona
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);
- Detectar si las teclas están disponibles en el teclado en pantalla del dispositivo móvil
- App en modo quiosco en android