Android中ShapeableImageView使用实例详解(告别shape、三方库)

这里是针对“Android中ShapeableImageView使用实例详解(告别shape、三方库)”这篇文章的详细讲解。

1. ShapeableImageView的介绍

在介绍ShapeableImageView之前,我们先来看看XML中我们通常使用来定义图片形状的几个标签:

1.1 ImageView+Shape

我们可以使用ShapeDrawable来通过在XML中定义图形来创建自定义形状和背景。常见的Shape包括矩形、圆形、椭圆等。例如,下面展示了一个带有圆角的矩形的XML定义:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/red" />
    <corners
        android:bottomLeftRadius="10dp"
        android:bottomRightRadius="10dp"
        android:topLeftRadius="10dp"
        android:topRightRadius="10dp" />
</shape>

我们通常会在XML中创建一个ImageView,然后将这个ShapeDrawable作为ImageView的背景设置进去。

1.2 使用三方库

除此之外,我们还可以使用第三方库来实现更为复杂的形状。例如,Glide RoundedCorners库可以用来给ImageView设置圆角等复杂形状。

1.2.1 Glide RoundedCorners的使用示例

Glide.with(this)
    .load("image_url")
    .transform(RoundedCorners(30))
    .into(imageView)

但是这样使用第三方库会增加我们应用的体积和复杂度,而且这些库不一定都实现了我们需要的形状类型。

1.3 ShapeableImageView

于是,ShapeableImageView应运而生。它是Android 5.0中一个新的控件,用于替代传统的ImageView+ShapeDrawable方式。它支持用XML定义图形、圆角、边框、阴影等属性,同时也可以支持自定义形状。

2. ShapeableImageView的使用方法

2.1 在XML中定义ShapeableImageView

我们可以在XML中使用<com.google.android.material.imageview.ShapeableImageView>来创建一个ShapeableImageView。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <com.google.android.material.imageview.ShapeableImageView
        android:id="@+id/shapeableImageView1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/your_image"
        app:shapeAppearanceOverlay="@style/radius_8"
        android:background="@drawable/shape_rectangle"
        />

    // ...

</LinearLayout>

如上面示例所示,我们需要定义app:shapeAppearanceOverlay来指定控件的形状,同时也可以设置其他的属性如android:background等。

2.2 在代码中对ShapeableImageView进行操作

ShapeableImageView的使用和其他的ImageView一样。例如,我们可以使用下面的代码来获取并使用ShapeableImageView控件:

findViewById<ShapeableImageView>(R.id.shapeableImageView1).setImageResource(R.drawable.your_image)  

2.3 自定义ShapeableImageView的形状

ShapeableImageView的最大优点是可以自定义控件的形状。为此,我们可以通过指定ShapeAppearanceModel来自定义形状。这里提供一个示例来说明。

val shapeAppearanceModel = ShapeAppearanceModel.builder()
    .setTopRightCorner(CornerFamily.CUT, 50F)
    .setTopLeftCorner(CornerFamily.ROUNDED, 10F)
    .setBottomLeftCorner(CornerFamily.ROUNDED, 10F)
    .setBottomRightCorner(CornerFamily.ROUNDED, 10F)
    .build()
val shapeableImageView:ShapeableImageView = findViewById(R.id.shapeableImageView2)
shapeableImageView.shapeAppearanceModel = shapeAppearanceModel

如上述示例所示,我们可以使用ShapeAppearanceModel来指定各个角落的大小以及形状。

3. ShapeableImageView的两个示例

3.1 圆形头像

下面,我们来看看如何使用ShapeableImageView来实现圆形头像。我们需要先在XML中定义一个形状:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="#FFBB22" />
</shape>

然后,在MainActivity中,我们来设置ShapeableImageView的形状:

val radius = resources.getDimension(R.dimen.rounded_image_radius)
val shapeAppearanceModel = ShapeAppearanceModel.builder()
    .setAllCornerSizes(radius)
    .build()
findViewById<ShapeableImageView>(R.id.shapeableImageView1)
    .shapeAppearanceModel = shapeAppearanceModel

最后,我们就可以在Activity中使用ShapeableImageView了。

3.2 带圆角的矩形

下面,我们再来看看如何实现带圆角的矩形。我们需要先在XML中定义一个矩形的形状:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/colorPrimary" />
    <corners android:radius="10dp" />
</shape>

然后,在MainActivity中,我们来设置ShapeableImageView的形状:

