实现目的:加载顶部图片
实现步骤:先得到网络中图片资源所在的URL(此时得到的是children目录下的)。
1、给NewsListController设置数据和View:
a: Model数据:给图片需要设置ViewPager的适配器,adapter–>list。new一个adapter实现数据,进行处理数据,此时需要用到list,我们通过网络获取数据,(向服务器发送请求用httpUtils,要获得网络图片数据,我们可以采用BitmapUtils。)并将image添加到container里面。(下面会写明如何获取网络数据)
b: View视图:就是将布局文件加载进去(上次已经实现了)
xUtils用法
2、获取网络数据:
a: 用HiJson软件得到json树,然后新建一个类装这些数据。其中:采用public权限,字符串用String,数据用int或者long,array类型用list–>–>再新建一个类装E。
b: 然后在获取网络数据时,我们用到httpUtils采用send发送GET请求,获取到的数据再进行json解析并且将为PicPager设置适配器的方法也放在这里。
c: 实现适配器的初始化:
将图片加载进去:
采用BitmapUtils的display方法,通过图片资源的URI获取图片资源,并且播放。
3、 将NewsListController添加到NewsMenuController里面,
采用container.addView(view)。
实现结果:
HttpUtils模块:
支持同步,异步方式的请求; 支持大文件上传,上传大文件不会oom; 支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求; 下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件; 返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。
BitmapUtils模块:
加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
支持加载网络图片和本地图片;
内存管理使用lru算法,更好的管理bitmap内存;
可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等…
HttpUtils使用方法:
普通get方法
HttpUtils http = new HttpUtils();
http.send(HttpRequest.HttpMethod.GET,
"http://www.lidroid.com",
new RequestCallBack<String>(){
@Override
public void onLoading(long total, long current, boolean isUploading) {
testTextView.setText(current + "/" + total);
}
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
textView.setText(responseInfo.result);
}
@Override
public void onStart() {
}
@Override
public void onFailure(HttpException error, String msg) {
}
});
BitmapUtils 使用方法
BitmapUtils bitmapUtils = new BitmapUtils(this);
// 加载网络图片
bitmapUtils.display(testImageView, "http://bbs.lidroid.com/static/image/common/logo.png");
// 加载本地图片(路径以/开头, 绝对路径)
bitmapUtils.display(testImageView, "/sdcard/test.jpg");
// 加载assets中的图片(路径以assets开头)
bitmapUtils.display(testImageView, "assets/img/wallpaper.jpg");
// 使用ListView等容器展示图片时可通过PauseOnScrollListener控制滑动和快速滑动过程中时候暂停加载图片
listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true));
listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true, customListener));
NewsListController.java
package huaxa.it.zhihuidemo.base.newscenter;
import java.util.List;
import com.google.gson.Gson;
import com.lidroid.xutils.BitmapUtils;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;
import com.lidroid.xutils.view.annotation.ViewInject;
import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import huaxa.it.zhihuidemo.R;
import huaxa.it.zhihuidemo.base.MenuController;
import huaxa.it.zhihuidemo.bean.NewsListBean;
import huaxa.it.zhihuidemo.bean.NewsCenterBean.NewsBean;
import huaxa.it.zhihuidemo.bean.NewsListBean.NewsListTopNewsBean;
import huaxa.it.zhihuidemo.utils.Constans;
/**
* @项目名: ZhiHuiDemo
* @包名: huaxa.it.zhihuidemo.base.newscenter
* @类名: NewsListController
* @创建者: 黄夏莲
* @创建时间: 2016年11月24日 ,下午2:40:30
*
* @描述: TODO
*/
public class NewsListController extends MenuController
{
protected static final String TAG = "NewsListController";
@ViewInject(R.id.news_list_pic_pager)
private ViewPager mNewsListPicPager;
@ViewInject(R.id.news_list_point_container)
private ViewPager mNewsListPointContainer;
@ViewInject(R.id.news_list_tv_title)
private ViewPager mNewsListTvTitle;
private String mUrl;
private List<NewsListTopNewsBean> newsPicData;
public BitmapUtils mBitmapUtils;
public NewsListController(Context context, NewsBean data)
{
super(context);
this.mUrl = data.url;
}
@Override
protected View initView(Context context)
{
View view = View.inflate(context, R.layout.news_list_pager, null);
// ViewUtils注入
ViewUtils.inject(this, view);
mBitmapUtils = new BitmapUtils(mContext);
return view;
}
@Override
public void initData()
{
String url = Constans.Base_URI + mUrl;
// 初始化ViewPager对应的数据
HttpUtils httpUtils = new HttpUtils();
httpUtils.send(HttpMethod.GET, url, new RequestCallBack<String>()
{
@Override
public void onSuccess(ResponseInfo<String> responseInfo)
{
// TODO Auto-generated method stub
String result = responseInfo.result;
// 处理数据
processData(result);
}
@Override
public void onFailure(HttpException error, String msg)
{
// TODO Auto-generated method stub
}
});
}
// 数据处理
private void processData(String json)
{
// json解析数据
Gson gson = new Gson();
NewsListBean bean = gson.fromJson(json, NewsListBean.class);
// picture的数据
newsPicData = bean.data.topnews;
// 校验下
// Log.i(TAG, bean.data.news.get(0).title+"");
// 给ViewPager初始化数据
mNewsListPicPager.setAdapter(new NewsTopPicAdapter());
}
class NewsTopPicAdapter extends PagerAdapter
{
@Override
public int getCount()
{
if (newsPicData != null)
{
return newsPicData.size();
}
return 0;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1)
{
// TODO Auto-generated method stub
return arg0 == arg1;
}
@Override
public Object instantiateItem(ViewGroup container, int position)
{
ImageView iv = new ImageView(mContext);
// 图片满屏
iv.setScaleType(ScaleType.FIT_XY);
// 给iv设置图片,设置默认值
iv.setImageResource(R.drawable.home_scroll_default);
// 设置网络图片
String uri = newsPicData.get(position).topimage;
mBitmapUtils.display(iv, uri);
container.addView(iv);
return iv;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object)
{
container.removeView((View) object);
}
}
}
NewsListBean.java
网络数据
package huaxa.it.zhihuidemo.bean;
import java.util.List;
import android.R.string;
/**
* @项目名: ZhiHuiDemo
* @包名: huaxa.it.zhihuidemo.bean
* @类名: NewsListBean
* @创建者: 黄夏莲
* @创建时间: 2016年11月25日 ,下午1:51:00
*
* @描述: TODO
*/
public class NewsListBean
{
public Object Object;
public String retcode;
public class NewsListData
{
public String countcommenturl;
public String more;
public List<NewsListNewsBean> news;
public String title;
public List<NewsListTopicBean> topic;
public List<NewsListTopNewsBean> topnews;
}
public class NewsListNewsBean
{
public Boolean comment;
public String commentlist;
public String commenturl;
public long id;
public String listimage;
public String pubdate;
public String title;
public String type;
public String url;
}
public class NewsListTopicBean
{
public String description;
public long id;
public String listimage;
public int sort;
public String title;
public String url;
}
public class NewsListTopNewsBean
{
public Boolean comment;
public String commentlist;
public String commenturl;
public long id;
public String pubdate;
public String title;
public String topimage;
public String type;
public String url;
}
}
NewsMenuController.java
将原先的假数据(TextView)改为NewsListController的View,也就是修改Title下面的ViewPager下的内容。
public Object instantiateItem(ViewGroup container, int position)
{
// TextView text = new TextView(mContext);
// text.setText(mChildren.get(position).title);
// text.setTextColor(Color.RED);
// text.setTextSize(24);
// text.setGravity(Gravity.CENTER);
// container.addView(text);
// System.out.println(mChildren.size());
NewsBean newsBean = mChildren.get(position);
NewsListController newsListController = new NewsListController(mContext,newsBean);
//获取View
View rootView = newsListController.getRootView();
//将View添加到container里面
container.addView(rootView);
//Controller初始化数据
newsListController.initData();
return rootView;
}