美文网首页
App大图片加载总结

App大图片加载总结

作者: 夜行者_姚 | 来源:发表于2019-10-24 10:30 被阅读0次

    项目结束,平常忙,现在抽空闲时间总结一下:

    大图片加载时候占用内存很多,图片占用内存主要和什么有关系呢?

    1、主要是与图片分辨率大小有关

    2、本地图片主要与存放位置有关。

    项目中怎么注意呢?

    1、以主流的1920*1080为例,存放本地图片时,如果图片大,可以使用在线图片网站压缩一下,其次,图片存放位置最好存放到mipmap-xxhdp或者drawable-xxdpi,这个经测试,占用的内存最低,推荐一篇文章写的比较清晰drawable图片适配

    2、如果控件大小和加载的图片Imageview不匹配,可以去设置压缩一下,压缩。

    方法如下:100,100值可以通过获取控件设置的大小来设置

    imageView.setImageBitmap(  

    decodeSampledBitmapFromResource(getResources(), R.id.myimage,100, 100));  

    public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,int reqWidth, int reqHeight) {    // 第一次解析将inJustDecodeBounds设置为true,来获取图片大小  

      final BitmapFactory.Options options = new BitmapFactory.Options();  

       options.inJustDecodeBounds =true;  

        BitmapFactory.decodeResource(res, resId, options);  

       // 调用上面定义的方法计算inSampleSize值  

        options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);  

       // 使用获取到的inSampleSize值再次解析图片  

        options.inJustDecodeBounds =false;  

       return BitmapFactory.decodeResource(res, resId, options);  

    }  

    计算缩放因子

    public static int calculateInSampleSize(BitmapFactory.Options options,  int reqWidth, int reqHeight) {  

    // 源图片的高度和宽度  

    final int height = options.outHeight;  

    final int width = options.outWidth;  

    int inSampleSize = 1;  

    if (height > reqHeight || width > reqWidth) {  

    // 计算出实际宽高和目标宽高的比率  

    final int heightRatio = Math.round((float) height / (float) reqHeight);  

    final int widthRatio = Math.round((float) width / (float) reqWidth);  

    // 选择宽和高中最小的比率作为inSampleSize的值,这样可以保证最终图片的宽和高  

    // 一定都会大于等于目标的宽和高。  

            inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;  

        }  

    return inSampleSize;  

    相关文章

      网友评论

          本文标题:App大图片加载总结

          本文链接:https://www.haomeiwen.com/subject/azlrvctx.html