Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

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

$
0
0

实现目的:加载顶部图片
实现步骤:先得到网络中图片资源所在的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;
        }
作者:u014299265 发表于2016/11/25 23:09:02 原文链接
阅读:40 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>