我目前正在使用图库小部件来显示缩略图的滑动列表。每个缩略图都有一个背景颜色和一个文本覆盖。(这是一个颜色选择器)。
但是,从API 版本 16 开始,该库已被弃用。. 据我了解,不能保证 API 版本大于 16 的手机具有图库小部件。
我会使用 viewpager,但它一次只显示一个视图,我也想显示相邻的视图。水平滚动视图可以做到这一点,但它不会像画廊那样捕捉到最近的选项。
我已经寻找现有的小部件,但找不到任何小部件。你对我应该选择什么小部件有什么建议吗?
我目前正在使用图库小部件来显示缩略图的滑动列表。每个缩略图都有一个背景颜色和一个文本覆盖。(这是一个颜色选择器)。
但是,从API 版本 16 开始,该库已被弃用。. 据我了解,不能保证 API 版本大于 16 的手机具有图库小部件。
我会使用 viewpager,但它一次只显示一个视图,我也想显示相邻的视图。水平滚动视图可以做到这一点,但它不会像画廊那样捕捉到最近的选项。
我已经寻找现有的小部件,但找不到任何小部件。你对我应该选择什么小部件有什么建议吗?
替换 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);
}
}
我使用了一个 ViewPager,它的 clipToPadding 设置为 false 并且左右两边的填充值相等。这使得页面小于 viewpager 并在其中居中。
然后我将 viewPager.setPageMargin 设置为负值,以允许两侧的页面可见。这样,您就有了一个居中的页面,而其他页面则显示出来。
然后你还可以通过在 ViewPager (viewPager.setPageTransformer) 上设置一个 PageTransformer 来添加一些花哨的动画。我使用 PageTransformer 中提供的浮点数进行了旋转和缩放,以模拟类似轮播的效果。
我希望这对某人有帮助。此外,我认为 Gallery 已被弃用,因为投掷感觉不对。您不知道在投掷后会选择哪个项目。
有人写了一个替代画廊,回收它的观点。它基于原始画廊代码,因此应该是一个改进。这是链接: https ://github.com/falnatsheh/EcoGallery
目前最好的解决方案是RecyclerView
有一种方法可以自定义 ViewPager 以显示相邻视图,但它不是很简单。检查这个 - http://commonsware.com/blog/2012/08/20/multiple-view-viewpager-options.html。
如果它没有帮助你可以尝试 HorizontallScrollView。
你试过coverflow吗?你可以使用这个。https://github.com/Polidea/android-coverflow希望这可能对您有所帮助。
或者
您还可以使用 page curl 进行滑动。https://github.com/moritz-wundke/android-page-curl
我认为使用View Pager替换图库是个好主意。