查看大图这种需求在很多地方都用的到,而且产品说了,要可以缩放,要可以滑动哦。

然后就轮到技术人员来实现了。

首先,viewpager是必备的,其次放大图片photoView,然后就是嵌套来编写了。

class ImagePagerAdapter extends PagerAdapter {@Override
    public int getCount() {return imageList.size();}@Override
    public View instantiateItem(ViewGroup container, int position) {PhotoView photoView = new PhotoView(container.getContext());imageLoader.displayImage(imageList.get(position), photoView, options);// Now just add PhotoView to ViewPager and return it
        container.addView(photoView, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);return photoView;}@Override
    public void destroyItem(ViewGroup container, int position, Object object) {container.removeView((View) object);}
@Override
    public boolean isViewFromObject(View view, Object object) {return view == object;}
}

这样就可以完成了一个滑动的查看大图的功能,很简单,但是还是有坑的。

问题以及解决方案:

一、关于图片缩放的photoView第三方

使用方法:

compile 'com.github.chrisbanes:PhotoView:1.3.0'
但是官方给出一个坑,会出现一个缩放的坑,异常是类型转换。
 java.lang.IllegalArgumentException: pointerIndex out of range
其实原因就是缩放太小,超出范围了,解决方法就是重写ViewPager的onInterceptTouchEvent事件就OK了
/**
 * Author:Shaojian
 * DATA:16/6/8.
 * ACTION:防止图片缩放时候产生的异常
 * TYPE:重写ViewPager
 */
public class SlideViewPager extends ViewPager {public SlideViewPager(Context context) {
        super(context);}public SlideViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);}@Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {try {return super.onInterceptTouchEvent(ev);} catch (IllegalArgumentException e) {e.printStackTrace();return false;}}
}



这个问题是说想要使用一个已经释放的图片资源,说白了,你每页加载使用的都是common_loading这张图片,
但是你在滑到第三张时候已经释放了该资源,所以会造成该异常。
解决很简单,就是如下这样就ok了,至于想要加载图片或者其他的方法,后续继续更新。
options = new DisplayImageOptions.Builder().cacheInMemory(true).cacheOnDisk(true).considerExifParams(true).build();



如果您有其他的坑,也请分享给我吧,jsmeli@163.com
二、图片过大,手机内存过小会产生oom异常
解决方案1:可以在Androidmanifest里Application添加一个属性
这样可以给App申请出更多的内存来,但是这样也是治标不治本。

class ImagePagerAdapter extends PagerAdapter {@Override
    public int getCount() {return imageList.size();}@Override
    public View instantiateItem(ViewGroup container, int position) {PhotoView photoView = new PhotoView(container.getContext());imageLoader.displayImage(imageList.get(position), photoView, options);// Now just add PhotoView to ViewPager and return it
        container.addView(photoView, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);return photoView;}@Override
    public void destroyItem(ViewGroup container, int position, Object object) {container.removeView((View) object); if (object instanceof PhotoView) {PhotoView s = (PhotoView)object;BitmapDrawable bitmapDrawable = (BitmapDrawable) s.getDrawable();if (bitmapDrawable != null) {Bitmap bm = bitmapDrawable.getBitmap();if (bm!=null && !bm.isRecycled()) {s.setImageResource(0);bm.recycle();}}}}@Override
    public boolean isViewFromObject(View view, Object object) {return view == object;}
}
其实就是释放不用的图片资源。
ps:释放图片资源会产生一个bug(设置默认加载图片时候)
这样还会产生一个问题,就是如果是使用imageLoader加载图片的,会设置一个option,
options = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.common_loading).showImageForEmptyUri(R.drawable.common_loading).showImageOnFail(R.drawable.common_loading).cacheInMemory(true).cacheOnDisk(true).considerExifParams(true).build();
加入你这时候没网或者其他的问题,造成图片记载不出来,就会产生这样的一个问题
java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@17947547
解决方案2:就是释放出不用的图片资源。
android:largeHeap="true"
说白了,就是内存溢出了,图片加载张数过多或者单张图片过大都会造成这个问题的发生。
												

