web-dev-qa-db-fra.com

Options de remplacement de la galerie obsolète

J'utilise actuellement le widget Galerie pour afficher une liste glissante de miniatures. 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 obsolète. . D'après ce que je comprends, les widgets de la galerie ne sont pas garantis sur les téléphones dotés d'une version de l'API supérieure à 16.

J'utiliserais un viewpager, mais cela ne montre qu'une vue à la fois et je veux aussi montrer des vues adjacentes. Une vue de défilement horizontal peut le faire, mais elle ne s'accroche pas à l'option la plus proche comme le ferait une galerie.

J'ai recherché des widgets existants et n'en trouve aucun. Avez-vous des suggestions quant à quel widget je devrais choisir?

20
Todd Davies

Avez-vous essayé coverflow? Vous pouvez utiliser ceci. https://github.com/Polidea/Android-coverflow J'espère que cela vous aidera.

ou

Vous pouvez également utiliser curl de page pour le balayage. https://github.com/moritz-wundke/Android-page-curl

0
Shadow

Une bonne option pour remplacer la galerie est un ViewPager, fonctionne comme une vue en liste ou en grille, vous devez créer votre propre adaptateur qui étend PagerAdater et un élément de présentation. Je l'utilise déjà avec ce code que j'attache ci-dessous, et cela fonctionne parfaitement. bonne réponse au toucher, j'espère que cela peut vous aider !!!

DISPOSITION

<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 LA 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);
}

}

15
user3050757

J'ai utilisé un ViewPager avec son clipToPadding défini sur false et les mêmes valeurs de remplissage à gauche et à droite. Cela rend une page plus petite que le viewpager et la centre à l'intérieur.

Ensuite, je règle le paramètre viewPager.setPageMargin sur 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 les autres montrant.

Ensuite, vous pouvez également ajouter une animation de fantaisie en définissant un PageTransformer sur ViewPager (viewPager.setPageTransformer). J'ai fait une rotation et une mise à l'échelle en utilisant le float fourni dans le PageTransformer pour émuler un effet de type carrousel.

J'espère que cela est utile pour quelqu'un. De plus, je pense que la galerie a été désapprouvée parce que l'incident ne se sent pas bien. Vous ne savez pas quel élément sera sélectionné après une aventure.

9
Pepijn

Quelqu'un a écrit un remplacement pour galerie qui recycle ses vues. Il est basé sur le code de la galerie d'origine, il devrait donc s'agir d'une amélioration… .. Voici le lien: https://github.com/falnatsheh/EcoGallery

2
mtbomb

La meilleure solution actuelle est RecyclerView

2
Alexey Usmanov

Il existe un moyen de personnaliser ViewPager pour afficher des vues adjacentes, mais ce n’est pas très simple. Vérifiez ceci - http://commonsware.com/blog/2012/08/20/multiple-view-viewpager-options.html .

Si cela ne vous aide pas, essayez HorizontallScrollView.

1
QArea

Je pense être une bonne idée utilise le View Pager pour remplacer la galerie.

0
ademar111190