编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

ShapeableImageView实现丰富多彩的图片样式

wxchong 2024-07-26 23:07:04 开源技术 44 ℃ 0 评论

在没有ShapeableImageView之前,我们要想实现圆形图片效果,要么自己进行绘制,裁剪,要么导入第三方库,曾经的CircleImageView更是风靡一时,当我们要实现圆角效果时,还得再导入一个框架,或者一开始就考虑到圆角样式,总之,系统提供的ImageView功能非常有限,要想实现设计的效果,多多少少都需要自己来处理。

效果展示

随着网络的发展,现在对图片的需求越来越多,也越来越高了。官方也顺势在material中推出了ShapeableImageView这个组件,来实现图片的各种效果,这里先给一张部分样式效果图

实现原理

这还只是一部分,我们可以看到支持的样式确实非常多。这些效果总结一下就是图片的四个角有两种样式,一种是rounded圆角,另一种是cut斜切,就是直接将角剪掉。裁剪大小有两种方式,一种是百分比,从0%到100%,另一种是设置具体的大小。将两种样式,四个角,不同的大小任意组合,就能实现丰富多彩的样式。

样式演示

  • 例如我们想实现圆形图片
<style name="imageRounded">
        <item name="cornerFamily">rounded</item>
        <item name="cornerSize">50%</item>
</style>
<com.google.android.material.imageview.ShapeableImageView
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:src="@drawable/image"
            app:shapeAppearance="@style/imageRounded" />

通过shapeAppearance来加载样式

  • 例如我们想实现一个标签样式
<style name="imageRounded2">
        <item name="cornerFamilyTopLeft">rounded</item>
        <item name="cornerFamilyBottomLeft">rounded</item>
        <item name="cornerFamilyTopRight">cut</item>
        <item name="cornerFamilyBottomRight">cut</item>
        <item name="cornerSize">50%</item>
</style>
<style name="imageRounded3">
        <item name="cornerFamilyTopLeft">cut</item>
        <item name="cornerFamilyBottomLeft">cut</item>
        <item name="cornerFamilyTopRight">rounded</item>
        <item name="cornerFamilyBottomRight">rounded</item>
        <item name="cornerSize">50%</item>
</style>
  • 例如我们想实现一个扇形效果
<style name="imageRounded4">
        <item name="cornerFamilyTopLeft">rounded</item>
        <item name="cornerFamilyTopRight">rounded</item>
        <item name="cornerFamilyBottomLeft">cut</item>
        <item name="cornerFamilyBottomRight">cut</item>
        <item name="cornerSize">50%</item>
</style>
  • 再例如我们要实现一个水滴效果
<style name="imageRounded23">
        <item name="cornerFamily">rounded</item>
        <item name="cornerSizeTopLeft">70%</item>
        <item name="cornerSizeTopRight">70%</item>
        <item name="cornerSizeBottomLeft">30%</item>
        <item name="cornerSizeBottomRight">30%</item>
</style>

大家可以尝试不同的组合,会有意想不到的效果。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表