图片加载oom以及photoView缩放崩溃问题相关推荐

  1. 图片加载优化,拒绝OOM

    2019独角兽企业重金招聘Python工程师标准>>> 最近做了个资讯类的app项目,涉及到大量的图片加载,因公司项目框架已经集成了Glide用于加载图片,理所当然就直接用了Glid ...

  2. jquery图片预加载+自动等比例缩放插件

    /* **************图片预加载插件****************** ///作者:没剑(2008-06-23) ///http://regedit.cnblogs.com ///说明: ...

  3. Android踩坑日记:使用Fesco图片加载库在GridView上的卡顿优化

    1,fresco是一个强大的图片加载库 2,fresco设计了一个叫做image pipeline(图片管道)的模块,它负责从从网络,从本地文件系统,从本地资源加载图片,为了最大限度节约资源和cpu时 ...

  4. Fresco图片加载框架的介绍,相关开源库以及工具类的封装

    Fresco图片加载框架的介绍,相关开源库以及工具类的封装 本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发. 简介 Fresco 是Facebook开源的安卓上的 ...

  5. 图片加载之Glide使用

    一.简介 在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫Glide的图片加载库,作者是bumptech.这个库被广泛的运用在Google的开源项目中,包括2014年Google I/O大会上发 ...

  6. Fresco图片加载框架使用方法完全指南

    简介 Fresco 是Facebook开源的安卓上的图片加载框架,也可以说是至今为止安卓上最强大的图片加载框架. 相对于其他几个图片加载框架,Fresco主要的优点在于更好的内存管理和更强大的功能,更 ...

  7. Android图片加载优化

    一.高效加载大图片 我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状.不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小.比如说系统图片库里展示的图片大 ...

  8. Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]

    前半部分找不到原文链接了 后半部分原文链接:http://www.jianshu.com/p/5364957dcf49 著作权归作者所有,转载请联系作者获得授权,并标注"简书作者" ...

  9. Universal-Image-Loader解析(二)——DisplayImageOptions的详细配置与简单的图片加载...

    在使用这个框架的时候,我们必须要配置一个DisplayImageOptions对象来作为ImageLoader.getInstance().displayImage()中的参数,所以很有必要讲解这个对 ...

  10. 图片加载框架之Fresco

    Fresco图片框架简介及使用 Fresco是FaceBook退出了一个Android开源图片管理框架,它提供了图片下载.渐进式加载.内存管理等功能,很大程度上把程序员从繁琐的图片管理工作中解放了出来 ...

最新文章

  1. DependentLayout相对布局
  2. 核心概念——节点/边/Combo——内置节点——Diamond
  3. UltraEdit 常用快捷方式
  4. CVPR2005【行人检测】HOG+SVM用于人体检测的梯度方向直方图
  5. android官方素材,android Studio 中文社区
  6. python绘制玫瑰花代码视频_python turtle玫瑰花绘制效果和源代码
  7. jogamp-env.xml:48: Unsupported Java version: 11. Make sure that the version of the Java compiler is
  8. Java IO 创建文件解决文件名重复问题
  9. android 蒙版图片带拖动_「ps|pr」大概ps的剪切蒙版和pr的轨道遮罩键是兄弟吧
  10. js去空格的其他方法
  11. sonarlint 安装
  12. Java自学资料!你确定你真的理解_双亲委派_了吗?!
  13. 福禄克光纤OTDR测试与光损耗测试的区别分析
  14. vue axios中文文档详解
  15. beetle-j2ee-application-framework框架介绍.md
  16. Java修改文件夹名称
  17. 微博三方登陆-02.微博开放平台注册及使用
  18. windows系统部署docker文档
  19. 2021-2027全球与中国射频发生器市场现状及未来发展趋势
  20. 解决Ubuntu 键盘输入一直大写的问题

热门文章

  1. Linux——虚拟内存空间分布
  2. 基于python的图像灰度值处理(opencv)
  3. 用python画钢铁侠_秒变钢铁侠,这个暑假,用 Python 让自己成为超级英雄!
  4. Perl 常用正则匹配
  5. 关于将驱动整合至ESXi镜像过程中的一些小坑
  6. 卸载企业版360 含密码
  7. ArcEngine中的ICommand和ITool
  8. 迪斯尼计算机动画,迪斯尼经典动画的十大运动规律
  9. 签了工作之后才发现,自己太草率了  很长很真实 但会对你有所帮助的
  10. Python3输出所有大小写字母(字母表)、数字