Android轮播图使用OkGo加载网络图片分别设置
2018-03-31 14:34
696 查看
前言:
轮播图是一种常用的广告控件,几乎在每个App中都会出现。本文阐述一个之前在开发中遇到的问题,就是使用OkGo异步加载网络图片并分别设置给轮播图;如果方法不好,乐于接受批评!一:引入依赖
依赖有轮播图插件<RollPageView>和OkGo;(我略懒,并没有自己写一个轮播图) compile 'com.jude:rollviewpager:1.4.6'//轮播图 compile 'com.lzy.net:okgo:3.0.4' |
二:使用
布局就不放出来了,文章主要写后台逻辑部分,首先轮播图的创建依赖一个Adapter适配器,我们需要先构建这个适配器。我给他起名叫做AdaverLoadAdapter;package com.rx.base.adapter; import android.graphics.Bitmap; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.jude.rollviewpager.RollPagerView; import com.jude.rollviewpager.adapter.LoopPagerAdapter; import java.util.ArrayList; import static android.content.ContentValues.TAG; /** * 广告轮播图适配器(传入url) * Created by 贾恒飞 on 2017/12/27 0027. */ public class AdvertLoadAdapter extends LoopPagerAdapter { private ArrayList<String> imgs; private Load load; private Deploy deploy; public AdvertLoadAdapter(RollPagerView viewPager, ArrayList<String> imgs, Load load) { super(viewPager); this.imgs = imgs; this.load = load; } public AdvertLoadAdapter(RollPagerView viewPager, ArrayList<String> imgs, Deploy deploy) { super(viewPager); this.imgs = imgs; this.deploy = deploy; } @Override public View getView(ViewGroup container, int position) { ImageView view = new ImageView(container.getContext()); if (load != null){ view.setImageBitmap(load.loadBitmap(load.verifyUrl(imgs.get(position))));//设置每张图片 } if (deploy != null){ deploy.deployBitmap(view,deploy.verifyUrl(imgs.get(position))); Log.d(TAG, "getView: ImageUrl::"+imgs.get(position)); } view.setScaleType(ImageView.ScaleType.CENTER_CROP); view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); return view; } @Override public int getRealCount() { return imgs.size(); } //图片下载接口 public interface Load{ //判断地址是否正确 String verifyUrl(String url); //网络加载图片 Bitmap loadBitmap(String url); } //图片配置接口 public interface Deploy{ //判断地址是否正确 String verifyUrl(String url); //网络配置图片 void deployBitmap(ImageView imageView,String url); } } |
因为我的这个适配器是封装在baseModel中的,Model中并没有引入任何的网络加载框架,所以把网络加载部分放权给其他层做,本身只负责构建和显示;
根据这个适配器,我在控制层进行了基本的设置,在model层进行了数据的请求;
控制层代码:
控制层代码少的可怜:@Override public void initRollViewPage(RollPagerView rollViewPage) { AdvertLoadAdapter adapter = new AdvertLoadAdapter(rollViewPage,mRocmmModel.gainRollUrl(),this); rollViewPage.setAdapter(adapter); } 在当前页实现一个接口Deploy @Override public String verifyUrl(String url) { return url; } @Override public void deployBitmap(ImageView imageView, String url) { mRocmmModel.gainRollBitmap(url,imageView); }在这里我们暂时不对url做任何处理,如果需要对资源url做加密操作是可以在这里完成解密操作,把加密的字符串解析成正常的字符串然后传递给deployBitmap方法; |
@Override public void gainRollBitmap(String url, final ImageView imageView) { Api.net().gainBitMap(url, new BitmapCallback() { @Override public void onSuccess(Response<Bitmap> response) { imageView.setImageBitmap(response.body()); } }); }对于OkGo的请求部分,我把它在Api中进行了封装,使得所有数据的存取操作都围绕Api工具类进行,对于本地和网络的区分在于取得是net对象还是dao对象,这样model只关注与对数据的集中处理,Api则负责实际的数据请求和数据查询; |
@Override public void gainBitMap(String url, BitmapCallback bitmapCallback) { OkGo.<Bitmap>post(url) .retryCount(ApiConfig.retryCount) .tag(url) .cacheTime(ApiConfig.cacheTime) .cacheMode(CacheMode.DEFAULT) .execute(bitmapCallback); } |
相关文章推荐
- 在android中使用ImageLoder加载网络图片时,将图片设置为ImageView的背景
- [置顶] 使用ImageLoader加载网络图片时,如何获取加载进度,如何设置进度条
- Android 分别使用Post与Get实现网络图片加载
- 使用Flex4动态加载网络图片的例子
- android使用ImageView加载本地SdCard图片和加载网络图片
- Android Volley完全解析(二),使用Volley加载网络图片
- Android中ListView使用- 网络图片的异步加载
- 使用GCD处理非UI相关的异步任务 Object-C异步多线程加载网络图片
- Android Volley完全解析(二),使用Volley加载网络图片
- [Android] AsyncTask使用实例---加载网络图片
- Android - 小功能 使用ImageView加载本地SdCard图片和加载网络图片
- android使用ImageView加载本地SdCard图片和加载网络图片
- [原]网络上普遍使用的图片预加载技术(一)
- Afinal加载网络图片及下载文件使用方法
- Android Volley完全解析(二),使用Volley加载网络图片
- 使用缓存技术,大量加载网络图片
- [Android] AsyncTask使用实例---加载网络图片
- Android Volley完全解析(二),使用Volley加载网络图片
- AsyncTask使用实例---加载网络图片
- Android Volley完全解析(二),使用Volley加载网络图片