【Android】【bug】ImageView设置scaleType不见效的问题

嚴華  金牌会员 | 2024-10-8 03:52:19 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 852|帖子 852|积分 2556

问题

在设置ImageView的时候,添加了一张图片,图片是正方形的,但是图片要尽大概的占据控件,同时也要包管图片是不能变形的。
然后在图片里面使用了这个scaleType
  1.        <ImageView
  2.                 android:id="@+id/iv_luopan"
  3.                 android:layout_width="match_parent"
  4.                 android:layout_height="match_parent"
  5.                 android:layout_centerHorizontal="true"
  6.                 android:background="@mipmap/ic_luopan"
  7.                 android:scaleType="centerInside" />
复制代码
但是却是没有作用
问题办理

将这个 background 修改为 src 即
  1.    <ImageView
  2.                 android:id="@+id/iv_luopan"
  3.                 android:layout_width="match_parent"
  4.                 android:layout_height="match_parent"
  5.                 android:layout_centerHorizontal="true"
  6.                 android:src="@mipmap/ic_luopan"
  7.                 android:scaleType="centerInside" />
复制代码
ImageView的scaleType属性用于控制图像的缩放方式和表现效果。通过设置不同的scaleType,可以定义图像在ImageView中的表现方式,以适应不同的布局需求。以下是scaleType属性的几种常用值:

  • CENTER
    形貌: 将图像放置在ImageView的中心,不做任何缩放。
    效果: 假如图像比ImageView小,将保持原始大小并居中表现;假如图像大于ImageView,则部分图像会被裁剪。
  • CENTER_CROP
    形貌: 将图像缩放到足够大,以添补整个ImageView,然后从中心裁剪多余的部分。
    效果: 恰当必要添补整个视图的场景,同时保持图像的纵横比。
  • CENTER_INSIDE
    形貌: 将图像缩放到恰当ImageView,并保持其纵横比。
    效果: 图像会尽大概大,但不会超出ImageView的边界。假如图像比ImageView小,则会在ImageView中居中表现。
  • FIT_CENTER
    形貌: 将图像缩放到足够大以使其完全恰当ImageView,同时保持其纵横比,并居中表现。
    效果: 恰当希望图像完整表现的需求,但大概会留下空白区域。
  • FIT_XY
    形貌: 将图像缩放到完全填满ImageView,不保持图像的纵横比。
    效果: 图像大概会变形,因此通常不推荐在必要保持原始比例的情况下使用。
  • FIT_START
    形貌: 将图像缩放到恰当ImageView,并保持其纵横比,同时将图像对齐到ImageView的顶部或左侧。
    效果: 图像将被居中到上方或左侧,底部或右侧大概有空白。
  • FIT_END
    形貌: 类似于FIT_START,但将图像对齐到底部或右侧。
    效果: 图像将被居中到下方或右侧,上方或左侧大概有空白。
  • MATRIX
    形貌: 使用自定义矩阵来绘制图像,可以进行复杂的变更。
    效果: 必要手动设置变更矩阵,恰当高级用户进行自定义操作。
现在还有一个问题,

我要在图片中心表现一个数据,是要在图片中心表现,但是现在图片为了保持缩放比例,进行了限定,假如图片的布局父类是一个长度大于宽度的,或者宽度大于长度的布局,那怎么包管这个文字布局一定能表现在图片布局的中心位置呢?
办理方法

设置一个父类布局
  1.         <RelativeLayout
  2.             android:id="@+id/rv_lay"
  3.             android:layout_width="match_parent"
  4.             android:layout_height="match_parent"
  5.             android:layout_marginTop="@dimen/dp_6"
  6.             android:padding="@dimen/dp_10">
  7.             <ImageView
  8.                 android:id="@+id/iv_luopan"
  9.                 android:layout_width="match_parent"
  10.                 android:layout_height="match_parent"
  11.                 android:layout_centerHorizontal="true"
  12.                 android:background="@mipmap/ic_luopan" />
  13.             <TextView
  14.                 android:id="@+id/tv_luopan_jiaodu"
  15.                 android:layout_width="wrap_content"
  16.                 android:layout_height="wrap_content"
  17.                 android:layout_centerInParent="true"
  18.                 android:text="--"
  19.                 android:textColor="@color/black"
  20.                 android:textSize="24sp"
  21.                 android:textStyle="bold" />
  22.         </RelativeLayout>
复制代码
不管外面的布局怎么变化,我就包管在这个 RelativeLayout 父类布局里面,图片占满布局,文字在父类布局的中心位置。
然后我们处理这个父类布局,让它的长和宽是相称的。
  1.        rv_lay.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
  2.             @Override
  3.             public void onGlobalLayout() {
  4.                 // 移除监听器,避免重复调用
  5.                 rv_lay.getViewTreeObserver().removeOnGlobalLayoutListener(this);
  6.                 // 获取实际宽高
  7.                 int width = rv_lay.getWidth();
  8.                 int height = rv_lay.getHeight();
  9.                 // 设置宽和高相等
  10.                 int size = Math.min(width, height);
  11.                 rv_lay.getLayoutParams().width = size;
  12.                 rv_lay.getLayoutParams().height = size;
  13.                 // 更新布局
  14.                 rv_lay.requestLayout();
  15.             }
  16.         });
复制代码
这样就可以包管父类布局的长和宽是相称的了。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

嚴華

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表