尊重劳动成果,转载请标明出处:http://www.cnblogs.com/tangZH/p/8305063.html 

我们在自定义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() {@Overridepublic void draw(@NonNull Canvas canvas) {//在画布上绘制背景(里面有两个参数,Path,Paint,mPaintBg为我们上面的画笔,                //至于path,下面会讲)canvas.drawPath(path, mPaintBg);}@Overridepublic void setAlpha(int i) {}@Overridepublic void setColorFilter(@Nullable ColorFilter colorFilter) {}@Overridepublic 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

动态给组件添加背景,一半圆角相关推荐

  1. v-for动态图片列表展示以及动态给div添加背景图片

    v-for动态图片列表以及动态给div添加背景图片方法 效果如下图所示: HTML: <div class="branchWorkshop"><ul>< ...

  2. vue动态在页面添加背景图片

    <div class="home-logo" :style="{backgroundImage:'url('+config.data.logo+')'}" ...

  3. java swing背景_java Swing中添加背景图片(总结)

    在java GUI图形化设计中,Swing组件添加背景图片主要有两中情况:1,在Jpanl面板中添加背景图片,2,在jLable中添加背景图片 首先介绍一种最巧妙的背景图片添加方法, 1.利用JLab ...

  4. css行内样式动态添加背景图片及样式

    有时候需要循环动态添加背景图片,可以采用以下方法,重点是url后面别忘了加'+' <divclass="right_item":style="{'backgroun ...

  5. java 窗体添加背景图片_Java Swing实现窗体添加背景图片的2种方法详解

    本文实例讲述了java Swing实现窗体添加背景图片的2种方法.分享给大家供大家参考,具体如下: 在美化程序时,常常需要在窗体上添加背景图片.通过搜索和测试,发现了2种有效方式.下面分别介绍. 1. ...

  6. android 组件透明,万能小组件透明小组件-万能小组件透明背景设置v1.0.0 安卓版_永辉资源网...

    万能小组件透明背景设置全新为广大用户带来的精美小组件模板应用服务平台,有海量的小组件,快捷方式小组件以及照片小组件,让你的桌面更加简单美观,感兴趣的朋友快来下载体验吧! 万能小组件透明小组件软件介绍: ...

  7. android 模糊组件,动态模糊组件 HokoBlur

    动态模糊组件HokoBlur 1. 描述 组件主要提供以下功能: 给图片添加模糊效果: 动态模糊,对背景的实时模糊. 组件主要的特性: 多种实现方案,包括RenderScript.OpenGL.Nat ...

  8. [实战]C++加Lua加SDL来重写龙神录弹幕游戏(5):添加背景

    敲代码很快,写博客很慢,如果写详细一点,就有点太长了,跟写策划文档没区别了,╮(╯_╰)╭.之前虽然在SDL窗口中显示出了一张人物图片,但也只是为了测试SDL_Image而已.现在就正式来完成这次的工 ...

  9. 一个常用的自定义弹框封装(适配 AndroidX),加载 ProgressDialog,状态显示的 StatusDialog 和自定义 Toast,全部支持背景颜色,圆角,边框和文字的自定义,构建者模

    MNProgressHUD 项目地址:maning0303/MNProgressHUD  简介: 一个常用的自定义弹框封装(适配 AndroidX),加载 ProgressDialog,状态显示的 S ...

最新文章

  1. c中结构体的4种定义
  2. 没有场景,不做单点技术输出,360数科如何做金融科技的最佳实践?
  3. CentOS7下的Django2集成部署五:Jenkins的流水线部署pipeline-job
  4. 关于烂代码的那些事(上)
  5. python代码规范工具_如何检查python3中的代码规范
  6. 手把手教你玩转SOCKET模型:重叠I/O篇
  7. 装有支付宝的手机丢了可咋办
  8. html 最小长度单位,html见长度单位尺寸单�?CSS布局HTML
  9. 怎样在数据绑定到DATAGRID之前,先判断其中一个字段是否为空?
  10. ubuntu classicmenu-indicator
  11. 应试教育——人性的扼杀
  12. 简述MFC程序生与死
  13. 贝尔曼方程详尽推导(无跳步|带图)
  14. android 随手记代码,随手记之Android网络调试简要记录
  15. 宏 word 更新域
  16. 软件项目管理工具,JAVA WEB 框架技术(结合实际工作经验,全是干货)
  17. 【机器视觉系统】基于3DOF机械臂的五子棋机器人(1)
  18. 门禁系统服务器在哪,门禁系统知多少?最全的问答都在这里了!
  19. Chino with Equation 不定方程
  20. php behaviors,YII框架行为behaviors用法示例

热门文章

  1. spring 注解说明以及@Resource和@Autowired的区别
  2. 对于前端js框架对于事件处理的应用场景探讨
  3. 走进移动支付:开启物联网时代的商务之门
  4. flashcom网址收集
  5. mysql修改密码后无法启动_mysql服务无法启动与强制修改密码指南-Go语言中文社区...
  6. mysql 字符编码
  7. Nacos支持配置的动态更新
  8. SpringSecurity集中式整合之授权操作
  9. Nginx的Gzip和sendfile的共存问题
  10. 声明式事务控制的配置要点