智慧北京:顶部图片的加载

来源:互联网 发布:手绘图片是什么软件 编辑:程序博客网 时间:2024/05/17 04:31

实现目的:加载顶部图片
实现步骤:先得到网络中图片资源所在的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;        }
0 0
原创粉丝点击