Android Studio之ImageView

ImageView是图像显示控件,与图形显示有关的属性说明如下:

  • scaleType:指定图形的拉伸类型,默认是fitCenter。
  • src:指定图形来源,src图形按照scaleType拉伸。

注意背景图不按scaleType指定的方式拉伸,背景默认以fitXY方式拉伸

fitXYFIT_XY拉伸图片使其正好填满视图(图片可能被拉伸变形)
fitStartFIT_START保持宽高比例,拉伸图片使其位于视图上方或左侧
fitCenter   FIT_CENTER 保持宽高比例,拉伸图片使其位于视图中间
fitEndFIT_END保持宽高比例,拉伸图片使其位于视图下方或右侧
centerCENTER保持图片原尺寸,并使其位于视图中间
centerCropCENTER_CROP拉伸图片使其充满视图,并位于视图中间
centerInsideCENTER_INSIDE

保持宽高比例,缩小图片使之位于视图中间(只缩小不放大)。

  • 当图片尺寸大于视图时,centerInside 等同于fitCenter;
  • 当图片尺寸小于视图时,centerlnside等同于 center

接下来进行一个实验,把一张图片放入ImageView控件,尝试使用不同的拉伸类型,看看有什么区别:

1、activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginTop="20dp"tools:context=".MainActivity"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="40dp"android:layout_marginTop="20dp"tools:ignore="MissingConstraints"><Buttonandroid:id="@+id/btnCenter"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="4dp"android:layout_marginRight="4dp"android:layout_weight="1"android:text="btnCenter"android:textAllCaps="false" /><Buttonandroid:id="@+id/btnFitCenter"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="4dp"android:layout_marginRight="4dp"android:layout_weight="1"android:text="btnFitCenter"android:textAllCaps="false" /><Buttonandroid:id="@+id/btnCenterCrop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="4dp"android:layout_marginRight="4dp"android:layout_weight="1"android:text="btnCenterCrop"android:textAllCaps="false" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="40dp"android:orientation="horizontal"tools:ignore="MissingConstraints"><Buttonandroid:id="@+id/btnCenterInside"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="4dp"android:layout_marginRight="4dp"android:layout_weight="1"android:text="btnCenterInside"android:textAllCaps="false" /><Buttonandroid:id="@+id/btnFitXY"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="4dp"android:layout_marginRight="4dp"android:layout_weight="1"android:text="btnFitXY"android:textAllCaps="false" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="40dp"android:orientation="horizontal"tools:ignore="MissingConstraints"><Buttonandroid:id="@+id/btnFitEnd"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="4dp"android:layout_marginRight="4dp"android:layout_weight="1"android:text="btnFitEnd"android:textAllCaps="false" /><Buttonandroid:id="@+id/btnFitStart"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="4dp"android:layout_marginRight="4dp"android:layout_weight="1"android:text="btnFitStart"android:textAllCaps="false" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="314dp"android:gravity="center_horizontal"android:orientation="vertical"><ImageViewandroid:id="@+id/iv_scale"android:layout_width="match_parent"android:layout_height="275dp"android:layout_marginTop="20dp"app:srcCompat="@drawable/d" /></LinearLayout></LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

2、MainActivity.java

