Al momento sto lavorando su un browser di file. Tutto funziona perfettamente con un'eccezione: Se l'utente fa clic su un'immagine (jpg, png, bmp, ..), voglio che l'immagine venga visualizzata in una finestra di dialogo o in un popup che ha le stesse dimensioni dell'immagine - quindi che non ci sono confini. I file immagine si trovano sulla sdcard.Finestra di dialogo Immagine Android/Popup delle stesse dimensioni dell'immagine e senza bordo
Ecco quello che ho finora:
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();
Il file 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>
Ecco l'output:
Ci sono bordi brutti ai bordi delle immagini - Non voglio che vengano visualizzati. Ho provato un sacco di cose ed esempi elencati in google, ecc. - non funzionava ancora nulla.
L'opzione migliore sarà quella di rendere la finestra di dialogo/la vista dietro l'immagine, della stessa dimensione dell'immagine. Un altro modo potrebbe essere quello di impostare lo sfondo dietro l'immagine trasparente.
Come si ottiene una soluzione? Mi piacerebbe fare in modo che lo sfondo abbia le stesse dimensioni dell'immagine, quindi non è rimasta alcuna parte "invisibile", ma andrò bene anche con l'opzione trasparente.
Soluzione:
// 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();
file 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>
Risultato finale:
Dopo ore di tentativi ed errori ho avuto finalmente a lavorare. Aggiungo la soluzione a questo primo post. –
Ehi, le tue soluzioni mi sono piaciute così tanto che l'ho astratto in un componente facile da usare https://github.com/juliomarcos/ImageViewPopUpHelper ImageViewPopUpHelper.enablePopUpOnClick (getActivity(), targetImageView); –
È fantastico - grazie amico;) –