0

私自身が(Webサービスから)画像をgridviewにロードしようとしましたが、正常に実行されました。Lazy Adapterを使用して、Webサービスからすべての画像をロードしました。

ある画像をクリックすると、次のアクティビティに表示され、その画像をスワイプすると次の画像が表示されます。何か案は???

4

1 に答える 1

0

これは、ViewPagerを使用して比較的簡単に実現できると思います。次のようなフローを検討してください。ユーザーがリストアイテムを選択したら、すべての画像のリスト(URIなど)と、選択した画像を示すインデックスをViewPagerを含むアクティビティに渡します。次に、渡されたリストを使用してViewPagerのアダプターを初期化し、現在のアイテムをインデックスに表示するように設定できます。

ViewPagerの使用方法に関するヒントについては、APIデモをご覧になるか、developers.android.comのブログ投稿をご覧ください。フラグメントをビューとしてViewPagerにフィードする代わりに、ImageViewをインスタンス化するだけです。SOに関するこのQ / Aは、その方法に関するいくつかのポインターに役立つ場合があります。また、おそらく同様に読むことが重要なのは、PagerAdapterのドキュメントです。

//編集:上記の提案をコーディングするためのいくつかのポインタ:

新しいインテントをonItemClick作成し、画像を取得するための関連データと選択したインデックスを追加して、アクティビティを開始します。

@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Intent intent = new Intent(this, ImageViewer.class);
    intent.putExtra(PAGE_POSITION, position);
    intent.putStringArrayListExtra(IMAGE_LIST, mImages)
    // or add a serializable, e.g. an ArrayList<T> with your POJOs
    intent.putExtra(IMAGE_LIST, mImages);
    startActivity(intent);
}

ViewPagerを含むImageViewerアクティビティで、すべてのエクストラを取得し、ViewPagerを指定された位置/インデックスに初期化します。

if (getIntent() != null && getIntent().getExtras() != null {
    mImagePosition = getIntent().getExtras().getInt(PAGE_POSITION, 0);
    mImageList = getIntent().getExtras().getStringArrayList(IMAGE_LIST);
    // or if you used Serializables
    mImageList = (ArrayList<T>) getIntent().getExtras().getSerializable(IMAGE_LIST);
    mViewPager.setAdapter(new ImagePagerAdapter());
    mViewPager.setCurrentItem(mImageIndex);
}

ImagePaderAdapterで、表示する画像を含むImageViewをインスタンス化します。そこにはたくさんの例がありますが、基本的には次のようになります。

private class ImagePagerAdapter extends PagerAdapter {

    public int getCount() {
        return mImageList == null ? 0 : mImageList.size();
    }

    public Object instantiateItem(View pager, int position) {
        if (mInflater == null) mInflater = (LayoutInflater) container.getContext().getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        View view = mInflater.inflate(R.layout.image_pager_item_layout, null, false);
        ImageView photoImageView = (ImageView) view.findViewById(R.id.photo_imageview);

        mImageLoader().loadImage(mImageList.get(position), photoImageView);

        ((ViewPager) pager).addView(view, 0);

        return view;
    }       

    public void destroyItem(View pager, int position, Object object) { 
        ((ViewPager) pager).removeView((View) object);
    }

    public boolean isViewFromObject(View view, Object object) {
        return view.equals(object);
    }

    public void finishUpdate(View container) { }
    public void restoreState(Parcelable state, ClassLoader loader) { }
    public void startUpdate(View container) { }
    public Parcelable saveState() { return null; }
}

上記のコードはテストしておらず、完全なものでもないことに注意してください。たとえば、LayoutInflaterへの参照を自分で取得する方法を知っていて、ImageViewに対して非同期で画像を設定する「レイジー」画像ローダーがあると仮定します。ファイルは単純にImageViewにするimage_pager_item_layoutことができますが、ViewGroup内のビューのより複雑な階層(ListViewやGridViewなど)にすることもできます。たとえば、画像にキャプションを簡単に追加できます。それは非常に似ています

于 2012-02-20T07:48:58.467 に答える