Andrdoid自定义View之canvas.clipPath(path);
来源:互联网 发布:mac后台怎么关闭 编辑:程序博客网 时间:2024/05/17 22:39
根据path裁剪画布
canvas.clipPath(path);
1.1如实现一张图片上面是圆角下面是直角,可裁剪画布。
public class RoundedImageView extends ImageView { /*圆角的半径,依次为左上角xy半径,右上角,右下角,左下角*/ private float[] rids = {10.0f,10.0f,10.0f,10.0f,0.0f,0.0f,0.0f,0.0f,}; public RoundedImageView(Context context) { super(context); } public RoundedImageView(Context context, AttributeSet attrs) { super(context, attrs); } public RoundedImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } /** * 画图 * by Hankkin at:2015-08-30 21:15:53 * @param canvas */ protected void onDraw(Canvas canvas) { Path path = new Path(); int w = this.getWidth(); int h = this.getHeight(); /*向路径中添加圆角矩形。radii数组定义圆角矩形的四个圆角的x,y半径。radii长度必须为8*/ path.addRoundRect(new RectF(0,0,w,h),rids,Path.Direction.CW); canvas.clipPath(path); super.onDraw(canvas); } }
![Uploading Paste_Image_483488.png …]
2.1如自定义View四个角都是圆角,
private float[] rids = {15.0f, 15.0f, 15.0f, 15.0f, 15.0f, 15.0f, 15.0f, 15.0f,};//四个角都圆角... @Override protected synchronized void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.save();//save、restore 图层的保存和回滚相关的方法 详见 http://blog.csdn.net/tianjian4592/article/details/45234419 canvas.translate(0, getHeight() / 2);//移动图层到垂直居中位置 float radio = getProgress() * 1.0f / getMax(); float realWidth = getWidth() - getPaddingLeft() - getPaddingRight();//实际宽度减去文字宽度 float progressX = radio * realWidth; Path path = new Path(); /*向路径中添加圆角矩形。radii数组定义圆角矩形的四个圆角的x,y半径。radii长度必须为8*/ path.addRoundRect(new RectF(getPaddingLeft(),getPaddingTop()-HorizontalProgresReachHeight/2,realWidth,HorizontalProgresReachHeight/2), rids, Path.Direction.CW); canvas.clipPath(path); //绘制走完的进度线 mPaint.setColor(HorizontalProgresReachColor); mPaint.setStrokeWidth(HorizontalProgresReachHeight); //canvas.drawLine(getPaddingLeft(), getPaddingTop(), progressX, getPaddingTop(), mPaint);//直角 垂直在同一高度 float startY, float stopY 一样 RectF mRectF = new RectF(getPaddingLeft(),getPaddingTop()-HorizontalProgresReachHeight/2,(int)progressX,HorizontalProgresReachHeight/2);//圆角 int left, int top, int right, int bottom canvas.drawRoundRect(mRectF,0,0,mPaint);//圆角矩形 //绘制未做走完的进度 if (progressX < getWidth() - getPaddingLeft() - getPaddingRight()) {//进度走完了,不再画未走完的 mPaint.setColor(HorizontalProgresUnReachColor); mPaint.setStrokeWidth(HorizontalProgresUnReachHeight); //canvas.drawLine(progressX, getPaddingTop(), getWidth() - getPaddingLeft() - getPaddingRight(), getPaddingTop(), mPaint);//垂直在同一高度 float startY, float stopY 一样 RectF mRectF2 = new RectF(progressX - 15 ,getPaddingTop()-HorizontalProgresUnReachHeight/2,realWidth,HorizontalProgresUnReachHeight/2);//圆角 int left, int top, int right, int bottom canvas.drawRoundRect(mRectF2,0,0,mPaint);//圆角矩形 } canvas.restore(); }
下一篇:Android自定义圆形进度条
代码已上传至Github
微信扫一扫关注我的以下微信公众号
【程序猿小白成长记】定期分享各类Java、Android等知识
【每日哈哈笑一笑】笑一笑十年少,工作之余,别忘了放松下
我的GitHub
我的CSDN
我的简书
开发笔记
阅读全文
0 0
- Andrdoid自定义View之canvas.clipPath(path);
- 【Android】自定义视图View之---Canvas和Path对象
- Android path.op 和canvas.clipPath使用一例
- 自定义view的一些方法和参数介绍之第一期path和canvas
- android 自定义View之Path
- 自定义View-之Path类
- 自定义View 之 Path应用
- Android中自定义View中的Paint,Canvas,RectF,Path
- 自定义view 系列一 paint canvas path简单使用
- 【Android】自定义View之Canvas的使用
- 自定义View之canvas绘制时钟
- 自定义View进阶-Canvas之绘制图形
- 自定义View进阶-Canvas之画布操作
- 自定义View进阶-Canvas之绘制图形
- 自定义View进阶-Canvas之画布操作
- 自定义View进阶-Canvas之图片文字
- 自定义View起步:Canvas之绘制图片
- 自定义view(三):onDraw 之 Canvas
- 【算法】树形数组
- window10 GPU版tensorflow安装(一)
- spring boot+redis+shrio+会话
- 概率论和数理统计
- 如何在4.X版本实现Switch在5.X的效果
- Andrdoid自定义View之canvas.clipPath(path);
- storm1.x支持主节点nimbus高可用 多master集群部署
- 安卓实训笔记第三天
- 图片的二次采样
- 数学的坑,一点点来填
- RAM
- 想成为嵌入式程序员应知道的0x10个基本问题
- 统计难题(字典树或map容器)
- ServletContext对象以及类加载和servletcontext加载资源