注意:在清单文件中的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();
}
}
}
}
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;
}
}
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" />
<!--下载下来的图片比较小,不填充布局,所以要加上最后一句话,让它填充布局-->