android material 组件 - ShapeableImageView

ShapeableImageView

com.google.android.material.imageview.ShapeableImageView 官方material 库 1.2.0 版本中新组件,非常棒的圆角切角边框图片控件。

引入库:
implementation 'com.google.android.material:material:1.2.0'

简单演示圆角带边框的ImageView:

在这里插入图片描述

xml代码:

    <com.google.android.material.imageview.ShapeableImageView
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:padding="1dp"
        android:scaleType="centerCrop"
        android:src="@mipmap/ic_img"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.MaterialComponents.FloatingActionButton"
        app:strokeColor="#ff0000"
        app:strokeWidth="2dp" />

app:strokeColorapp:strokeWidth 很好理解,分别是边框颜色和边框宽度
1 app:shapeAppearanceOverlay 这个呢就是圆角或者切角的关键属性了,
演示的代码使用的是material库中自带的style,如下:

<style name="ShapeAppearance.MaterialComponents.LargeComponent">
    <item name="cornerSize">@dimen/mtrl_shape_corner_size_large_component</item>
  </style>
    <style name="ShapeAppearance.MaterialComponents.MediumComponent">
    <item name="cornerSize">@dimen/mtrl_shape_corner_size_medium_component</item>
  </style>
    <style name="ShapeAppearance.MaterialComponents.SmallComponent">
    <item name="cornerSize">@dimen/mtrl_shape_corner_size_small_component</item>
  </style>
    <style name="ShapeAppearance.MaterialComponents.Test" parent="">
    <item name="cornerFamily">rounded</item>
    <item name="cornerSize">10px</item>
  </style>
    <style name="ShapeAppearance.MaterialComponents.Tooltip" parent="">
    <item name="cornerFamily">rounded</item>
    <item name="cornerSize">4dp</item>
  </style>
    <style name="ShapeAppearanceOverlay" parent=""/>
    <style name="ShapeAppearanceOverlay.BottomLeftDifferentCornerSize">
    <item name="cornerSizeBottomLeft">20px</item>
  </style>
    <style name="ShapeAppearanceOverlay.BottomRightCut">
    <item name="cornerFamilyBottomRight">cut</item>
  </style>
    <style name="ShapeAppearanceOverlay.Cut">
    <item name="cornerFamily">cut</item>
  </style>
    <style name="ShapeAppearanceOverlay.DifferentCornerSize">
    <item name="cornerSize">20px</item>
  </style>
    <style name="ShapeAppearanceOverlay.MaterialComponents.BottomSheet" parent="">
    <item name="cornerSizeBottomRight">0dp</item>
    <item name="cornerSizeBottomLeft">0dp</item>
  </style>
    <style name="ShapeAppearanceOverlay.MaterialComponents.Chip" parent="">
    <item name="cornerSize">50%</item>
  </style>
    <style name="ShapeAppearanceOverlay.MaterialComponents.ExtendedFloatingActionButton" parent="">
    <item name="cornerSize">@null</item>
  </style>
    <style name="ShapeAppearanceOverlay.MaterialComponents.FloatingActionButton" parent="">
    <item name="cornerSize">50%</item>
  </style>
    <style name="ShapeAppearanceOverlay.MaterialComponents.MaterialCalendar.Day" parent="">
    <item name="cornerSize">@dimen/mtrl_calendar_day_corner</item>
  </style>
    <style name="ShapeAppearanceOverlay.MaterialComponents.MaterialCalendar.Window.Fullscreen" parent="">
    <item name="cornerSize">0dp</item>
  </style>
    <style name="ShapeAppearanceOverlay.MaterialComponents.MaterialCalendar.Year" parent="">
    <item name="cornerSize">@dimen/mtrl_calendar_year_corner</item>
  </style>
    <style name="ShapeAppearanceOverlay.MaterialComponents.TextInputLayout.FilledBox" parent="">
    <item name="cornerSizeBottomLeft">@dimen/mtrl_textinput_box_corner_radius_small</item>
    <item name="cornerSizeBottomRight">@dimen/mtrl_textinput_box_corner_radius_small</item>
  </style>
    <style name="ShapeAppearanceOverlay.TopLeftCut">
    <item name="cornerFamilyTopLeft">cut</item>
  </style>
    <style name="ShapeAppearanceOverlay.TopRightDifferentCornerSize">
    <item name="cornerSizeTopRight">20px</item>
  </style>

大家可以按照需求自定义style以达到目的

注意:关于描边宽度需要注意的是,和自定义View一样,描边的宽度是中心点在Layout边界,所以是Layout边界内外均分strokeWidth的,所以描边是可能超出Layout边界的,造成截断的效果,所以可以设置内padding来处理溢出。
也就是说如果需求边框宽度为2dp那么需要设置android:padding="1dp" 以此类推,padding值为stokeWith值得一半

参考文章:shapeableImageView

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Android翻山之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值