Autore Topic: Realizzazione di una semplice gallery  (Letto 1135 volte)

Offline ballandinoandrea

  • Nuovo arrivato
  • *
  • Post: 1
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG P990 + Asus Transformer TF101
  • Sistema operativo:
    Ubuntu 12 Windows XP Windows 7
Realizzazione di una semplice gallery
« il: 04 Ottobre 2012, 13:07:03 CEST »
0
Salve,
vorrei chiedere un consiglio (un classico calcio di inizio) su come realizzare una gallery. La gallery è semplicissima ossia io ho un file json o xml (adesso devo vedre) con gli URL delle immagini che voglio visualizzare e vorrei poter disporre in una prima activity le miniature su una gridview.

Per poter recuperare le immagini da json o xml non ho nessunissimo problema purtroppo quando visualizzo le miniature sulla grid chiaramente le immagini di dimensione diversa creano un layout sfasatissimo. Come posso ovviare a questo fatto? Ridimensionare? se si come?? C'è un modo furbo?

Poi vorrei che al click dell'immagine caricare un'activity dove posso zoomare l'immagine selezionata. In questo caso sarebbe sufficiente usare una webview? Questo perché mi pare che la webview abbia già i controlli di zoom incorporati.

Ho creato i seguenti layout :

Layout della GridView
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >
   
        <GridView
                android:id="@+id/grid"
                android:layout_width="fill_parent"
               android:layout_height="wrap_content"
               android:numColumns="auto_fit"
               android:verticalSpacing="10dp"
               android:horizontalSpacing="10dp"
               android:columnWidth="90dp"
               android:stretchMode="columnWidth"
               android:gravity="center">
                </GridView>
</LinearLayout>

e layout della cella (ossia della miniatura)
Codice (XML): [Seleziona]
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
 
    <TextView
    android:id="@+id/untesto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="666"
    android:layout_gravity="center"
    android:textAppearance="?android:attr/textAppearanceSmall" />
   
        <ImageView
                android:id="@+id/imageinGrid"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:contentDescription="content"
                android:src="@drawable/no_image"
                android:layout_gravity="center"
                android:scaleType="center"/>
</LinearLayout>

Inoltre l'adapter :

Codice (Java): [Seleziona]
public class GalleryMobileAdapter extends BaseAdapter {
        private Activity activity;
        private static LayoutInflater inflater = null;
        public ImageLoader imageLoader;
        private ArrayList<HashMap<String, String>> data;
       
        public GalleryMobileAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
                activity = a;
                inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            imageLoader=new ImageLoader(activity.getApplicationContext());
                data = d;
        }

        @Override
        public int getCount() {
                return data.size();
        }

        @Override
        public Object getItem(int position) {
                return position;
        }

        @Override
        public long getItemId(int position) {
                return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
                        View vi=convertView;
        if(convertView==null)
                        vi = inflater.inflate(R.layout.gallery_mobile_cell, null);                     
                        final ImageView thumb_image = (ImageView)vi.findViewById(R.id.imageinGrid);
                        TextView testo = (TextView)vi.findViewById(R.id.untesto);
                                               
                        HashMap<String, String> imageList = new HashMap<String, String>();
                        imageList = data.get(position);

                        testo.setText(imageList.get("testo"));
                        AsyncHttpClient client = new AsyncHttpClient();
                        String[] allowedContentTypes = new String[] { "image/png", "image/jpeg" };
                        client.get(imageList.get("image"), new BinaryHttpResponseHandler(allowedContentTypes) {
                            @Override
                            public void onSuccess(byte[] fileData)
                            {
                                InputStream is = new ByteArrayInputStream(fileData);
                                Bitmap image = BitmapFactory.decodeStream(is);
                                                               
                                thumb_image.setImageBitmap(image);
                               
                            }});
                return vi;
        }
}

Per recuperare le immagini utilizzo la libreria asynchttp http://loopj.com/android-async-http/

Allego l'immagine tratta dall'emulatore...




Offline RogoMantiK

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xperia Neo
Re:Realizzazione di una semplice gallery
« Risposta #1 il: 10 Dicembre 2012, 15:03:41 CET »
0
e layout della cella (ossia della miniatura)


cambia

Codice (Java): [Seleziona]
 <ImageView
                android:id="@+id/imageinGrid"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:contentDescription="content"
                android:src="@drawable/no_image"
                android:layout_gravity="center"
                android:scaleType="center"/>
con
Codice (Java): [Seleziona]
 <ImageView
                android:id="@+id/imageinGrid"
                android:layout_width="100dp"            <-----Qui definisci la tua immagine (per farle essere tutte uguali)
                android:layout_height="100dp"           //// larghezza-altezza    in questo caso quadrata
                android:contentDescription="content"
                android:src="@drawable/no_image"        
                android:layout_gravity="center"      
                android:scaleType="center"         <----Qui devi mettere come ridimensionale l'immagine. prova centerCrop e fitCenter
/>