智慧北京:顶部图片的加载
来源:互联网 发布:手绘图片是什么软件 编辑:程序博客网 时间: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; }
- 智慧北京:顶部图片的加载
- 智慧北京:懒加载的ViewPager的实现
- 智慧北京:引导页面ViewPager数据的加载
- 智慧北京:菜单UI和数据的加载
- 智慧北京:新闻中心新闻菜单数据的加载
- 智慧北京:滑动图片touch拦截的控制
- 智慧北京:SlidingMenu的使用
- 智慧北京
- 智慧北京:XUtils的View的注入
- 智慧北京:内容页面UI的实现
- 智慧北京:MVC的简单介绍
- 智慧北京:Gson解析的使用
- 智慧北京:菜单按钮点击的实现
- 智慧北京:新闻中心菜单切换的实现
- 智慧北京:ViewPagerIndicator使用的介绍
- 智慧北京:ViewPager中箭头的实现
- 智慧北京:View的层级关系
- 智慧北京:轮播任务的封装
- navicat for Mysql查询数据不能直接修改
- HTTP中Get和Post的区别
- view中path的使用
- zabbix 自动部署
- org.apache.hadoop.ipc.Client: Retrying connect to server: localhost/127.0.0.1:7359. Already tried 7
- 智慧北京:顶部图片的加载
- Spring MVC的请求
- C#设计模式- 观察者模式(1)
- frame访问、设置简化
- 团队在Github上协同开发项目流程
- 发送E-mail
- 初入代码的领域,打开编程的大门
- 责任链模式/过滤器模式
- android通讯录浅谈