21

現在、ギャラリー ウィジェットを使用してサムネイルのスライド リストを表示しています。各サムネイルには、背景色とテキスト オーバーレイがあります。(これはカラーチューザーです)。

ただし、API バージョン 16 の時点で、ギャラリーは非推奨です。. 私が理解しているように、API バージョンが 16 を超える携帯電話では、ギャラリー ウィジェットが保証されていません。

ビューページャーを使用しますが、一度に 1 つのビューしか表示されず、隣接するビューも表示したいと考えています。水平スクロール ビューで実行できる場合もありますが、ギャラリーのように最も近いオプションにスナップすることはできません。

既存のウィジェットを探しましたが、見つかりません。どのウィジェットを選択すればよいか、何か提案はありますか?

4

7 に答える 7

15

ギャラリーを置き換える良いオプションは ViewPager で、リストビューまたはグリッドビューとして機能します。Pag​​erAdater とレイアウト項目を拡張する独自のアダプターを作成する必要があります。以下に添付するこのコードですでに使用しており、完全に機能します。良いタッチ応答、これがあなたを助けることを願っています!!!

レイアウト

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

}

于 2013-11-29T21:57:55.860 に答える
9

clipToPadding を false に設定し、左右のパディング値を等しくして ViewPager を使用しました。これにより、ページがビューページャーよりも小さくなり、ページが中央に配置されます。

次に、viewPager.setPageMargin を負の値に設定して、どちらの側のページも表示できるようにします。このようにして、他のページが表示された中央のページができます。

次に、ViewPager (viewPager.setPageTransformer) に PageTransformer を設定することで、派手なアニメーションを追加することもできます。カルーセルのような効果をエミュレートするために、PageTransformer で提供されたフロートを使用して回転とスケーリングを行いました。

これが誰かの役に立てば幸いです。また、フリングが正しく感じられないため、ギャラリーは廃止されたと思います。フリング後にどのアイテムが選択されるかわかりません。

于 2013-09-24T13:38:07.443 に答える
1

隣接するビューを表示するために ViewPager をカスタマイズする方法はありますが、それほど単純ではありません。これを確認してください - http://commonsware.com/blog/2012/08/20/multiple-view-viewpager-options.html

それでも解決しない場合は、Horizo​​ntallScrollView を試してみてください。

于 2013-04-05T14:47:40.343 に答える
0

カバーフローを試しましたか?これを使用できます。https://github.com/Polidea/android-coverflowこれがお役に立てば幸いです。

また

ページ カールを使用してスワイプすることもできます。https://github.com/moritz-wundke/android-page-curl

于 2013-04-05T12:41:26.150 に答える