package com.example.myadroid1;import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private ImageView iv_scale;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);iv_scale = findViewById(R.id.iv_scale);Button btnCenter = findViewById(R.id.btnCenter);btnCenter.setOnClickListener(this);Button btnFitCenter = findViewById(R.id.btnFitCenter);btnFitCenter.setOnClickListener(this);Button btnCenterCrop = findViewById(R.id.btnCenterCrop);btnCenterCrop.setOnClickListener(this);Button btnCenterInside = findViewById(R.id.btnCenterInside);btnCenterInside.setOnClickListener(this);Button btnFitXY = findViewById(R.id.btnFitXY);btnFitXY.setOnClickListener(this);Button btnFitStart = findViewById(R.id.btnFitStart);btnFitStart.setOnClickListener(this);Button btnFitEnd = findViewById(R.id.btnFitEnd);btnFitEnd.setOnClickListener(this);}@Overridepublic void onClick(View v) {if (v.getId() == R.id.btnCenter){iv_scale.setScaleType(ImageView.ScaleType.CENTER);}else if (v.getId() == R.id.btnFitCenter){iv_scale.setScaleType(ImageView.ScaleType.FIT_CENTER);}else if (v.getId() == R.id.btnCenterCrop){iv_scale.setScaleType(ImageView.ScaleType.CENTER_CROP);}else if (v.getId() == R.id.btnCenterInside){iv_scale.setScaleType(ImageView.ScaleType.CENTER_INSIDE);}else if (v.getId() == R.id.btnFitXY){iv_scale.setScaleType(ImageView.ScaleType.FIT_XY);}else if (v.getId() == R.id.btnFitStart){iv_scale.setScaleType(ImageView.ScaleType.FIT_START);}else if (v.getId() == R.id.btnFitEnd){iv_scale.setScaleType(ImageView.ScaleType.FIT_END);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/7677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络安全之交换基础

交换属于二层技术。路由器&#xff08;router&#xff09;是三层设备&#xff0c;可以基于IP地址转发&#xff0c;但需要路由表来记录。 交换机&#xff08;switch&#xff09;是二层设备&#xff0c;网桥&#xff08;switch&#xff09;也是二层设备&#xff0c;这两个都是基…

SegFix:预测边界和预测方向来修正边界

论文标题&#xff1a;SegFix: Model-Agnostic Boundary Refinement for Segmentation 论文地址&#xff1a;https://arxiv.org/pdf/2007.04269.pdf 代码地址&#xff1a;https://github.com/openseg-group/openseg.pytorch 两种loss监督 八种方向变回归问题为分类问题 代码地…

洛谷 P6136:【模板】普通平衡树(数据加强版) ← Splay树模板题

【题目来源】https://www.luogu.com.cn/problem/P6136【算法分析】 Splay 树简介及代码模板&#xff1a;https://blog.csdn.net/hnjzsyjyj/article/details/138504578【代码一&#xff1a;含 pushdown() 函数版本】 ● 本代码为洛谷 P6136 代码。题目来源为&#xff1a;https:…

PyQt6--Python桌面开发(1.安装配置环境)

一.PyQt6简介 PyQt&#xff1a;PyQt是一个功能强大且成熟的GUI框架&#xff0c;基于Qt库。它提供了丰富的组件、布局和主题选项&#xff0c;以及强大的功能和灵活性。PyQt的优点是它具有现代化的外观和丰富的功能&#xff0c;适用于复杂的GUI应用程序。然而&#xff0c;由于Py…

openEuler 22.03 GPT分区表模式下磁盘分区管理

目录 GPT分区表模式下磁盘分区管理parted交互式创建分区步骤 1 执行如下步骤对/dev/sdc磁盘分区 非交互式创建分区步骤 1 输入如下命令直接创建分区。 删除分区步骤 1 执行如下命令删除/dev/sdc1分区。 GPT分区表模式下磁盘分区管理 parted交互式创建分区 步骤 1 执行如下步骤…

明火检测实时识别报警:视觉算法助力安全生产管理

背景与现状 在各种工作、生产环境下&#xff0c;明火的存在往往是潜在的安全隐患。无论是加油站、化工园区、仓储场所还是校园&#xff0c;明火一旦失控就会引发火灾&#xff0c;造成严重的人员伤亡和财产损失。传统的明火检查手段主要依赖于人工巡查和定期的消防检查&#xf…

什么是高级持续威胁(APT)

高级持续性威胁&#xff08;Advanced Persistent Threat&#xff0c;APT&#xff09;&#xff0c;又叫高级长期威胁&#xff0c;是一种复杂的、持续的网络攻击&#xff0c;包含三个要素&#xff1a;高级、长期、威胁。 【高级】是指执行APT攻击需要比传统攻击更高的定制程度和…

预处理器标识#error的目的是什么?

在C和C编程语言中&#xff0c;预处理器标识#error是一个指令&#xff0c;它的目的是在编译过程中生成一个错误信息。当预处理器遇到#error指令时&#xff0c;它会停止编译过程&#xff0c;并显示#error后面的消息作为错误信息。这个指令通常用于确保某些条件在编译时得到满足&a…

人体姿态估计学习

人体姿态估计 1.绪论 人体姿态估计是计算机视觉中一个很基础的问题。从名字的角度来看&#xff0c;可以理解为对“人体”的姿态&#xff08;关键点&#xff0c;比如头&#xff0c;左手&#xff0c;右脚等&#xff09;的位置估计。 一般我们可以这个问题再具体细分成4个任务&…

小米手机短信删除了怎么恢复?这里教你快速解决!

手机已经成为我们生活中不可或缺的一部分&#xff0c;比如小米手机。我们通过手机进行通讯、娱乐、学习等各种活动&#xff0c;其中&#xff0c;短信是我们日常生活中的重要信息来源之一。然而&#xff0c;我们可能会不小心删除了一些重要的短信&#xff0c;这时候我们就会想知…

领航法律科技,法大大多年深耕再获认可!

近日&#xff0c;“乘势破局 第八届新兴法律服务业高峰论坛”在上海隆重举行。作为国内领先的电子签厂商&#xff0c;法大大凭借在法律科技领域的多年深耕与沉淀&#xff0c;荣获“法律科技领航机构”称号。 据悉&#xff0c;新兴法律服务业高峰论坛作为国内首个聚焦“新兴法律…

高等数学笔记(下中)

曲线积分 第一类曲线积分&#xff1a;对弧长的积分计算方法 定理&#xff1a;设 f ( x , y ) f(x,y) f(x,y)在曲线弧 L L L上有定义且连续&#xff0c; L L L的参数方程是 { x φ ( t ) y ψ ( t ) ( α ≤ t ≤ β ) \begin{cases} x\varphi(t)\\ y\psi(t) \end{cases}(\a…

一文了解什么是SSL证书?——值得收藏

SSL证书&#xff0c;全称Secure Sockets Layer证书&#xff0c;是一种网络安全协议的实现方式&#xff0c;现在通常指的是其继任者TLS&#xff08;Transport Layer Security&#xff09;证书&#xff0c;不过习惯上仍称为SSL证书。它的主要作用是确保互联网上的数据传输安全&am…

WebStorm2024版 将项目上传到gitee

目录 一、准备 WebStorm gitee 二、上传代码到Gitee 三、过程中遇到的问题 报错&#xff1a;You may want to first integrate the remote changes (e.g., git pull ...) before pushing again. 报错&#xff1a;fatal: refusing to merge unrelated histories 报错&a…

机器人系统ros2-开发实践05-ROS2 中 tf2的定义及示例说明

1. what ros2 tf2 &#xff1f; tf2的全称是transform2&#xff0c;在ROS&#xff08;Robot Operating System&#xff09;中&#xff0c;它是专门用于处理和变换不同坐标系间位置和方向的库。这个名字来源于“transform”这个词&#xff0c;表示坐标变换&#xff0c;而“2”则…

如何判断代理IP质量?

由于各种原因&#xff08;从匿名性和安全性到绕过地理限制&#xff09;&#xff0c;代理 IP 的使用变得越来越普遍。然而&#xff0c;并非所有代理 IP 都是一样的&#xff0c;区分高质量和低质量的代理 IP 对于确保流畅、安全的浏览体验至关重要。以下是评估代理 IP 质量时需要…

上升实用的Chrome浏览器命令

Chrome浏览器提供了一系列实用的命令行参数&#xff0c;这些参数可以在启动浏览器时使用&#xff0c;或者在Windows系统上通过命令提示符或PowerShell使用。以下是一些常用的Chrome浏览器命令&#xff1a; 1. **-incognito**&#xff1a;打开一个新的隐身窗口。隐身模式下&…

前端递归常见应用

概览 在 JavaScript 中&#xff0c;递归是一种编程技术&#xff0c;指的是函数直接或间接调用自身的过程。 递归通常用于解决可以分解为相同子问题的问题。通过不断地将问题分解成更小的、相似的子问题&#xff0c;直到达到某种基本情况&#xff08;不再需要进一步递归的简单情…

C语言 main( ) 函数的指针数组形参是怎么回事?

一、问题 在使⽤⼀些开发⼯具⽣成C语⾔⽂件时&#xff0c;主函数 mian( ) 中会有参数&#xff0c;这个参数到底是怎么回事⼉呢&#xff1f; 二、解答 mian( ) 称为主函数&#xff0c;是所有程序运⾏的⼊口。 mian( ) 函数是由系统调⽤的&#xff0c;当处于操作命令状态下&…