zoukankan      html  css  js  c++  java
  • android 高效加载大图

    在写代码的时候就已经解释:

        /**
         * 计算samplesize的大小
         * @param options 传一个BitmapFactory.Options 进去获取图片的大小和类型
         * @param viewWidth imageview的大小  宽
         * @param viewHight imageview的大小  长
         * @return 返回samplesize
         */
        private static int caculateSampleSize(BitmapFactory.Options options, int viewWidth, int viewHight){
            final int imageWidth = options.outWidth;
            final int imageHight = options.outHeight;
            int sampleSize = 1;
            if (imageWidth > viewWidth || imageHight > viewHight){
                final int halfImageWidth = imageWidth/2;
                final int halfImageHight = imageHight/2;
                while (halfImageHight/sampleSize>viewHight || halfImageWidth/sampleSize>viewWidth){
                    sampleSize *= 2;
                }
            }
            return  sampleSize;
        }
        /**
         *通过资源图片设置好缩略图片
         * @param res 资源图片
         * @param resId 图片id
         * @param viewWidth imageview控件宽
         * @param viewHight imageview控件长
         * @return 返回一个位图
         */
        private static Bitmap decodeSampleBitmapFromResources(Resources res,int resId,int viewWidth,int viewHight){
            final BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            BitmapFactory.decodeResource(res, resId, options);
            //设置缩小的尺寸
            options.inSampleSize = caculateSampleSize(options,viewWidth,viewHight);
            options.inJustDecodeBounds = false;
            return BitmapFactory.decodeResource(res, resId, options);
        }

    然后调用就行了。

    imageView.setImageBitmap(decodeSampleBitmapFromResources(getResources(),R.mipmap.image_111,imageView.getMaxWidth(),imageView.getMaxHeight()));

    最后给出一个  得到图片资源的大小和类型的方法:

        /**
         * 获得 图片 resId 的尺寸大小和类型
         * @param resId  图片资源的ID
         */
        private void setOpitions(int resId){
            BitmapFactory.Options options = new BitmapFactory.Options();
            //设置 inJustDecodeBounds 属性为true可以在解码的时候避免内存的分配,它会返回一个null的Bitmap,但是可以获取到 outWidth, outHeight 与 outMimeType。
            options.inJustDecodeBounds = true;
            //BitmapFactory.decodeResource(res,int res id,options);获得图片资源的一系列信息
            BitmapFactory.decodeResource(getResources(),resId,options);
            //图片资源的长宽和图片类型
            int imageWidth = options.outWidth;
            int imageHight = options.outHeight;
            String imageType = options.outMimeType;
        }

    over!

  • 相关阅读:
    stylus使用文档总结:选择器+变量+插值+运算符+混合书写+方法
    vue项目配置使用flow类型检查
    项目中存在的问题
    坚持
    Enum枚举类使用集合
    JS 随机数字抽签
    【转】Basic C# OOP Concept
    EF异常:WebForm、Console、Winform层不引入EF报错
    EF异常:“System.InvalidOperationException”类型的未经处理的异常在 mscorlib.dll 中发生
    WebServices中使用Session
  • 原文地址:https://www.cnblogs.com/android-host/p/5316050.html
Copyright © 2011-2022 走看看