博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态给组件添加背景,一半圆角
阅读量:6441 次
发布时间:2019-06-23

本文共 1847 字,大约阅读时间需要 6 分钟。

尊重劳动成果,转载请标明出处: 

 

我们在自定义view的时候有时候需要给组件一个背景,而这个背景可能是不规则的,比如一个红色背景,但是左边有圆角,右边没有,那么应该怎么做呢?在这里我以textView为例。

用xml的方式很容易实现,不过我们这里是在代码中动态实现的。

 

先放上效果图:

 

一开始的思路是直接在TextView上面绘制,但是这样会出现一种情况,就是绘制完之后,字体就看不到了,所以我们还是得从背景入手,通过setBackgroundDrawable()方法给它一个背景,而这个背景是我们自己绘制出来的。Drawable类可以实现该效果:

1、画笔和view

/**     * 画背景的画笔     */    private Paint mPaintBg;    mPaintBg = new Paint();    /**     * textView     */    private TextView tv;

 

2、初始化画笔:

//设置画笔的颜色mPaintBg.setColor(mContext.getResources().getColor(R.color.theme));//类型为填充mPaintBg.setStyle(Paint.Style.FILL);//抗锯齿mPaintBg.setAntiAlias(true);mPaintBg.setStrokeWidth(mContext.getResources().getDimension(R.dimen.size));

 

 2、设置Drawable 

Drawable drawable = new Drawable() {            @Override            public void draw(@NonNull Canvas canvas) {
//在画布上绘制背景(里面有两个参数,Path,Paint,mPaintBg为我们上面的画笔, //至于path,下面会讲) canvas.drawPath(path, mPaintBg); } @Override public void setAlpha(int i) { } @Override public void setColorFilter(@Nullable ColorFilter colorFilter) { } @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; } };

 

4、在家注意到了,上面的的代码canvas.drawPath(path, mPaintBg);里面参数有一个path,这个path是我们绘制的路径。怎么设置这个path呢?代码如下:

RectF rectfBg;Path path = new Path();rectfBg = new RectF(0, 0, leftTv.getWidth(), leftTv.getHeight());path.addRoundRect(rectfBg, new float[]{10, 10, 0, 0, 0, 0, 10, 10}, Path.Direction.CW);

 

这里用到了Path的一个方法:

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

增加一个闭合的圆角矩形到path当中

 

radii:表示各个角的半径点x,y,依次是左上角,右上角,右下角,左下角,

rect:矩形位置

dir:绘制的方向,有两种

Path.Direction.CW:顺时针 Path.Direction.CCW:逆时针
最后把该Drawable设置给textView
tv.setBackgroundDrawable(drawable)

就此完成了。

 

转载于:https://www.cnblogs.com/tangZH/p/8305063.html

你可能感兴趣的文章
Mysql-高性能索引
查看>>
chrome浏览器最小字号解决方案
查看>>
富文本编译器UEditor+SSM的使用
查看>>
Java EE之旅02 CSS基础
查看>>
kubernetes学习笔记 (二):k8s初体验
查看>>
swift3 0 流控制
查看>>
Data-Mediator专题之属性回调
查看>>
每天一个Linux命令之ps-查看系统进程信息
查看>>
图解JavaScript原型链继承
查看>>
用VIPER构建iOS应用
查看>>
Java开源诊断工具 Arthas 发布v3.1.0
查看>>
什么是以太坊
查看>>
高效开发者是如何个性化VS Code插件与配置的?
查看>>
Java日志那些事
查看>>
117. Populating Next Right Pointers in Each Node II
查看>>
【笔记】重学前端-winter
查看>>
大数据构建模块:选择体系结构和开源框架
查看>>
62. Unique Paths
查看>>
告诉你微信域名被封的原因和防封方案
查看>>
七个你没用过的炫酷开发工具推荐
查看>>