【问题标题】:Options for replacing the deprecated Gallery替换已弃用图库的选项
【发布时间】:2013-04-05 12:22:46
【问题描述】:

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

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

我会使用 viewpager,但它一次只显示一个视图,我也想显示相邻的视图。水平滚动视图可以做到这一点,但它不会像画廊那样捕捉到最近的选项。

我查找了现有的小部件,但找不到。你对我应该选择什么小部件有什么建议吗?

【问题讨论】:

  • 你应该使用 ViewPager 或者你可以使用 HorizzontalScrollView(它是一个外部库)

标签: android android-viewpager deprecated


【解决方案1】:

替换 Gallery 的一个不错的选择是 ViewPager,用作列表视图或网格视图,您必须制作自己的适配器来扩展 PagerAdater 和布局项。我已经将它与我附在下面的代码一起使用,并且效果很好。良好的触摸响应,希望对您有所帮助!!!

布局

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

类代码

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

        }
    });

适配器

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

}

【讨论】:

  • 谢谢,效果很好。正如您所写,出色的流畅触摸响应。只有方法 public AdapterVerGaleria.getItem(int) 是我明确删除的,因为它似乎没有任何用途。
  • 什么是 ObjectVerGaleria?
  • 这个 == 比较在 isViewFromObject 中是如何工作的?我想它永远不会被调用,因为你必须使用 equals() 来比较
  • 这段代码有很多空白:lista_galeria 未定义,ObjectVerGaleria 类未定义,listImages 未定义。确保发布有效的解决方案。
【解决方案2】:

我使用了一个 ViewPager,它的 clipToPadding 设置为 false,并且左右两边的填充值相等。这使页面小于 viewpager 并将其居中。

然后我将 viewPager.setPageMargin 设置为负值,以允许两侧的页面可见。这样一来,您就有了一个居中的页面,而其他页面则显示出来。

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

我希望这对某人有所帮助。此外,我认为 Gallery 已被弃用,因为投掷感觉不对。您不知道投掷后会选择哪个项目。

【讨论】:

【解决方案3】:

有人写了一个替代画廊,回收它的观点。它基于原始画廊代码,因此应该是一个改进。 这是链接: https://github.com/falnatsheh/EcoGallery

【讨论】:

  • 将此导入我的工作区并使用它。简单,干净,似乎运作良好。感谢您的回答!
【解决方案4】:

目前最好的解决方案是RecyclerView

【讨论】:

  • 请详细说明您的解决方案.. RV 的解决方案如何?
【解决方案5】:

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

如果没有帮助,你可以试试 Horizo​​ntallScrollView。

【讨论】:

    【解决方案6】:

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

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

    【讨论】:

    • 你永远都是厕所。 @ToddDavies
    • android-coverflow 扩展了 Gallery,这真的不是一个解决方案。
    • 这不仅扩展了已弃用的方法,而且在弃用后的 Android 版本上存在错误。请看github.com/Polidea/android-coverflow/issues
    【解决方案7】:

    我认为使用View Pager 替换图库是个好主意。

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 2015-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      相关资源
      最近更新 更多