Android ImageView scaleType使用
目录
一、src设置图片资源
二、scaleType设置图片缩放类型
三、scaleType具体表现
matrix:
fitXY:
fitStart:
fitCenter:
fitEnd:
Center:
centerCrop:
centerInside:
控制ImageView和图片的大小保持一致
maxHeight最大高度
maxWidth最大宽度
adjustViewBounds调整View的界限
四、自定义imageview
一、src设置图片资源
在drawable文件夹中导入图片资源

二、scaleType设置图片缩放类型
通过上面的图片可以看到,我导入的图片并没有占满整个ImageView控件,上下都有空白。这时可以通过scaleType来控制图片的缩放。
查看scaleType的源码,可以看到scaleType有很多值。
<attr name="scaleType"><!-- matrix:不改变原图大小,将图片放在ImageView的左上角 --><enum name="matrix" value="0" /><!-- fitXY 不按比例缩放图片,使得图片填充整个 ImageView,可能会导致图片拉伸变形 --><enum name="fitXY" value="1" /><!-- fitStart:保持图片的宽高比不变,直到较长的边与ImageView控件的边长相等,缩放完成后将图片放置于ImageView的左上角--><enum name="fitStart" value="2" /><!-- fitCenter:按比例缩放图片,使得图片完全显示在 ImageView 中,且居中显示,可能会留有空白 --><enum name="fitCenter" value="3" /><!-- fitEnd:按比例缩放图片,使得图片完全显示在 ImageView 中,且靠右下角显示,可能会留有空白 --><enum name="fitEnd" value="4" /><!-- center:将图片居中显示,不进行缩放。不改变原图大小。如果原图小于ImageView的大小,则保持原图大小,显示在ImageView的中心,当原图大于ImageView的大小时,只保留原图片中间的部分,其他部分裁剪掉 --><enum name="center" value="5" /><!--centerCrop:保持图片宽高比不变,缩放图片,直到完全覆盖ImageView,图片要在ImageView中居中。可能会出现图片显示不完整 --><enum name="centerCrop" value="6" /><!-- centerInside:按比例缩放图片,使得整个图片完全显示在 ImageView 中,可能会留有空白 --><enum name="centerInside" value="7" />
</attr>
三、scaleType具体表现
现在准备两张图片,RC.jpg(图片比ImageView大很多),RC2.jpg(图片比ImageView小)


matrix:


fitXY:
fitXY会改变原图片的宽高比,然后通过缩放使整个图片都显示在ImageView中


fitStart:

fitCenter:

fitEnd:

Center:
当我使用RC.jpg图片时,由于该图片很大,所以ImageView只会显示原图片中间大小为200dp*200dp(也就是ImageView的大小)的范围,也就是图中红色框的部分,其余部分全部裁剪掉。

最终显示的效果如下图:

但是如果我们使用RC2.jpg图片,由于该图片比ImageView小,所以会把RC2.jpg整个图片放在中间的位置,如下图

Center的特点:不改变图片的大小,按照原图片的大小显示在ImageView中间,但会将超出的部分裁剪
centerCrop:
通俗的讲就是以ImageView的宽高比为依据,在图片中间部分按照该比例取最大限度的范围,然后缩放显示在ImageView中。
比如我ImageView的大小设置的是200dp*200dp,也就是1:1大小,那么就在原图片中间部分1:1比例取一个最大的范围,然后缩小(因为我RC.jpg图片很大所以就是缩小,如果使用RC2.jpg那就是放大)显示在ImageView中




centerInside:
如果图片比ImageView大,那就缩小到把整个图片都放到ImageView中,此时类似于fitCenter

如果图片比ImageView小,那就直接将图片原大小放置在ImageView中间,此时类似于Center

控制ImageView和图片的大小保持一致
maxHeight最大高度
maxWidth最大宽度
adjustViewBounds调整View的界限

