android 加载网络图片 实现图片轮播
来源:互联网 发布:linux网络基础知识 编辑:程序博客网 时间:2024/06/05 20:50
最近实现这样一个功能:
网络图片实现轮播,图片可以手势缩放
这样 用到三个组件:
viewpager 实现图片轮播
photoview 实现图片手势缩放的框架
bitmaputils 高效加载网络图片 防止OOM,属于Xutils。
具体实现
/**
* 装ImageView数组
*/
* 装ImageView数组
*/
private ImageView[] mImageViews;
/**
* ViewPager
*/
private ViewPager mViewPager;
/**
* 存放网络图片url对象集合
*/
private List<TbListBean.ObjBean> tbLists;
具体方法:
mViewPager = (ViewPager) findViewById(R.id.viewPager);
mImageViews = new PhotoView[tbLists.size()];
//添加view
for(int i=0; i<mImageViews.length; i++){
PhotoView photoView = new PhotoView(mContext);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);//铺满屏幕
photoView.setScaleType(ImageView.ScaleType.FIT_XY);//铺满屏幕
BitmapUtils bitmapUtilsr = new BitmapUtils(mContext);
// // 加载网络图片
bitmapUtilsr.display(photoView, tbLists.get(i).getImgurl());
bitmapUtilsr.configDefaultShowOriginal(false);//对图片压缩处理
mImageViews[i] = photoView;
}
//设置Adapter
//设置Adapter
mViewPager.setAdapter(new MyAdapter());
//设置监听,主要是设置点点的背景
mViewPager.setOnPageChangeListener(this);
//设置ViewPager的默认项,设定进入viewpager展现那个位置的图片
mViewPager.setCurrentItem(position);//设置ViewPager转到指定的界面
//viewpager adpter
public class MyAdapter extends PagerAdapter {
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public void destroyItem(View container, int position, Object object) {
((ViewPager)container).removeView(mImageViews[position % mImageViews.length]);
}
/**
* 载入图片进去,用当前的position 除以 图片数组长度取余数是关键
*/
@Override
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public void destroyItem(View container, int position, Object object) {
((ViewPager)container).removeView(mImageViews[position % mImageViews.length]);
}
/**
* 载入图片进去,用当前的position 除以 图片数组长度取余数是关键
*/
@Override
public Object instantiateItem(View container, int position) {
int mPosition = position % mImageViews.length;
((ViewPager)container).addView(mImageViews[mPosition], 0);
return mImageViews[mPosition];
return mImageViews[mPosition];
\
}
}
但是还有一个问题没有解决,那就是当我们将当前页面的图片放大后,当我们滑动到下一页,然后滑回上一页之后,发现上一页的图片还是处于缩放的状态,而不是默认的状态,这不是我们想要的结果。用户体验非常不好。那怎样解决这个问题呢?
其实非常的简单,就是当我们滑动到下一页的时候,给之前的其他页面遍历重新设置一次显示的状态,这样就可以满足我们的需求了。具体的操作步骤如下:
1.给viewPager添加监听
viewPager.setOnPageChangeListener(this);
2.将如下代码放入到重写的viewPager的public void onPageSelected(int arg0) {},这个方法里面。
- // 当图片滑动到下一页后,恢复其他所有图片默认大小状态的代码块
- // viewPager得到页面的数量
- int childCount = viewPager.getChildCount();
- // 当图片滑动到下一页后,遍历当前所有加载过的PhotoView,恢复所有图片的默认状态大小
- for (int i = 0; i < childCount; i++) {
- View childAt = viewPager.getChildAt(i);
- try {
- if (childAt != null && childAt instanceof PhotoView) {
- PhotoView photoView = (PhotoView) childAt;// 得到viewPager里面的页面
- PhotoViewAttacher mAttacher = new PhotoViewAttacher(
- photoView);// 把得到的photoView放到这个负责变形的类当中
- //mAttacher.getDisplayMatrix().reset();// 得到这个页面的显示状态,然后重置为默认状态或者做其他的操作
- //这里得到这个页面后,直接重新设置了他的属性,让其拉伸充满全屏,你可以根据自己的需求,设置其他属性
- //重新设置属性之后,当从当前放大页面滑动到下一页的时候,前面的放大页面就会重新成为设置的属性大小
- mAttacher.setScaleType(ScaleType.FIT_XY);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- 问题得到解决
0 0
- android 加载网络图片 实现图片轮播
- Android网络图片实现图片轮播
- ViewPage+Volley实现动态加载网络图片广告轮播 !
- ViewPager+RadioGroup 实现网络加载图片的轮播
- ViewPager网络加载图片并无限轮播实现
- Android使用自定义控件实现加载网络图片无限轮播
- 网络加载图片及轮播
- ViewPager网络加载图片+无限轮播
- 轮播网络图片加载适配
- 图片轮播并加载网络数据
- ImageLoader加载网络图片无限轮播
- 网络加载图片的无限轮播
- 获取网络图片实现网络轮播
- Android 实现图片轮播
- 实现Android图片轮播
- Android实现图片轮播
- Android ViewPager从网络获取图片实现无限轮播
- android的ViewPager实现加载网络图片并自动轮播
- C++语言编写windows服务
- 一家反欺诈公司的面试经历——8.数据库的索引
- Java源文件特性
- git push 报错"Updates were rejected because the tip of your current branch is behind"
- android LinearLayout半透明效果
- android 加载网络图片 实现图片轮播
- 用java实现快速排序算法
- Linux命令-sed
- JavaSE_29th_数组——String[] args
- Android启动APP黑屏或白屏问题
- 学习网址
- 在nodejs里面是用类似配置文件的方法
- opencv中mean()函数的一个小技巧
- 德州仪器CC2640无线MCU应用方向,与集成电路ESD放电警告!