Todd Davies
Todd Davies

Reputation: 5522

Options for replacing the deprecated Gallery

I am currently using the Gallery widget to display a sliding list of thumbnails. Each thumbnail has a background colour and a text overlay. (It's a colour chooser).

However as of API version 16, the gallery is deprecated.. As I understand it, phones with API versions greater than 16 aren't guaranteed to have the gallery widget.

I would use a viewpager, but that only shows one view at a time, and I want to show adjacent views too. A horizontal scroll view may do it, but it won't snap to the nearest option like a gallery will.

I've looked for existing widgets, and can't find any. Do you have any suggestions as to what widget I should choose?

Upvotes: 22

Views: 36279

Answers (7)

Alexey  Usmanov
Alexey Usmanov

Reputation: 31

Current best solution is RecyclerView

Upvotes: 2

Shadow
Shadow

Reputation: 6899

Have you tried coverflow? You can use this. https://github.com/Polidea/android-coverflow Hope this might help you.

or

You can also use page curl for swipping. https://github.com/moritz-wundke/android-page-curl

Upvotes: 0

Pepijn
Pepijn

Reputation: 1477

I used a ViewPager with the it's clipToPadding set to false and equal padding values on the left and the right. This makes a page smaller than the viewpager and center it inside it.

Then I set the viewPager.setPageMargin to a negative value to allow the pages on either side to become visible. This way you have a centered page with others showing.

Then you can also add some fancy animation by setting a PageTransformer on the ViewPager (viewPager.setPageTransformer). I did a rotation and scale using the provided float in the PageTransformer to emulate a carousel like effect.

I hope this is helpful for somebody. Also I think the Gallery was deprecated because the flinging just doesn't feel right. You have no idea which item will be selected after a fling.

Upvotes: 9

mtbomb
mtbomb

Reputation: 1117

Someone wrote a replacement for gallery that recycles it's views. It's based on the original gallery code, so it should be an improvement. Here's the link: https://github.com/falnatsheh/EcoGallery

Upvotes: 2

user3050757
user3050757

Reputation: 272

A good option to replace the Gallery is a ViewPager, works as a listview or gridview, you have to made your own adapter that extends PagerAdater and a layout item. I already use it with this code i attach below, and it works perfectly. good touch response, i hope this can help you out!!!

LAYOUT

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

CLASS CODE

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

        }
    });

ADAPTER

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

}

Upvotes: 15

ademar111190
ademar111190

Reputation: 14505

I think be a good idea uses the View Pager to replace the gallery.

Upvotes: 0

QArea
QArea

Reputation: 4981

There is a way to customize ViewPager for showing adjacent views but it not very simple. Check this - http://commonsware.com/blog/2012/08/20/multiple-view-viewpager-options.html.

If it will not help you may try HorizontallScrollView.

Upvotes: 1

Related Questions