背景:

在正常开发过程中,我们经常会发现一些图片有各种各样的显示,有圆角、直角、圆形、不规则图形等?比较常见的是圆形,还有圆角。今天我们将讲述圆角、四个角不同度数以及通过圆角巧妙变成圆形

1.如果大家不熟悉圆形或者path的以及canvas.clipPath,可以参考我的一篇文章:圆形头像

2.今天我们依旧通过Canvas的画布剪切来完成,有所不同的是,这次的path不是一个圆,而是在矩形中画圆addRoundRect

废话不多说:直接上代码

public class MyRoundJiaoImageView extends AppCompatImageView {private int leftTopRadius;private int rightTopRadius;private int leftBottomRadius;private int rightBottomRadius;private int allRadius;public MyRoundJiaoImageView(Context context) {super(context);}public MyRoundJiaoImageView(Context context, AttributeSet attrs) {super(context, attrs);initAtter(context, attrs);}private void initAtter(Context context, AttributeSet attrs) {TypedArray typed = context.obtainStyledAttributes(attrs, R.styleable.roundRadion);if (typed == null)return;leftTopRadius = typed.getInt(R.styleable.roundRadion_mleftTopRadius, 0);rightTopRadius = typed.getInt(R.styleable.roundRadion_mrightRadius, 0);leftBottomRadius = typed.getInt(R.styleable.roundRadion_mleftButtomRadius, 0);rightBottomRadius = typed.getInt(R.styleable.roundRadion_mrightButtomRadius, 0);allRadius = typed.getInt(R.styleable.roundRadion_allRadius, 0);typed.recycle();}@Overrideprotected void onDraw(Canvas canvas) {int width = getMeasuredWidth();int height = getMeasuredHeight();Path path = new Path();/*向路径中添加圆角矩形。radii数组定义圆角矩形的四个圆角的x,y半径。radii长度必须为8*/if (allRadius > 0) {float rids[] = {allRadius, allRadius, allRadius, allRadius, allRadius, allRadius, allRadius, allRadius};path.addRoundRect(new RectF(0, 0, width, height), rids, Path.Direction.CW);} else {float rids[] = {leftTopRadius, leftTopRadius, rightTopRadius, rightTopRadius, leftBottomRadius, leftBottomRadius, rightBottomRadius, rightBottomRadius};path.addRoundRect(new RectF(0, 0, width, height), rids, Path.Direction.CW);}canvas.clipPath(path);super.onDraw(canvas);}public void setAllRadius(int allRadius) {this.allRadius = allRadius;invalidate();}
}

讲解:

如果对画布的操作,需要在onDraw的super之前完成,否则将不会生效

1.我们这边是通过自定义圆角角度,如何自定义参数,可参考Android View自定义参数declare-styleable介绍与使用

参数如下:

<declare-styleable name="roundRadion"><attr name="mleftTopRadius" format="integer" /><attr name="mrightRadius" format="integer" /><attr name="mleftButtomRadius" format="integer" /><attr name="mrightButtomRadius" format="integer" /><attr name="allRadius" format="integer" /></declare-styleable>

2.path的addRoundRect的使用

public void addRoundRect(RectF rect, float[] radii, Direction dir)

RectF :矩形的范围

radii:四个角的角度参数,正常需要8个值,因为我们知道一个角确定下来需要两个角度的坐标

所以这个数组正常就是:

float rids[] = {leftTopRadius, leftTopRadius, rightTopRadius, rightTopRadius, leftBottomRadius, leftBottomRadius, rightBottomRadius, rightBottomRadius};A.(leftTopRadius, leftTopRadius)B(rightTopRadius, rightTopRadius)C(leftBottomRadius, leftBottomRadius)D(rightBottomRadius, rightBottomRadius)

坐标里面的值需一样,否则开角不同,会导致不生效

Direction :绘制的方向

3.只要我们path路径准备好,canvs绘制路径即可。

说明:

1.这种剪切是支持不同角的角度值剪切,但是,图片的画布只是针对前景色,也就是ImageView的drawable或者src的部分,背景大小还是原来的尺寸,接下来我们将会用一组动画说明。

2.当角度都是360度的时候,这个图片就是圆形,我们常见的头像做法。这种剪切方法可以剪切出任意效果,只要我们path绘制的够完美。

