2012-02-20 101 views

回答

0

這可以使用ViewPager相對容易地實現,我會說。考慮流程如下:當用戶選擇一個列表項目時,傳遞所有圖像(例如它們的URI)的列表和指示被選擇給包含ViewPager的活動的索引。然後,您可以使用傳遞列表初始化ViewPager的適配器,並將當前項目設置爲顯示給索引。

查看API演示,瞭解有關如何使用ViewPager的更多提示,或閱讀developers.android.com上的blog post。代替將片段作爲視圖提供給ViewPager,只需實例化一個ImageView - 你可能會發現this Q/A on SO對於如何做到這一點的一些指針很有用。此外,通讀PagerAdapter上的documentation也許同樣重要。

//編輯:一些指針編碼了上述建議:

讓你的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,檢索所有的演員和初始化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的引用,並且有一個'lazy'圖像加載器,它可以異步地將一個圖像設置爲一個ImageView。 image_pager_item_layout文件可以簡單地是一個ImageView,但也可以是ViewGroup中更復雜的視圖層次結構(如使用ListView和GridView),例如您可以輕鬆地爲圖像添加標題。這與

+0

@ MH很相似:對不起。對我來說很難。一些源代碼可用? – 2012-02-20 09:21:02

+0

我添加了一堆片段來說明早期建議的工作流程。希望有所幫助! – 2012-02-20 10:04:24

+0

謝謝..你提到我用Viewpager代替Gridview嗎? – 2012-02-20 10:29:45