AndroidTouchGalleryLibrary 优化

简介: AndroidTouchGalleryLibrary 是一个非常好用的库, 但是使用的时候,需要小心处理,容易引发OutOfMemoryError,同时使用UrlTouchImageView的时候, 从网络下载是没有缓存的,因此每次都是新加载图片,同时使用在线家在较大图片容易导致程序挂掉 因此...

AndroidTouchGalleryLibrary 是一个非常好用的库,

但是使用的时候,需要小心处理,容易引发OutOfMemoryError,同时使用UrlTouchImageView的时候,

从网络下载是没有缓存的,因此每次都是新加载图片,同时使用在线家在较大图片容易导致程序挂掉

因此将原先的UrlTouchImageView类中的此段代码更换

原代码:

 

//No caching load
    public class ImageLoadTask extends AsyncTask<String, Integer, Bitmap>
    {
        @Override
        protected Bitmap doInBackground(String... strings) {
            String url = strings[0];
            Bitmap bm = null;
            try {
                URL aURL = new URL(url);
                URLConnection conn = aURL.openConnection();
                conn.connect();
                InputStream is = conn.getInputStream();
                int totalLen = conn.getContentLength();
                InputStreamWrapper bis = new InputStreamWrapper(is, 8192, totalLen);
                bis.setProgressListener(new InputStreamProgressListener()
                {                    
                    @Override
                    public void onProgress(float progressValue, long bytesLoaded,
                            long bytesTotal)
                    {
                        publishProgress((int)(progressValue * 100));
                    }
                });
                bm = BitmapFactory.decodeStream(bis);
                bis.close();
                is.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return bm;
        }
        
        @Override
        protected void onPostExecute(Bitmap bitmap) {
            if (bitmap == null) 
            {
                mImageView.setScaleType(ScaleType.CENTER);
                bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.no_photo);
                mImageView.setImageBitmap(bitmap);
            }
            else 
            {
                mImageView.setScaleType(ScaleType.MATRIX);
                mImageView.setImageBitmap(bitmap);
            }
            mImageView.setVisibility(VISIBLE);
            mProgressBar.setVisibility(GONE);
        }

        @Override
        protected void onProgressUpdate(Integer... values)
        {
            mProgressBar.setProgress(values[0]);
        }
    }

 

更换为:

 //No caching load
    public class ImageLoadTask extends AsyncTask<String, Integer, Bitmap>
    {
        @Override
        protected Bitmap doInBackground(String... strings) {
            String url = strings[0];
            Bitmap bm = null;
            try {
                URL aURL = new URL(url);
                URLConnection conn = aURL.openConnection();
                conn.connect();
                InputStream is = conn.getInputStream();
                int totalLen = conn.getContentLength();
                InputStreamWrapper bis = new InputStreamWrapper(is, 8192, totalLen);
                bis.setProgressListener(new InputStreamProgressListener()
                {                    
                    @Override
                    public void onProgress(float progressValue, long bytesLoaded,
                            long bytesTotal)
                    {
                        publishProgress((int)(progressValue * 100));
                    }
                });
                BitmapFactory.Options options=new BitmapFactory.Options();
                options.inTempStorage = new byte[100*1024];
                options.inPreferredConfig = Bitmap.Config.RGB_565;
                options.inPurgeable = true;
                options.inSampleSize = 2;//压缩
                options.inInputShareable = true;
                bm = BitmapFactory.decodeStream(bis, null, options);
                bis.close();
                is.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return bm;
        }
        
        @Override
        protected void onPostExecute(Bitmap bitmap) {
            if (bitmap == null) 
            {
                mImageView.setScaleType(ScaleType.CENTER);
                bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.no_photo);
                mImageView.setImageBitmap(bitmap);
            }
            else 
            {
                mImageView.setScaleType(ScaleType.MATRIX);
                mImageView.setImageBitmap(bitmap);
            }
            mImageView.setVisibility(VISIBLE);
            mProgressBar.setVisibility(GONE);
        }

        @Override
        protected void onProgressUpdate(Integer... values)
        {
            mProgressBar.setProgress(values[0]);
        }
    }


 

 

目录
相关文章
|
传感器 开发工具 IDE
【Arduino基础教程】MQ135空气质量检测模块
MQ135空气质量检测模块 MQ135主要用于检测空气中的二氧化碳、酒精、苯、氮氧化物、氨等气体的浓度。 本文将介绍MQ135的两种使用方法 不使用库文件 使用别人写好的库文件 1.
4002 0
|
10月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
271 22
|
9月前
|
搜索推荐 新能源 数据处理
鸿蒙原生应用再添新丁!北京广电、充电管家、有我帮 入局鸿蒙
HarmonyOS 生态持续扩展,近期北京广电、充电管家、有我帮等多款应用上架,同花顺、爱奇艺等应用也进行了功能更新。北京广电借助鸿蒙的分布式能力,实现多设备协同,提升用户媒体消费体验;充电管家则优化了新能源汽车的充电服务,带来更便捷的智能化体验。这些应用的加入,标志着鸿蒙生态在传媒和生活服务领域的深度融合与快速发展,为用户带来全场景智慧生活的全新体验。
226 6
|
定位技术 Windows
Windows电脑删除文件时确认是否删除文件的提示对话框的取消显示方法
Windows电脑删除文件时确认是否删除文件的提示对话框的取消显示方法
650 1
|
算法 决策智能 Python
Python高级算法——线性规划(Linear Programming)
Python高级算法——线性规划(Linear Programming)
1002 0
Python高级算法——线性规划(Linear Programming)
|
SQL JSON API
单体服务开发最佳实践
单体服务开发最佳实践
Java发送HTTP或者HTTPS请求
Java发送HTTP或者HTTPS请求
|
存储 程序员 编译器
c语言进阶篇_动态内存管理(数组可以自动扩容?)
c语言进阶篇_动态内存管理(数组可以自动扩容?)
238 0
|
人工智能 算法
IDO代币预售发行合约系统开发(开发案例)丨IDO代币预售发行合约系统开发(源码项目)
  人工智能(Artificial Intelligence,简称AI)是指计算机系统在完成类似人类智力所需的任务时所表现出来的能力。它是一种复杂的技术,通过将大量的数据输入到算法中进行学习,不断调整和改进自己的算法,从而不断优化其性能。