是否可以在滑动时更改gridview图像的位置?

时间:2012-02-20 07:03:45

标签: android android-layout android-gridview

我自己试图在gridview中加载图像(来自webservice)并且已经成功完成。 我使用Lazy Adapter从Web服务加载所有图像。

如果我点击某个图像,它应该显示在下一个活动中,并且在滑动该图像时应显示下一个图像。任何想法???

1 个答案:

答案 0 :(得分:0)

我会说使用ViewPager可以相对容易地实现。考虑如下流程:当用户选择列表项时,将所有图像的列表(例如,它们的URI)和指示所选图像的索引传递给包含ViewPager的活动。然后,您可以使用传递列表初始化ViewPager的适配器,并将当前项设置为显示到索引。

请参阅API演示,了解有关如何使用ViewPager的更多提示,或阅读developers.android.com上的blog post。除了将视图作为视图提供给ViewPager之外,只需实例化一个ImageView - 您可能会发现this Q/A on SO对于如何执行此操作的某些指示非常有用。此外,阅读可能同样重要的是PagerAdapter上的documentation

//编辑:编写上述建议的一些指示:

让你的onItemClick创建一个新的Intent,添加用于检索图像的相关数据以及所选索引并启动活动:

@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 Activity中,检索所有附加内容并将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设置图像。 image_pager_item_layout文件可以只是一个ImageView,也可以是ViewGroup内更复杂的视图层次结构(如ListView和GridView),例如:您可以轻松地为图像添加标题。它与

非常相似