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!

原文地址:https://www.cnblogs.com/android-host/p/5316050.html