Android开发中图片的适配

本文深入探讨了Android中ImageView的ScaleType属性,如何进行图片适配以避免拉伸。通过实例解析了各种缩放类型的使用场景,强调了保持原始比例的重要性,并提供了适配策略,建议使用center_crop和fitxy等比例缩放类型,但需谨慎处理防止图片超出屏幕。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

全面理解imageview的ScaleType属性,并做好适配

前言:Android机型的种类大家都知道,适配一直都是一个大问题。所以一直以来对于开发者都是用多套图来做适配。这样做可以解决部分适配问题,但是缺点就是给app带来了负担,导致app包特别的大。

关于imageview的缩放类型

  1. fitxy:这个是最好理解的,在xy的方向上铺满imageview,就像background一样。所以说是很有可能拉伸图片的。那么配合它使用的另一个属性就要登场了:android:adjustViewBounds=”true”她的意思就是是否保持原始比例,设置为true就是保持原始比例。亲测过确实是原始比例。在网上搜了一下看到说这个必须配合maxWidth和maxHeight使用,我没有设置这个,但是imageview的宽高都是wrapContent,效果就是他会在这个imageview的范围内按照原始比例“裁剪”到最大的尺寸,不一定会铺满这个imageview。
  2. fitStart:字面意思就是适配最开始的位置,我们的习惯就是从左上开始,那么图片就会从左上角开始等比例的放大,直到一个方向上撑满停止。这个属性值用到的机会很少,这个解释也比较抽象,这里放上一张图辅助理解!imageview的宽高是match_parent,图片是一张小图片,xy方向上按比例伸展,直到一个方向上撑满停止
  3. fitEnd:和fitStart一样,不一样的是从右下角开始伸展,不再细说
  4. fitCenter:等比例缩放,直到一个方向撑满,然后居中显示
  5. center:不会缩放图片,居中显示,如果图片过大会超出屏幕
  6. center_crop:图片等比缩放,直到一个方向上撑满,居中显示,超出屏幕的地方会被裁剪
  7. center_insid:只有图片的长宽大于控件时,才会缩放图片,然后居中显示
  8. matrix:宽度撑满居上或居下显示,高度撑满居左或居右显示。
    以宽度撑满居上显示为例的使用方式:
    1⃣️:自定义imageview,重写setFrame方法
@Override
    protected boolean setFrame(int l, int t, int r, int b) {
        boolean changed = super.setFrame(l,t,r,b);
        if(getScaleType() == ScaleType.MATRIX){
            transformMatrix();
        }
        return changed;
    }

    private void transformMatrix(){
        Matrix matrix = getMatrix();
        float w = getWidth();
        float cw = getDrawable().getIntrinsicWidth();
        float widthScaleFactor = w/cw;
        matrix.setScale(widthScaleFactor,widthScaleFactor,0,0);
        setImageMatrix(matrix);
    }

2⃣️:布局中使用这个imageview并设置scaleType的属性为matrix

总结

理解了上边的属性问题,我们就拿一张图来谈谈适配问题。图片的适配无非就是原比例显示,不能变形。我们可以根据像素转换为dp的形式设置imageview的宽高,然后拿最大的图来适配,上面说的所有的等比缩放的都可以使用。最常用的就是center_crop和fitxy。但是这个必须小心使用。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值