Android ImageView 四个角自定义角度,以及角度的变换相关推荐

  1. android imageview 加边框,RCImageView 自定义圆角ImageView,带边框效果

    概况 RCImageView 圆型或者圆角图片(带有边框效果),适配了ImageView的ScaleType属性 RoundImageView 定义圆角图片,四个角圆角弧度可各自定义,也可不定义默认角 ...

  2. Android—ImageView—自定义四个圆角角度

    1. 自定义SelectableRoundedImageView类,代码如下: package com.dfhx.project.myview; import android.annotation.S ...

  3. android控件向内弧度_描边/内间距/四个角不同弧度(包括圆角)

    YLCircleImageView 如果依赖失败,可以直接下载Library中的YLCircleImageView 和 style.xml放入项目中 QQ:375984181 功能 具备描边功能 具备 ...

  4. android Imageview 随心所欲定制四个圆角

    android Imageview 随心所欲定制四个圆角 实现效果图如下 一个四个圆角的view 包含一个上面两个圆角的Imageview ,这样的设计比较美观,但是这样在安卓端实现让我思考了一段时间 ...

  5. Android ImageView到底怎么设置圆角图片?背景圆角?控件圆角?图片圆角?占位图圆角?

    前言 在我们实际开发应用的过程中,我想大家或多或少都遇到过需要加载圆角图片的场景,还有一些图片是四周圆角不对称,异性圆角等等情况. 我们可能会去网上或Github上搜索一些RoundImageView ...

  6. Android中四种补间动画的使用示例(附代码下载)

    场景 Android中四种补间动画. 透明度渐变动画 旋转动画 缩放动画 平移动画 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的 ...

  7. Android显示九宫图(自定义圆角,仿微信九宫格图)

    详细解析Android显示九宫图(自定义圆角,仿微信九宫格图) 这是一个自定义九宫格图片框架,里面有设置圆角大小,还有当图片一张的时候控件自定义的大小,图片的间隔,四张图片的时候图片自定义为两行两列等 ...

  8. Android imageview设置圆角

    顶部左右圆角 四角都圆角 第一种方法使用glide自带实现圆角方法 RoundedCorners roundedCorners = new RoundedCorners(5);圆角为5RequestO ...

  9. android类中定义颜色,自定义实现简单的Android颜色选择器(附带源码)

    在写Android App过程中需要一个简单的颜色选择器,Android自带的ColorPicker和网上的一些ColorPicker都太高端了,都实现了颜色渐变功能,我要的不需要那么复杂,只想提供几 ...

最新文章

  1. chart.Correlation绘制相关性热图
  2. java rtmp m3u8_vue常用插件之视频播放(rtmp m3u8)
  3. 前端的c语言面试题,前端工程师面试题汇总(选择题)
  4. 苹果叫停经销商供货拼多多?官方回应:系谣言 所售新款iPhone均为正品
  5. 让C68平台“冷又静”
  6. java web流量阀值_Javaweb应用使用限流处理大量的并发请求详解
  7. Appium遇到异常处理
  8. 如何使用GDAL进行AOI裁剪
  9. OEIS | 一个牛x的网站
  10. 中值滤波_中值滤波原理
  11. 网络空间安全--密码学重点(适合提前自学的宝宝)
  12. java学习---Nginx 反向服务代理
  13. python对写作有什么帮助_[俄勒冈大学]养成Python写作习惯
  14. QoS(服务质量)指标
  15. 依赖背包dp NOIP2006 vijos 1313 金明的预算方案
  16. 49. 把字符串转换成整数
  17. 从开发角度读懂公司卫生间一直有人窜稀的原理
  18. Cesium中gltf模型的坐标系
  19. Duilib版视频监控客户端(简易版)
  20. word文档生成目录的方法,word生成目录之后怎么修改页码

热门文章

  1. voxsrc20_std_00-How many kinds of topology used in speaker recognition?
  2. python opencv 凸包 convexHull
  3. php开发his软件,HIS系统(his管理系统)V3.0.1 官网版
  4. 【hbase问题】org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not run
  5. 最简单的幻灯片制作,分分钟完成高逼格成片
  6. “如果有借鉴意义的话” —— 从上帝视角复盘Offer选择
  7. python程序执行完后重头开始做烧饼_从“程序员转行卖烧饼”想到IT人创业
  8. 大学生HTML5竞赛网站,2019全国大学生信息安全竞赛Web Writeup
  9. Android拼图游戏设计(包括游戏算法及数据库设计)
  10. linux 软链接创建及拷贝