2014-09-19 67 views
0

我试图实现将从URL加载图像的全屏图像活动。我已将所有网址设置在一个数组中。但是,不知何故,我在预览期间看不到任何东西。使用ViewPager扫描图像的功能

找到下面的代码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的?

谢谢。

回答

2

所以看起来像你的活动接收指向图像的URL数组。我用了volley framework,所以回答你的第二个问题,我用NetworkImageView显示全屏图像(刷卡看下......)

我的应用程序的一般流程是这样的:

1)活动将所有网址以捆绑方式接收,与您的类似。

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是你在你的布局

3)在你ImagePagerAdapter类的getItem实现中定义的ViewPager,实例化一个“ImageDetailFragment”片段沿着URL传递图片的“页面”。例如:

@Override 
    public Fragment getItem(int position) { 

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

4.)在您的“ImageDetailFragment”上接收链接(作为额外传递)。例如:

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)为了 “秀” 的形象,用我的情况下凌空框架(或者你可以使用毕加索等)

@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

祝您好运!

+0

谢谢alpinescrambler!我会尝试以上方法并让你知道。我正在使用gridview抽排。 – johnk1 2014-09-19 18:31:51