通过使用maxWidth和maxHeight来控制图片的最大宽度和最大高度,其中adjustViewBounds的值要设置为true才会生效。
当图片大于设置的maxWidth,maxHeight时,根据小的值(maxWidth为200dp,maxHeight为300dp,maxWidth小,所以以宽200dp为依据保持原图比例不变)来等比例缩小。
当图片的大小小于设置的maxWidth,maxHeight时,ImageView的大小就是原图片的大小。

四、自定义imageview
需求:把图片按照宽高、比例扩大,直到铺满手机屏幕宽度,高度按照原图片之前的比例扩大显示,如果刚刚好,不用做任何处理。
<com.widget.CustomFullImageViewandroid:id="@+id/iv_desc_icon"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginTop="10dp"android:src="@drawable/test_icon" />
public class CustomFullImageView extends androidx.appcompat.widget.AppCompatImageView {public CustomFullImageView(Context context) {super(context);}public CustomFullImageView(Context context, AttributeSet attrs) {super(context, attrs);}public CustomFullImageView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {Drawable drawable = getDrawable();if (drawable != null) {int width = MeasureSpec.getSize(widthMeasureSpec);int imageWidth = drawable.getIntrinsicWidth();int imageHeight = drawable.getIntrinsicHeight();if (imageWidth > 0 && imageHeight > 0) {float scale = (float) width / imageWidth;// 计算按比例扩大后的高度int newHeight = (int) (imageHeight * scale);// 设置测量后的宽高setMeasuredDimension(width, newHeight);} else {super.onMeasure(widthMeasureSpec, heightMeasureSpec);}} else {super.onMeasure(widthMeasureSpec, heightMeasureSpec);}}
}
相关文章:
Android ImageView scaleType使用
目录 一、src设置图片资源 二、scaleType设置图片缩放类型 三、scaleType具体表现 matrix: fitXY: fitStart: fitCenter: fitEnd: Center: centerCrop: centerInside: 控制ImageView和图片的大小保持一致…...
【PhpSpreadsheet】ThinkPHP5+PhpSpreadsheet实现批量导出数据
目录 前言 一、安装 二、API使用 三、完整实例 四、效果图 前言 为什么使用PhpSpreadsheet? 由于PHPExcel不再维护,所以建议使用PhpSpreadsheet来导出exlcel,但是PhpSpreadsheet由于是个新的类库,所以只支持PHP7.1及以上的版…...
Python剪辑视频
import os from moviepy.editor import VideoFileClipvideo_dir r"E:\学习\视频剪辑" s_video_file "1.mp4" d_video_file "剪辑片段1.mp4" s_video_path os.path.join(video_dir, s_video_file) # 原视频文件路径 d_video_path os.path…...
LabVIEW提高开发效率技巧----高效文件I/O
在LabVIEW开发中,文件I/O操作常常是性能瓶颈之一,特别是处理大数据时,如何高效地存储和读取数据显得尤为重要。本文将详细介绍如何利用TDMS Streaming来实现高效的文件I/O,并结合具体例子说明在实际开发中的应用技巧。 1. 什么是T…...
影刀RPA接口_查询应用主流程参数结构
影刀接口_查询应用主流程参数结构 链接 import requests from time import sleepaccessKeyId"XXX" accessKeySecret"XXX"#1.获取token def get_access_token():url"https://api.yingdao.com/oapi/token/v2/token/create"headers{"Content…...
2d实时数字人聊天语音对话使用案例,对接大模型
参看: https://github.com/wan-h/awesome-digital-human-live2d 电脑环境: ubuntu 1060ti 下载: git clone https://github.com/wan-h/awesome-digital-human-live2d.gitdocker部署; cd awesome-digital-human-live2d docker-compose -f docker-compose-quickStart.ya…...
LeetCode | 69.x的平方根
这道题很适合用二分来解决,算是二门入门的一个练手题吧思想就是首先设置两个指针,一个是0,一个是x,相当于在数轴上划定一个区域 [ 0 , x ]然后计算数轴中间值和我们想要找的值的大小关系,因为数轴是有序的,…...
使用Windows创建一个MFC应用【带界面】
MFC使用教程【对初学者保姆型友好!】 目录 前提条件 1:创建MFC应用程序 2. 项目结构解读 引用 外部依赖项 头文件 源文件 资源文件 文件功能详解 项目的主要流程 步骤2:配置OpenCV 安装OpenCV 包含目录与库文件 步骤3࿱…...
springboot整合lombok
只需要引入lombok依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.18</version></dependency> 然后application.yml配置文件中加上 logging: level: …...
使用Arcgis批量自动出图
操作方法如下: 1 2 3 4 5 6 7 设置好选项,开始打印。 8 生成pdf。 第一步:shp放到数据库中,标注转注记,然后编辑注记,符号样式设置好。准备出图:(转注记时候尽量压盖监测等选最…...
Web Worker加载外部文件实践
概述 在Web Worker 多线程编程一文中介绍了Web Worker的编程思想,碰巧最近工作中某个工程需要加载外部文件,最大的文件大小达到30MB,Web Worker无疑是不错的选择。 编程实现 不用 Web Worker 加载外部文件使用原生的fetch方法读取文件,其核心代码如下: function loadland…...
2024年中国工业大模型行业发展研究报告|附43页PDF文件下载
工业大模型伴随着大模型技术的发展,逐渐渗透至工业,处于萌芽阶段。 就大模型的本质而言,是由一系列参数化的数学函数组成的计算系统,且是一个概率模型,其工作机制是基于概率和统计推动进行的,而非真正的理解…...
99. UE5 GAS RPG 被动技能实现
在这一篇,我们在之前打下的基础下,实现一下被动技能。 被动技能需要我们在技能栏上面选择升级解锁技能后,将其设置到技能栏,我们先增加被动技能使用的标签。 FGameplayTag Abilities_Passive_HaloOfProtection; //被动技能-守护光…...
U盘装系统,使用U盘启动,提示需要装驱动
今天装win10系统,用的是U盘启动,但安装过程中出现了找不到驱动程序无法完成安装的问题,逛了许多的论坛,换过两三个iso文件都不顶用,使用了许多种方式,都安装失败,最后在某个论坛看到一种安装方式…...
gaussdb 主备 8 数据库安全学习
1 用户及权限 1.1 默认权限机制-未开启三权分立 1.1.1 数据库系统管理员具有与对象所有者相同的权限。也就是说对象创建后,默认只有对象所有者或者系统管理员可以查询、修改和销毁对象,以及通过GRANT将对象的权限授予其他用户。 1.1.2 GaussDB支持以下的…...
React 基础阶段学习计划
React 基础阶段学习计划 目标 能够创建和使用React组件。理解并使用State和Props。掌握事件处理和表单处理。 学习内容 环境搭建 安装Node.js和npm 访问 Node.js官网 下载并安装最新版本的Node.js。打开终端或命令行工具,输入 node -v 和 npm -v 检查是否安装…...
FFmpeg的简单使用【Windows】--- 指定视频的时长
目录 功能描述 效果展示 代码实现 前端代码 后端代码 routers 》users.js routers 》 index.js app.js 功能描述 此案例是在上一个案例【FFmpeg的简单使用【Windows】--- 视频混剪添加背景音乐-CSDN博客】的基础上的进一步完善,可以先去看上一个案例然后再…...
请求参数中字符串的+变成了空格
前端请求 后端接收到的结果 在URL中,某些字符(包括空格、、&、? 等)需要被编码。具体而言,在URL中,空格通常被编码为 或 %20。因此,如果你在请求参数中使用 ,它会被解释为一个空格。 如果…...
前端开发攻略---使用AJAX监控网络请求进度
1、XHR实现 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</title></head&…...
[已解决]DockerTarBuilder永久解决镜像docker拉取异常问题
前阵子发现阿里云的docker加速镜像失效了(甚至连nginx都拉取不了),重新换了并且加多了网络上比较常用的dokcer加速源,可以解决一部分问题,但仍然有一些镜像的某个版本或一些比较冷的镜像就是拉取不了,原因未…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
