android 图片填充满,高度可变

本文介绍了一种方法,用于确保图片能够完全填充指定的ImageView组件,并保持原始宽高比不变。通过调整图片的高度来适应不同的屏幕尺寸和ImageView宽度。
int width = 0;
                            if (Build.VERSION.SDK_INT  >= 19){
                                width = activity.getWindow().getWindowManager().getDefaultDisplay().getMode().getPhysicalWidth();
                            }
 //并设置图片充满,图片高度变动
    public static void setImageViewBitmap(ImageView imageView, Bitmap map){
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        if (imageView.getWidth() > 5){
            float height = (float)imageView.getWidth()/(float)map.getWidth() * (float)map.getHeight();
            ViewGroup.LayoutParams layoutParams = imageView.getLayoutParams();
            layoutParams.height = (int) height;
            imageView.setLayoutParams(layoutParams);
        }
        imageView.setImageBitmap(map);

    }


    //并设置图片充满,图片高度变动
    public static void setImageViewBitmap(ImageView imageView, Bitmap map,int with){
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        float height = (float)with/(float)map.getWidth() * (float)map.getHeight();
        ViewGroup.LayoutParams layoutParams = imageView.getLayoutParams();
        layoutParams.width = with;
        layoutParams.height = (int) height;
        imageView.setLayoutParams(layoutParams);

        imageView.setImageBitmap(map);

    }
### Android 图片处理面试常见问题及解答 #### 1. Bitmap 的加载方式有哪些? Bitmap 可以通过多种方式进行加载,主要包括: - 使用 ` BitmapFactory.decodeResource()` 方法从资源文件中解码图像[^1]。 ```java Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image); ``` - 使用 `BitmapFactory.decodeFile()` 方法从文件路径读取并解码图像。 ```java Bitmap bitmap = BitmapFactory.decodeFile(filePath); ``` - 利用 `BitmapFactory.Options` 设置参数来控制图片的加载行为,如缩放比例、是否仅获取尺寸信息而不实际加载像素数据等。 ```java BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeResource(getResources(), R.drawable.image, options); // 获取原始宽度和高度 int originalWidth = options.outWidth; int originalHeight = options.outHeight; // 计算合适的inSampleSize值用于缩小图片大小 final int REQUIRED_SIZE=100; int width_tmp=options.outWidth, height_tmp=options.outHeight; int scale=1; while(true){ if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE) break; width_tmp/=2; height_tmp/=2; scale*=2; } options.inSampleSize = scale; options.inJustDecodeBounds = false; // 实际加载bitmap对象 Bitmap resizedBitmap = BitmapFactory.decodeResource(res.getContext().getResources(),resId,options); ``` #### 2. 如何减少内存占用? 为了有效管理内存,在处理大图时应考虑以下策略: - **使用适当的质量压缩**:当不需要高质量图片时可以选择较低质量保存或传输,从而减小文件体积。 - **调整分辨率**:如果原图过大而展示区域较小,则可以通过设置 `inSampleSize` 参数降低解析度。 - **回收不再使用的位图**:调用 `recycle()` 函数释放已无用处的对象所占空间。 - **采用 LRU 缓存机制**:实现最近最少使用缓存算法存储频繁访问的小图标或其他静态素材,避免重复加载造成浪费。 #### 3. Glide 和 Picasso 库的区别是什么? Glide 和 Picasso 是两个流行的第三方库,用来简化网络图片下载以及本地磁盘缓存等功能。两者的主要区别在于: - **默认配置不同**:Picasso 默认开启调试模式显示请求过程中的错误日志;相比之下 Glide 更加注重性能优化,默认开启了更多的特性如动画支持等。 - **功能差异**: - Glide 支持 GIF 动画播放,并且提供了更灵活丰富的 API 接口满足复杂场景需求; - Picasso 主打简单易用性,适合快速集成基础功能。 - **版本更新频率**:通常情况下 Glide 更新更为积极活跃,能够及时跟进新特性和修复 bug。 #### 4. 解析 ImageView.ScaleType 属性的作用及其应用场景 ImageView 提供了多个 ScaleType 值定义视图内绘制的内容应该如何适应其边界框: - `CENTER`: 将图片居中放置于容器中央位置,不改变原有宽高比也不会裁剪任何部分。 - `FIT_CENTER`: 自动计算最佳缩放因子使得整个图形都能完整呈现出来的同时保持中心对齐关系。 - `FIT_XY`: 完全充父布局控件,可能会破坏原有的纵横比例导致变形现象发生。 - `MATRIX`: 用户自定义变换矩阵决定最终效果,可用于旋转、平移等多种操作组合。 - `CENTER_CROP`: 裁切掉超出边界的多余部分使内容充满整个 View ,同时维持源图的比例不变。 - `CENTER_INSIDE`: 如果图片大于View则按照比例缩小至刚好能完全放入View内部,小于等于时不作变动。 选择合适类型的依据取决于具体业务逻辑要求和个人偏好等因素综合考量后的结果。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值