android image dialog popup transparent

Android Image Dialog/Popup del mismo tamaño que la imagen y sin borde



transparent (5)

Por el momento estoy trabajando en un buscador de archivos. Todo funciona bien con una excepción: si el usuario hace clic en una imagen (jpg, png, bmp, ...), quiero que la imagen se muestre en un cuadro de diálogo o en una ventana emergente que tenga el mismo tamaño que la imagen, de modo que no hay fronteras en absoluto. Los archivos de imagen se encuentran en la tarjeta sd.

Esto es lo que tengo hasta ahora:

BitmapDrawable bitmap = new BitmapDrawable(context.getResources(), TARGET_PATH); AlertDialog.Builder imageDialog = new AlertDialog.Builder(context); LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View layout = inflater.inflate(R.layout.thumbnail, null); ImageView image = (ImageView) layout.findViewById(R.id.thumbnail_IMAGEVIEW); image.setImageDrawable(bitmap); imageDialog.setView(layout); imageDialog.create(); imageDialog.show();

El archivo XML:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/thumbnail_IMAGEVIEW" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:contentDescription="@string/icon_DESCRIPTION" /> </RelativeLayout>

Aquí está el resultado:

Hay bordes feos en los bordes de las imágenes; no quiero que se muestren. Intenté muchas cosas y ejemplos enumerados en google, etc. - nada funcionó aún.

La mejor opción será hacer que el diálogo / la vista detrás de la imagen sea del mismo tamaño que la imagen. Otra forma podría ser establecer el fondo detrás de la imagen transparente.

¿Cómo logro alguna solución? Me encantaría hacer que el fondo sea del mismo tamaño que la imagen, por lo que no queda nada "invisible", pero también estaré bien con la opción transparente.

Solución:

// Get screen size Display display = context.getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int screenWidth = size.x; int screenHeight = size.y; // Get target image size Bitmap bitmap = BitmapFactory.decodeFile(TARGET); int bitmapHeight = bitmap.getHeight(); int bitmapWidth = bitmap.getWidth(); // Scale the image down to fit perfectly into the screen // The value (250 in this case) must be adjusted for phone/tables displays while(bitmapHeight > (screenHeight - 250) || bitmapWidth > (screenWidth - 250)) { bitmapHeight = bitmapHeight / 2; bitmapWidth = bitmapWidth / 2; } // Create resized bitmap image BitmapDrawable resizedBitmap = new BitmapDrawable(context.getResources(), Bitmap.createScaledBitmap(bitmap, bitmapWidth, bitmapHeight, false)); // Create dialog Dialog dialog = new Dialog(context); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(R.layout.thumbnail); ImageView image = (ImageView) dialog.findViewById(R.id.imageview); // !!! Do here setBackground() instead of setImageDrawable() !!! // image.setBackground(resizedBitmap); // Without this line there is a very small border around the image (1px) // In my opinion it looks much better without it, so the choice is up to you. dialog.getWindow().setBackgroundDrawable(null); // Show the dialog dialog.show();

Archivo XML:

<?xml version="1.0" encoding="utf-8"?> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/imageview" android:layout_width="match_parent" android:layout_height="match_parent" > </ImageView>

Salida final:


Use FrameLayout como padre en lugar de RelativeLayout y configurado en wrap_content y 0 margins.

Tratar:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity" android:background="@color/background"> <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/frameLayout" android:background="#b2ff7c"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView" android:src="@drawable/ic_launcher"/> </FrameLayout> </RelativeLayout>

El resultado debe ser un fondo del mismo tamaño que ImageView.

Si esto funciona Intenta modificar esto en un tema personalizado:

<style name="Widget.ImageWell"> <item name="android:background">@android:drawable/panel_picture_frame_background</item> </style>


Cambia tu ImageView de esto:

<ImageView android:id="@+id/thumbnail_IMAGEVIEW" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:contentDescription="@string/icon_DESCRIPTION" />

A esto:

<ImageView android:id="@+id/thumbnail_IMAGEVIEW" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:adjustViewBounds="true" <!-- Here is the thing --> android:contentDescription="@string/icon_DESCRIPTION" />

Espero que esto ayude.


puede crear un cuadro de diálogo personalizado para mostrar imágenes, hacer un diseño para inflar en la vista de configuración de cuadros de diálogo, tomar un diseño lineal con ancho y alto ajustar el contenido y la vista de imagen con la propiedad de escala fitxy.


¿Has intentado configurar setType en ImageView?

<ImageView ... android:scaleType="fitXY" ... />


Agregue el código de una sola línea en la inicialización de su vista de imagen a su actividad y esto resolverá su problema.

image.setScaleType(ImageView.ScaleType.FIT_XY);