2010-09-03 11 views
5

Je suis un débutant au développement android.Maintenant, je voudrais faire une vue de la galerie aussi circulaire que l'image comme ci-dessous.Les choses sont que je veux agrandir l'image centrale lorsque l'utilisateur défile de gauche à droite et de droite à gauche. Y a-t-il des tutoriels pour ça? Ce que je veux, c'est que l'image qui a été glissée doit être agrandie lorsqu'elle est au centre. Je pensais pouvoir le faire avec Gallery. mais l'exemple du développeur Android n'est pas celui que je veux. :(galerie circulaire android?

Répondre

5


Si vous voulez agrandir le centre d'image il y a une façon possible sélectionnée Sur votre méthode onItemSelected, il suffit d'appeler une animation pour agrandir l'objet La propriété de la galerie est qu'il est toujours verrouillé au centre. Ainsi, l'élément central sera toujours sélectionné. espoir qui fonctionnera ..

<?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> 

Rappelez-vous que vous devrez sto En ce qui concerne la vue précédente, lorsque l'élément s'éloigne du centre, il doit être mis à la taille normale.

Vous pouvez donc avoir deux vues: prevView et currView.
Faites l'animation sur le currView.

Merci,
Sen

12

essayer 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

Salut pengwang, je l'ai déjà essayé vos codes et ça ne change rien. des idées ? – geekmyo

+0

Le code de pengwang * simule * la boucle infinie en étendant la plage –

+0

+1 Merci pour la solution .. !! –

1

J'ai créé mon propre tutoriel pour cela: http://evgeni-shafran.blogspot.com/2011/08/tutorial-custom-gallery-circular-and.html

Pour qu'il soit circulaire que vous devez faire penser qu'il a beaucoup d'éléments, beaucoup plus de tu as vraiment. Et puis en faisant position = position% items.length vous créez quelque chose comme (je vais le montrer pour 3 items): 1,2,3,1,2,3,1,2,3,1,2 , 3,1,2,3,1,2,3,1,2,3 Et puis allez au milieu, même si le rouleau beaucoup, il ne se rapproche pas de la fin. 1,2,3,1,2,3,1,2,3, -> < -, 2,3,1,2,3,1,2,3,1,2,3

Pour qu'il soit sélectionné: vous devez remplacer setOnItemSelectedListener et manipuler la taille. n'oubliez pas d'enregistrer une référence à votre dernière vue, donc quand vous arrivez à la prochaine, vous pouvez le faire paraître régulier, pas agrandi.

I mis en œuvre tous les deux dans mon tutoriel ci-dessus

Questions connexes