Android 代码自定义drawble文件实现View圆角背景

简介: Android 代码自定义drawble文件实现View圆角背景

简介

相信大多数Android开发都会遇到一个场景,给TextView或Button添加背景颜色,修改圆角,描边等需求。一看到这样的实现效果,自然就是创建drawble文件,设置相关属性shap,color,radius等。然后将drawble文件设置给对应的view即可实现想要的效果。但是作为一个SDK,如果不同的app都需要修改自己独特的颜色,圆角等需求,如何以最小的改动来满足不同app的需求呢?

效果

本文介绍一种使用代码的形式来替代drawble文件实现view的背景色,圆角等效果。话不多说,先看效果。

代码实现

代码实现这些效果主要用到 ShapeDrawable,GradientDrawable,以及 Shape 的实现类。下面介绍常用的6种效果:

  • 圆形

//实心圆
val drawable = ShapeDrawable(OvalShape())
drawable.paint.color = Color.RED
mBinding.tvOval.background = drawable
  • 左上角部分圆角矩形

 //上半边圆角矩形
val externalRound = floatArrayOf(10f,10f,0f,0f,0f,0f,0f,0f)
val shapeDrawable = ShapeDrawable(RoundRectShape(externalRound, RectF(0f,0f,0f,0f), floatArrayOf(0f,0f,0f,0f,0f,0f,0f,0f)))
shapeDrawable.paint.color = Color.BLUE
mBinding.tvOval2.background = shapeDrawable
  • 带描边的圆角空心矩形

        val roundIn = dp2px(this, 30)
        val externalRounds = floatArrayOf(roundIn, roundIn, roundIn, roundIn, roundIn, roundIn, roundIn, roundIn)
        val outlineRound = floatArrayOf(roundIn, roundIn, roundIn, roundIn, roundIn, roundIn, roundIn, roundIn)
        val rectF = RectF(dp2px(this, 2), dp2px(this, 2), dp2px(this, 2), dp2px(this, 2))
        val drawable1 = ShapeDrawable(RoundRectShape(externalRounds, rectF, outlineRound))
        drawable1.paint.color = Color.RED
        mBinding.tvOval3.background = drawable1
  • 带描边的矩形

 val gradientDrawable = GradientDrawable()
        gradientDrawable.setStroke(dp2px(this, 2).toInt(), Color.RED)
        gradientDrawable.setColor(Color.YELLOW)
        gradientDrawable.shape = GradientDrawable.RECTANGLE
        mBinding.tvOval4.background = gradientDrawable
  • 带描边圆角的矩形

        val gradientDrawable1 = GradientDrawable()
        gradientDrawable1.setStroke(dp2px(this, 2).toInt(), Color.RED)
        gradientDrawable1.setColor(Color.BLUE)
        gradientDrawable1.shape = GradientDrawable.RECTANGLE
        gradientDrawable1.cornerRadius = roundIn
        mBinding.tvOval5.background = gradientDrawable1
  • 带描边的圆形

        val gradientDrawable2 = GradientDrawable()
        gradientDrawable2.setStroke(dp2px(this, 2).toInt(), Color.RED)
        gradientDrawable2.setColor(Color.GREEN)
        gradientDrawable2.shape = GradientDrawable.OVAL
        mBinding.tvOval6.background = gradientDrawable2

以上是实现的6种效果,基本上drawble能实现的效果,通过代码也可以达到同样的效果。更多效果需要读者自己动手实现。

相关文章
|
7月前
|
Android开发 UED 计算机视觉
Android自定义view之线条等待动画(灵感来源:金铲铲之战)
本文介绍了一款受游戏“金铲铲之战”启发的Android自定义View——线条等待动画的实现过程。通过将布局分为10份,利用`onSizeChanged`测量最小长度,并借助画笔绘制动态线条,实现渐变伸缩效果。动画逻辑通过四个变量控制线条的增长与回退,最终形成流畅的等待动画。代码中详细展示了画笔初始化、线条绘制及动画更新的核心步骤,并提供完整源码供参考。此动画适用于加载场景,提升用户体验。
537 5
Android自定义view之线条等待动画(灵感来源:金铲铲之战)
|
7月前
|
XML Java Android开发
Android自定义view之网易云推荐歌单界面
本文详细介绍了如何通过自定义View实现网易云音乐推荐歌单界面的效果。首先,作者自定义了一个圆角图片控件`MellowImageView`,用于绘制圆角矩形图片。接着,通过将布局放入`HorizontalScrollView`中,实现了左右滑动功能,并使用`ViewFlipper`添加图片切换动画效果。文章提供了完整的代码示例,包括XML布局、动画文件和Java代码,最终展示了实现效果。此教程适合想了解自定义View和动画效果的开发者。
343 65
Android自定义view之网易云推荐歌单界面
|
7月前
|
XML 前端开发 Android开发
一篇文章带你走近Android自定义view
这是一篇关于Android自定义View的全面教程,涵盖从基础到进阶的知识点。文章首先讲解了自定义View的必要性及简单实现(如通过三个构造函数解决焦点问题),接着深入探讨Canvas绘图、自定义属性设置、动画实现等内容。还提供了具体案例,如跑马灯、折线图、太极图等。此外,文章详细解析了View绘制流程(measure、layout、draw)和事件分发机制。最后延伸至SurfaceView、GLSurfaceView、SVG动画等高级主题,并附带GitHub案例供实践。适合希望深入理解Android自定义View的开发者学习参考。
690 84
|
7月前
|
前端开发 Android开发 UED
讲讲Android为自定义view提供的SurfaceView
本文详细介绍了Android中自定义View时使用SurfaceView的必要性和实现方式。首先分析了在复杂绘制逻辑和高频界面更新场景下,传统View可能引发卡顿的问题,进而引出SurfaceView作为解决方案。文章通过Android官方Demo展示了SurfaceView的基本用法,包括实现`SurfaceHolder.Callback2`接口、与Activity生命周期绑定、子线程中使用`lockCanvas()`和`unlockCanvasAndPost()`方法完成绘图操作。
208 3
|
Android开发 开发工具
Android下用Activity实现圆角的自定义弹窗
     这里我们使用9patch制作一个背景,找到SDK目录下的tools目录,双击draw9patch.bat文件,如下图: 打开想要编辑的文件,进行编辑(9patch的编辑教程自寻)。
1085 0
|
2月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
295 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
252 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
600 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
528 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
2月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
152 0

热门文章

最新文章