val radius = resources.getDimension(R.dimen.rounded_corners_radius)
val shapeAppearanceModel = ShapeAppearanceModel.builder()
    .setAllCornerSizes(radius)
    .build()
findViewById<ShapeableImageView>(R.id.shapeableImageView2)
    .shapeAppearanceModel = shapeAppearanceModel

最后,我们就可以在Activity中使用ShapeableImageView了。

到这里,我们就完成了本次对“Android中ShapeableImageView使用实例详解(告别shape、三方库)”这篇文章的完整讲解。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android中ShapeableImageView使用实例详解(告别shape、三方库) - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • 执行go vendor第三方包版本冲突问题解决

    当我们在开发一个Go项目时,一般都会用到许多第三方的包。在引入这些包时,往往会存在版本管理的问题。例如,我们项目中使用的两个不同的第三方包,版本号分别是v1.0和v1.2,但是它们依赖的第三方包是相同的,而且版本号也不一致。这就会造成版本冲突的问题,导致我们的项目编译时出现错误。 为了解决这个问题,有许多方法。一个常见的方法是使用Go Modules来管理依…

    GitHub 2023年5月16日
    00
  • GitHub配置SSH Key的完整步骤

    以下是“GitHub配置SSH Key的完整步骤”的完整攻略,同时给出两条示例说明。 什么是SSH Key? 在讲解SSH Key的配置之前,先介绍一下什么是SSH Key。SSH Key是一种安全验证方式,可以用来验证在GitHub网站上的推送、拉取等操作是否为合法用户。当你在本机生成一个SSH Key,然后将这个SSH Key添加到GitHub的账户上,…

    GitHub 2023年5月16日
    00
  • 如何把Spring Cloud Data Flow部署在Kubernetes上

    为了在Kubernetes上部署Spring Cloud Data Flow,我们需要完成以下步骤 部署Kubernetes集群 安装Helm 部署RabbitMQ 部署MySQL 部署Spring Cloud Data Flow Server 部署Spring Cloud Data Flow Shell 部署Spring Cloud Data Flow P…

    GitHub 2023年5月16日
    00
  • GoAdminGroup/go-admin的安装和运行的教程详解

    下面是完整的“GoAdminGroup/go-admin的安装和运行的教程详解”的攻略: GoAdminGroup/go-admin的安装和运行的教程详解 安装 安装Go语言 在使用 GoAdmin 前,需要安装 Go 语言。Go 官方网站提供了多个平台的安装包,建议直接下载并安装。 安装完成后,需要设置环境变量:$GOPATH 和 $GOROOT。 安装G…

    GitHub 2023年5月16日
    00
  • 详解Eclipse提交项目到GitHub以及解决代码冲突

    如何将项目提交到Github? 在Eclipse中,可以使用EGit插件来将项目提交到Github。具体步骤如下: 在Eclipse中安装EGit插件。在Eclipse中选择“Help” → “Eclipse Marketplace”,然后搜索“EGit”,选择“Install”,安装完成后重启Eclipse。 在Github上创建一个Repository。…

    GitHub 2023年5月16日
    00
  • 使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法

    下面是使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法。 准备工作 在开始之前,我们需要完成以下准备工作: 创建一个 Angular 应用 将 Angular 应用代码存储到 Github 仓库中 创建 Github Personal Access Token (PAT) 创建 Angular 应用 如果您…

    GitHub 2023年5月16日
    00
  • 在GitHub Pages上使用Pelican搭建博客的教程

    下面是“在GitHub Pages上使用Pelican搭建博客的教程”的完整攻略。 1. 准备工作 首先你需要在GitHub上面注册账号,并开通Pages服务。然后你需要安装Python和pip包管理工具,以及Pelican静态网站生成器。 安装Pelican可以使用pip来完成,命令如下: pip install pelican markdown 2. 创…

    GitHub 2023年5月16日
    00
  • IntelliJ IDEA 2020.2正式发布,两点多多总能助你提效

    IntelliJ IDEA 2020.2正式发布,两点多多总能助你提效 IntelliJ IDEA是JetBrains公司出品的一款集成开发环境(IDE),主要面向Java开发者。其最新版本是2020.2,正式发布时间为2020年8月4日。 该版本的IntelliJ IDEA主要增加了以下两个方面的特性: 1. 提高开发效率的功能 1.1 全面升级的自动完成…

    GitHub 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部