替换已弃用的图库的选项

时间:2013-04-05 12:22:47

标签: android android-viewpager deprecated

我目前正在使用Gallery小部件来显示缩略图的滑动列表。每个缩略图都有背景颜色和文本覆盖。 (这是一个颜色选择器)。

但是从API version 16, the gallery is deprecated.开始。据我了解,API版本大于16的手机不保证有图库小部件。

我会使用一个viewpager,但是它一次只显示一个视图,我也希望显示相邻的视图。水平滚动视图可以执行此操作,但它不会像图库那样捕捉到最近的选项。

我找了现有的小部件,找不到任何东西。您对我应该选择哪个小部件有任何建议吗?

7 个答案:

答案 0 :(得分:15)

替换Gallery的一个很好的选择是ViewPager,作为listview或gridview,你必须制作自己的适配器,扩展PagerAdater和布局项。我已经使用了下面附带的代码,它完美无缺。良好的触摸响应,我希望这可以帮助你!!!

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

}

答案 1 :(得分:9)

我使用了ViewPager,其clipToPadding设置为false,左侧和右侧的填充值相等。这使得页面比viewpager小,并将其置于其中。

然后我将viewPager.setPageMargin设置为负值,以允许两侧的页面可见。通过这种方式,您可以看到其他人显示的中心页面。

然后,您还可以通过在ViewPager(viewPager.setPageTransformer)上设置PageTransformer来添加一些奇特的动画。我使用PageTransformer中提供的float进行了旋转和缩放,以模拟类似旋转木马的效果。

我希望这对某人有帮助。此外,我认为画廊已被弃用,因为投掷只是感觉不对。您不知道在投掷之后将选择哪个项目。

答案 2 :(得分:2)

有人为画廊写了一个替代它的观点的替代品。它基于原始的图库代码,所以应该是一个改进。 这是链接: https://github.com/falnatsheh/EcoGallery

答案 3 :(得分:2)

目前最佳解决方案是RecyclerView

答案 4 :(得分:1)

有一种方法可以自定义ViewPager以显示相邻视图但不是很简单。检查一下 - http://commonsware.com/blog/2012/08/20/multiple-view-viewpager-options.html

如果没用,可以试试Horizo​​ntallScrollView。

答案 5 :(得分:0)

你试过coverflow吗?你可以用它。 https://github.com/Polidea/android-coverflow希望这对你有帮助。

您还可以使用页面卷曲进行翻转。 https://github.com/moritz-wundke/android-page-curl

答案 6 :(得分:0)

我认为最好使用View Pager替换图库。