当前位置: 首页 > article >正文

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

问题

在设置ImageView的时候,添加了一张图片,图片是正方形的,但是图片要尽可能的占据控件,同时也要保证图片是不能变形的。

然后在图片里面使用了这个scaleType

       <ImageView
                android:id="@+id/iv_luopan"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_centerHorizontal="true"
                android:background="@mipmap/ic_luopan"
                android:scaleType="centerInside" />

但是却是没有作用

问题解决

将这个 background 修改为 src 即

   <ImageView
                android:id="@+id/iv_luopan"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_centerHorizontal="true"
                android:src="@mipmap/ic_luopan"
                android:scaleType="centerInside" />

ImageView的scaleType属性用于控制图像的缩放方式和显示效果。通过设置不同的scaleType,可以定义图像在ImageView中的显示方式,以适应不同的布局需求。以下是scaleType属性的几种常用值:

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

我要在图片中间显示一个数据,是要在图片中间显示,但是现在图片为了保持缩放比例,进行了限制,如果图片的布局父类是一个长度大于宽度的,或者宽度大于长度的布局,那怎么保证这个文字布局一定能显示在图片布局的中心位置呢?

解决方法

设置一个父类布局

        <RelativeLayout
            android:id="@+id/rv_lay"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="@dimen/dp_6"
            android:padding="@dimen/dp_10">

            <ImageView
                android:id="@+id/iv_luopan"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_centerHorizontal="true"
                android:background="@mipmap/ic_luopan" />

            <TextView
                android:id="@+id/tv_luopan_jiaodu"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:text="--"
                android:textColor="@color/black"
                android:textSize="24sp"
                android:textStyle="bold" />
        </RelativeLayout>

不管外面的布局怎么变化,我就保证在这个 RelativeLayout 父类布局里面,图片占满布局,文字在父类布局的中心位置。
然后我们处理这个父类布局,让它的长和宽是相等的。

       rv_lay.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                // 移除监听器,避免重复调用
                rv_lay.getViewTreeObserver().removeOnGlobalLayoutListener(this);

                // 获取实际宽高
                int width = rv_lay.getWidth();
                int height = rv_lay.getHeight();

                // 设置宽和高相等
                int size = Math.min(width, height);
                rv_lay.getLayoutParams().width = size;
                rv_lay.getLayoutParams().height = size;

                // 更新布局
                rv_lay.requestLayout();
            }
        });

这样就可以保证父类布局的长和宽是相等的了。


http://www.kler.cn/a/331110.html

相关文章:

  • 【ES6复习笔记】Map(14)
  • 24.try块怎么用 C#例子
  • 通过交叉实现数据触底分页效果new IntersectionObserver()(html、react、vue2、vue3)中使用
  • C/C++ 数据结构与算法【树和森林】 树和森林 详细解析【日常学习,考研必备】带图+详细代码
  • NLP 中文拼写检测纠正论文 C-LLM Learn to CSC Errors Character by Character
  • c# RSA加解密工具,.netRSA加解密工具
  • 毕业设计选题:基于ssm+vue+uniapp的教学辅助小程序
  • 十进制转十六进制 ← Python字符串
  • 【Spring】Spring Boot项目创建和目录介绍
  • 计算机毕业设计 基于Python的无人超市管理系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档
  • C#/.NET/.NET Core技术前沿周刊 | 第 7 期(2024年9.23-9.30)
  • Hive数仓操作(十)
  • MySQL-MySQL访问
  • Spring Boot实现IT知识分享社区
  • 初识 C 语言(2)
  • CF2018C Tree Pruning 题解
  • C--编译和链接见解
  • 中安未来 OCR—— 开启高效驾驶证识别新时代
  • 微服务实战——ElasticSearch(保存)
  • [C++]使用C++部署yolov11目标检测的tensorrt模型支持图片视频推理windows测试通过
  • OpenJudge | Binary Tree
  • kafka发送消费核心参数与设计原理详解
  • 《pyqt+open3d》open3d可视化界面集成到qt中
  • cloud-(Nacos)--注册中心原理-服务注册-服务发现
  • C# Blazor Server 调用海康H5Player播放摄像头画面
  • STM32 实现 UDP 广播通信