2010-09-03 17 views
5

Sono un novizio per lo sviluppo di Android. Ora mi piacerebbe fare una galleria come immagine circolare come sotto. Le cose sono che voglio ingrandire l'immagine centrale quando l'utente scorre da sinistra a destra e da destra a sinistra. C'è qualche tutorial per questo?galleria circolare Android?

enter image description here quello che voglio è che l'immagine che è stata strisciata deve essere ingrandita mentre è al centro. Pensavo di poterlo fare con Gallery. ma l'esempio dello sviluppatore Android non è quello che voglio. :(

risposta

5


Se si desidera ingrandire l'immagine selezionata centro c'è un modo possibile Sul metodo onItemSelected, basta chiamare un'animazione per ingrandire l'oggetto la proprietà di galleria è che si tratta sempre di centro-locked. Così l'elemento centrale sarà sempre selezionato. Speranza che funziona ..

<?xml version="1.0" encoding="utf-8"?> 
<set 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false" 
    android:fillAfter="true" 
> 
<scale 
     android:fromXScale="1.0" 
     android:toXScale="1.50" 
     android:fromYScale="1.0" 
     android:toYScale="1.50" 
     android:duration="600" 
     android:pivotX="50%" 
     android:pivotY="50%" 
     android:fillAfter="true"/> 

</set> 

ricordo che si dovrà STO re la vista precedente come quando l'elemento si allontana dal centro dovrebbe essere messo alle dimensioni normali.

Quindi è possibile avere due viste: prevView e currView.
Effettua l'animazione sul currView.

Grazie,
Sen

12

prova youcan:..

public class TestGallery extends Activity { 
/** Called when the activity is first created. */ 
private Integer[] mImageIds = { R.drawable.sample_1, R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4 }; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Gallery g = (Gallery) findViewById(R.id.gallery); 
    g.setAdapter(new ImageAdapter(this)); 

    g.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView parent, View v, int position, long id) { 
      if (position >= mImageIds.length) { 
       position = position % mImageIds.length; 
      } 
      Toast.makeText(TestGallery.this, "" + position, Toast.LENGTH_SHORT).show(); 
     } 
    }); 

} 

public class ImageAdapter extends BaseAdapter { 
    int mGalleryItemBackground; 
    private Context mContext; 

    public ImageAdapter(Context c) { 
     mContext = c; 
     TypedArray a = obtainStyledAttributes(R.styleable.Gallery1); 
     mGalleryItemBackground = a.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0); 

     a.recycle(); 
    } 

    public int getCount() { 
     return Integer.MAX_VALUE; 
    } 

    public Object getItem(int position) { 
     if (position >= mImageIds.length) { 
      position = position % mImageIds.length; 
     } 
     return position; 
    } 

    public long getItemId(int position) { 
     if (position >= mImageIds.length) { 
      position = position % mImageIds.length; 
     } 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView i = new ImageView(mContext); 
     if (position >= mImageIds.length) { 
      position = position % mImageIds.length; 
     } 
     i.setImageResource(mImageIds[position]); 
     i.setLayoutParams(new Gallery.LayoutParams(80, 80)); 
     i.setScaleType(ImageView.ScaleType.FIT_XY); 
     i.setBackgroundResource(mGalleryItemBackground); 
     return i; 
    } 

    public int checkPosition(int position) { 
     if (position >= mImageIds.length) { 
      position = position % mImageIds.length; 
     } 
     return position; 
    } 
}} 
+0

Hi Pengwang, ho già provato i vostri codici e non cambia nulla. qualche idea ? – geekmyo

+0

codice di pengwang * simula * loop infinito estendendo l'intervallo –

+0

+1 Grazie per la soluzione .. !! –

1

ho creato il mio tutorial per questo: http://evgeni-shafran.blogspot.com/2011/08/tutorial-custom-gallery-circular-and.html

Per essere circolare, è necessario rendere più pensare che hanno un sacco di elementi, molto più di hai davvero.

E quindi posizionando position = position% items.length si crea qualcosa come (lo mostrerò per 3 articoli): 1,2,3,1,2,3,1,2,3,1,2 , 3,1,2,3,1,2,3,1,2,3 E poi andare al centro quindi anche se il rotolo molto non si avvicina alla fine. 1,2,3,1,2,3,1,2,3, -> < -, 2,3,1,2,3,1,2,3,1,2,3

Per essere selezionato: è necessario eseguire l'override di setOnItemSelectedListener e manipolare la dimensione. non dimenticare di salvare un riferimento alla tua ultima vista, quindi quando arrivi a quello successivo puoi farlo sembrare regolare, non ingrandito.

ho implementato sia di questo nel mio tutorial di cui sopra

Problemi correlati