使用ViewPager滑动图像功能

时间:2014-09-19 14:37:03

标签: android android-viewpager

我正在尝试实现全屏图像活动,该活动将从URL加载图像。我已经在数组中设置了所有的URL。但是,在预览期间,我什么都看不到。

在下面找到FullScreenActivity代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_full_image);

    // get intent data
    Intent intent = getIntent();

    // Selected image id
    int position = intent.getExtras().getInt("id");

    Object[] s = (Object[]) intent.getSerializableExtra("full_url_array");
    String[] imageArray = Arrays.copyOf(s, s.length, String[].class);//intent.getExtras().getStringArray("full_url_array");

    CustomGridViewAdapter imageAdapter = new CustomGridViewAdapter(this, postImages);
    List<ImageView> images = new ArrayList<ImageView>();

    Log.d(TAG, "imageAdapter.getCount = "+imageAdapter.getCount());

    // Retrieve all the images
    for (int i = 0; i < imageAdapter.getCount(); i++) {
        try {
            ImageView imageView = new ImageView(this);
            Bitmap bitmap = BitmapFactory.decodeStream((InputStream) new URL(imageArray[i]).getContent());
            imageView.setImageBitmap(bitmap);
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            images.add(imageView);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    Log.d(TAG, "images.size = "+images.size());
    // Set the images into ViewPager
    ImagePagerAdapter pageradapter = new ImagePagerAdapter(images);
    ViewPager viewpager = (ViewPager) findViewById(R.id.pager);
    viewpager.setAdapter(pageradapter);
    // Show images following the position
    viewpager.setCurrentItem(position);
}

另一个问题:在ViewPager中使用什么更好:NetWorkImageView或ImageView?

感谢。

1 个答案:

答案 0 :(得分:2)

看起来您的活动会收到一个指向图像的URL数组。我使用volley framework,所以为了回答你的第二个问题,我使用NetworkImageView全屏显示图像(滑动以查看下一个...)

我的应用程序的一般流程如下:

1。)活动将所有URL作为捆绑包收到,与您的相似。

2。)实例化一个ImagePagerAdapter类(您编写扩展的FragmentStatePagerAdapter)。相关代码如下所示:

// Set up ViewPager and backing adapter
mAdapter = new ImagePagerAdapter(getSupportFragmentManager(), mDataItems.size());
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(mAdapter);

其中mPager是您在布局中定义的ViewPager

3.)在你的ImagePagerAdapter类中,getItem实现,实例化&#34; ImageDetailFragment&#34;片段传递图像的URL为&#34;页面&#34;。例如:

    @Override
    public Fragment getItem(int position) {

        final String itemLink = mDataItems.get(position);
        return ImageDetailFragment.newInstance(itemLink);
    }

4。)在你的&#34; ImageDetailFragment&#34;上接收链接(作为额外传递)。 。例如:

public static ImageDetailFragment newInstance(String imageUrl) {
    final ImageDetailFragment f = new ImageDetailFragment();

    final Bundle args = new Bundle();
    args.putString(IMAGE_DATA_EXTRA, imageUrl);
    f.setArguments(args);

    return f;
}

然后

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mImageUrl = getArguments() != null ? getArguments().getString(IMAGE_DATA_EXTRA) : null;
     // blah blah
    }

5。)To&#34; show&#34;图像,在我的情况下使用排球框架(或者你可以使用毕加索等......)

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    // volley specific class
    imageLoader = ((MyApp) getActivity().getApplicationContext()).getImageLoader();

    mImageView.setErrorImageResId(R.drawable.empty_photo); // if cannot load
    mImageView.setImageUrl(mImageUrl, imageLoader); // load it to the NetworkImageView , volley specific implementation

}

你可以在Android开发者文档中看到这种类似的模式......在这里:http://developer.android.com/training/displaying-bitmaps/display-bitmap.html#viewpager

祝你好运!