Options pour remplacer la galerie dépréciée

j'utilise actuellement le widget Gallery pour afficher une liste de vignettes coulissantes. Chaque vignette a une couleur d'arrière-plan et une superposition de texte. (C'est un sélecteur de couleur).

cependant à partir de API version 16, la galerie est dépréciée.. Si je comprends bien, les téléphones avec des versions API supérieures à 16 ne sont pas garantis d'avoir le widget gallery.

j'utiliserais un viewpager, mais cela ne montre qu'une vue à la fois, et je veux montrer des vues adjacentes aussi. Un la vue de défilement horizontal peut le faire, mais il ne va pas se casser à l'option la plus proche comme une galerie le fera.

j'ai cherché les widgets existants, et je n'en trouve aucun. Avez-vous des suggestions quant au widget que je devrais choisir?

20
demandé sur ZhiXingZhe - WangYuQi 2013-04-05 16:22:46

7 réponses

avez-vous essayé coverflow? Vous pouvez utiliser cette. https://github.com/Polidea/android-coverflow J'espère que cela pourrait vous aider.

ou

vous pouvez également utiliser la boucle de page pour le pliage. https://github.com/moritz-wundke/android-page-curl

0
répondu Shadow 2016-06-17 16:42:28

une bonne option pour remplacer la galerie est un ViewPager, fonctionne comme listview ou gridview, vous devez faire votre propre adaptateur qui étend PagerAdater et un élément de mise en page. Je l'utilise déjà avec ce code que j'attache ci-dessous, et il fonctionne parfaitement. bonne réponse au toucher, j'espère que cela peut vous aider!!!

mise en page

<android.support.v4.view.ViewPager
    android:id="@+id/gallery_item"
    android:layout_width="fill_parent"
    android:layout_height="709dp"
    android:layout_below="@+id/relative_headerBar"
    >

</android.support.v4.view.ViewPager> 

CODE DE CLASSE

private ViewPager gallery;
gallery = (ViewPager) findViewById(R.id.gallery_item);

gallery = (ViewPager) findViewById(R.id.gallery_item);
    lista_galeria = new ArrayList<ObjectVerGaleria>();

    int i=0;
    for(i=0;i<listImages.length;i++)
    {       
        ObjectVerGaleria objV = new ObjectVerGaleria();
        objV.setUrlImg(listImages[i]);  
        lista_galeria.add(objV);
    }
    gallery.setAdapter(new AdapterVerGaleria(ctx, lista_galeria));

    gallery.setOnPageChangeListener(new OnPageChangeListener()
    {

        public void onPageSelected(int pos)
        {
            String pathImage = listImages[pos].toString();

            currentPosFront = pos;
            Log.d("setOnItemSelectedListener>>","path:"+pathImage);

        }

        public void onPageScrolled(int arg0, float arg1, int arg2)
        {
            // TODO Auto-generated method stub

        }

        public void onPageScrollStateChanged(int arg0)
        {
            // TODO Auto-generated method stub

        }
    });

adaptateur

public class AdapterVerGaleria extends PagerAdapter {

private Activity ctx;
private ArrayList<ObjectVerGaleria> dataList;

public AdapterVerGaleria(Activity act, ArrayList<ObjectVerGaleria> lista) {

    ctx = act;
    dataList = lista;
}

public int getCount() {
    return dataList.size();
}

public Object getItem(int pos) {
    return pos;
}

@Override
public Object instantiateItem(View collection, int pos)
{
    ImageView foto = new ImageView(ctx);



        //foto.setLayoutParams(new ViewPager.LayoutParams(Gallery.LayoutParams.FILL_PARENT, Gallery.LayoutParams.FILL_PARENT));
        foto.setScaleType(ImageView.ScaleType.FIT_XY);
        Utils.fetchDrawableOnThread(Utils.getPath(ctx)+"/"+dataList.get(pos).getUrlImg(), foto, true);
        ((ViewPager)collection).addView(foto);


    return foto;
}

@Override
public void destroyItem(View collection, int position, Object view)
{
    ((ViewPager)collection).removeView((ImageView)view);

}

public long getItemId(int pos) {
    return pos;
}



@Override
public boolean isViewFromObject(View view, Object object)
{
    // TODO Auto-generated method stub
    return view == ((ImageView)object);
}

}

14
répondu user3050757 2013-11-29 21:57:55

j'ai utilisé un ViewPager avec le it's clipToPadding réglé à false et égal les valeurs de remplissage à gauche et à droite. Cela rend une page plus petite que le viewpager et le centre à l'intérieur.

puis j'ai mis le viewPager.setPageMargin à une valeur négative pour permettre aux pages de chaque côté de devenir visibles. De cette façon, vous avez une page centrée avec d'autres montrant.

alors vous pouvez aussi ajouter de l'animation de fantaisie en mettant un PageTransformer sur le ViewPager (viewPager.setPageTransformer). J'ai fait une rotation et une échelle en utilisant le flotteur fourni dans le PageTransformer pour imiter un effet de carrousel.

j'espère que c'est utile pour quelqu'un. Aussi, je pense que la galerie a été dépréciée parce que le flinging ne se sent pas bien. Vous ne savez pas quel article sera sélectionné après une passade.

8
répondu Pepijn 2015-11-04 15:09:28

Quelqu'un a écrit un remplacement pour la galerie qui recycle ses vues. C'est basé sur le code original de la galerie, donc ça devrait être une amélioration. Voici le lien: https://github.com/falnatsheh/EcoGallery

2
répondu mtbomb 2013-12-09 18:03:24

la meilleure solution actuelle est RecyclerView

2
répondu Alexey Usmanov 2016-11-23 06:40:31

il y a un moyen de personnaliser ViewPager pour afficher des vues adjacentes mais ce n'est pas très simple. Cochez cette - http://commonsware.com/blog/2012/08/20/multiple-view-viewpager-options.html.

si cela ne vous aide pas, vous pouvez essayer Horizontalscrollview.

1
répondu QArea 2013-04-05 14:47:40

je pense être une bonne idée utilise le Afficher Le Pager remplacer la galerie.

0
répondu ademar111190 2013-09-05 07:19:44