現在、ギャラリーウィジェットを使用して、サムネイルのスライドリストを表示しています。各サムネイルには、背景色とテキストオーバーレイがあります。 (色の選択です)。
ただし APIバージョン16の時点で、ギャラリーは非推奨です。 。私が理解しているように、APIバージョンが16を超える携帯電話にはギャラリーウィジェットが搭載されているとは限りません。
ビューページャーを使用しますが、一度に1つのビューしか表示されず、隣接するビューも表示したいです。水平スクロールビューでも可能ですが、ギャラリーのように最も近いオプションにスナップすることはありません。
既存のウィジェットを探しましたが、見つかりません。どのウィジェットを選択すべきかについての提案はありますか?
Coverflowを試しましたか?これを使用できます。 https://github.com/Polidea/Android-coverflow これがお役に立てば幸いです。
または
ページカールを使用してスワイプすることもできます。 https://github.com/moritz-wundke/Android-page-curl
ギャラリーを置き換える良いオプションは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.setPageMarginを負の値に設定して、両側のページが表示されるようにします。このようにして、他の人が表示される中央のページができます。
次に、ViewPager(viewPager.setPageTransformer)でPageTransformerを設定することにより、ファンシーなアニメーションを追加することもできます。 PageTransformerで提供されているフロートを使用して回転と拡大縮小を行い、カルーセルのような効果をエミュレートしました。
これが誰かに役立つことを願っています。また、私はギャラリーが非難されたと思う。投げた後にどのアイテムが選択されるかはわかりません。
誰かがギャラリーの代替品を書いて、そのビューをリサイクルしています。元のギャラリーコードに基づいているため、改善が必要です。リンクは次のとおりです。 https://github.com/falnatsheh/EcoGallery
現在の最良の解決策は RecyclerView
隣接するビューを表示するためにViewPagerをカスタマイズする方法がありますが、それほど簡単ではありません。これを確認してください- http://commonsware.com/blog/2012/08/20/multiple-view-viewpager-options.html 。
役に立たない場合は、HorizontalScrollViewを試してください。
View Pager を使用してギャラリーを置き換えることをお勧めします。