用Volley和UniversalImageDownload从网上下载到ViewPager,ViewPager实现自动跳转的功能

注意:在清单文件中的application里面加下面这句话:
android:name="com.example.baozou.utils.GlobalApplication"
就是包名加类名,注册GlobalApplication。
在application外面加上联网权限:
<uses-permission android:name="android.permission.INTERNET" />
导入以下jar包:
android-support-v4.jar
univetrsal-image-loader-1.8.4-with-sources.jar
volley.jar
导包的时候千万可别倒错了

在MainActivity中的代码:
public class MainActivity extends FragmentActivity { 

private ViewPager viewpager; 
RequestQueue queue; 
TextView tv1,tv2,tv3; 
List<Map<String,String>> list; 

@Override 
protected void onCreate(Bundle arg0) { 
// TODO Auto-generated method stub 
super.onCreate(arg0); 
setContentView(R.layout.activity_main); 
//先找到我们需要的各个控件 
viewpager = (ViewPager) findViewById(R.id.viewpager); 
tv1 = (TextView) findViewById(R.id.viewpagertext); 
tv2 = (TextView) findViewById(R.id.viewpagercount); 
tv3 = (TextView) findViewById(R.id.text3); 
//新建一个RequestQueue 
queue = Volley.newRequestQueue(this); 
//这是我们要获取数据的网址 
String url ="http://ribao.ibaozou.com/api/v1/articles/latest"; 
//在StringRequest里面解析我们要的数据 
StringRequest request = new StringRequest(url, 
new Listener<String>() { 
@Override 
public void onResponse(String response) { 
Log.e("bm", response); 
// TODO Auto-generated method stub 
try { 
//新建一个List<Map<String,String>>数组 
list = new ArrayList<Map<String, String>>(); 
//用JSONObject解析 
JSONObject object = new JSONObject(response); 
JSONArray top_stories = object 
.getJSONArray("top_stories"); 
for (int i = 0; i < top_stories.length(); i++) { 
//新建一个Map 
Map<String, String> map = new HashMap<String, String>(); 
JSONObject stroy = top_stories.getJSONObject(i); 
//得到我们要的title和图片 
String title = stroy.getString("title"); 
String image = stroy.getString("image"); 
//把他们以键值对的方式保存到Map里面 
map.put("title", title); 
map.put("image", image); 
//把Map放到List集合里 
list.add(map); 

//将我们自己写的Adapter实例化一个出来 
MainFragmentPagerAdapter adapter = new MainFragmentPagerAdapter(getSupportFragmentManager(), list); 
//给ViewPager设置FragmentPagerAdapter 
viewpager.setAdapter(adapter); 
//开启每隔一段时间跳一下的线程 
new PagerThread().start(); 

} catch (JSONException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 


}, new ErrorListener() { 
@Override 
public void onErrorResponse(VolleyError error) { 
// TODO Auto-generated method stub 

}); 
//把我们的Request加到RequestQueue中 
queue.add(request); 


//定义一个布尔值,用来判断是否停止 
private boolean boo = true; 
//定义一个变量,用来改变值 
int count = 1; 
//用Handler中的HandleMessage来处理图片和标题的变化 
public Handler handler = new Handler() { 
public void handleMessage(android.os.Message msg) { 
//设置ViewPager的初始页 
viewpager.setCurrentItem(count); 
//设置tv1的内容为title 
tv1.setText(list.get(count).get("title")); 
//设置总的页数 
tv3.setText("/"+list.size()+""); 
//让count每变换一次加一次 
count += 1; 
//设置当前页的页数 
tv2.setText(count+""); 
//设置当页数跳到了末尾,跳到第一个重头开始 
if (count > 4) { 
count = 0; 

}; 
}; 
//新建一个线程,让Handler中处理的消息每隔一段时间变化一次 
class PagerThread extends Thread { 
@Override 
public void run() { 
// TODO Auto-generated method stub 
super.run(); 
while (boo) { 
try { 
Thread.sleep(3000); 
handler.sendEmptyMessage(0); 
} catch (InterruptedException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 




//当退出的时候就把他销毁
@Override 
public void onDestroy() { 
// TODO Auto-generated method stub 
super.onDestroy(); 
boo = false; 

}

在FragmentViewPagerAdapter中的代码:
public class MainFragmentPagerAdapter extends FragmentPagerAdapter {
 private List<Map<String, String>> list;
 public MainFragmentPagerAdapter(FragmentManager fm,
   List<Map<String, String>> list) {
  super(fm);
  this.list = list;
 }
 public MainFragmentPagerAdapter(FragmentManager fm) {
  super(fm);
  // TODO Auto-generated constructor stub
 }
@Override
 public Fragment getItem(int arg0) {
  // TODO Auto-generated method stub
  //当ViewPager是arg0时,就new一个fragment出来
  //arg0会自动往上加,加到它的count数为止
  ViewPagerFragment fragment = new ViewPagerFragment();
  //新建一个Bundle,用来传我们需要的值
  Bundle bundle = new Bundle();
  //把Image的Url传到Bundle里面,然后到我们要下载的地方把它取出来
  bundle.putString("image", list.get(arg0).get("image"));
  //用来传递参数
  fragment.setArguments(bundle);
  return fragment;
 }

 @Override
 public int getCount() {
  // TODO Auto-generated method stub
  return 5;
 }
 @Override
 public Object instantiateItem(ViewGroup container, int position) {
  // TODO Auto-generated method stub
  return super.instantiateItem(container, position);
 }
 @Override
 public void destroyItem(ViewGroup container, int position, Object object) {
  // TODO Auto-generated method stub
  // super.destroyItem(container, position, object);
 }
}

GlobalApplication中的代码
这个类是已经封装好的,可以直接拿来用。调用的时候传入相应的值就可以。
public class GlobalApplication extends Application {
 public static ImageLoader imageLoader = ImageLoader.getInstance();
 public static DisplayImageOptions options;
 @Override
 public void onCreate() {
  // TODO Auto-generated method stub
  super.onCreate();
  initImageLoader(getApplicationContext());
  options = new DisplayImageOptions.Builder()
    .showStubImage(R.drawable.ic_launcher)// 加载等待 时显示的图片
    .showImageForEmptyUri(R.drawable.ic_launcher)// 加载数据为空时显示的图片
    .showImageOnFail(R.drawable.ic_launcher)// 加载失败时显示的图片
    .cacheInMemory().cacheOnDisc().build();
    /**
     * .displayer(new
     * RoundedBitmapDisplayer(20))
     **/
 }

 public static void initImageLoader(Context context) {
  // This configuration tuning is custom. You can tune every option, you
  // may tune some of them,
  // or you can create default configuration by
  // ImageLoaderConfiguration.createDefault(this);
  // method.
  ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
    context).threadPriority(Thread.NORM_PRIORITY - 2)
    .denyCacheImageMultipleSizesInMemory()
    .discCacheFileNameGenerator(new Md5FileNameGenerator())
    .tasksProcessingOrder(QueueProcessingType.LIFO).enableLogging() // Not
    .build();
  // Initialize ImageLoader with configuration.
  ImageLoader.getInstance().init(config);
  // imageLoader.init(ImageLoaderConfiguration.createDefault(context));
 }
}


在ViewPagerFragment中的代码:
public class ViewPagerFragment extends Fragment {
 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
   Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  //把ViewPagerFragment填充进来
  View view = inflater.inflate(R.layout.viewpagerfragment, container,false);
  //找到相应布局里的ImageView
  ImageView image = (ImageView) view.findViewById(R.id.viewpagerimage);
  //把Adapter里面用Bundle传进来的Url得到
  String url = getArguments().getString("image");
  //用Universal-RImage-Loader把图片下载下来
  ImageLoader.getInstance().displayImage(url, image,GlobalApplication.options);
  return view;
 }
}

在activity_main.xml中:
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="200dp" 
    </android.support.v4.view.ViewPager>

在viewpagerfragment中:    
    <ImageView
        android:id="@+id/viewpagerimage"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="fitXY" />
<!--下载下来的图片比较小,不填充布局,所以要加上最后一句话,让它填充布局-->
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值