Android自定义View实现shape图形绘制
发布时间 - 2026-01-10 22:15:12 点击率:次概述

之前曾写过一篇文章介绍了Android中drawable使用Shape资源,通过定义drawable中的shape资源能够绘制简单的图形效果,如矩形,椭圆形,线形和圆环等。后来我在项目中正好遇到这样一个需求,要在特定的位置上显示一条垂直的虚线。正当我胸有成竹的把上面的资源文件放入进去的时候,我才发现它并不能符合我的要求。使用shape画出的垂直虚线,其实就是将一条水平的线,旋转90度。但这样做的弊端就是,该View有效区域为旋转90度后与原来位置相重合的区域,还不能随意的改动,这样的效果根本没法使用。于是我就想到使用自定义view来绘制我想要的结果。
1.画一条水平虚线
代码如下所示:
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
public class CustView extends View{
private Paint mPaint; //定义画笔
public CustView(Context context, AttributeSet attrs) {
super(context, attrs);
//初始化画笔
initPaint();
setLayerType(View.LAYER_TYPE_SOFTWARE, mPaint); //4.0以上关闭硬件加速,否则虚线不显示
}
private void initPaint() {
mPaint = new Paint();
mPaint.setAntiAlias(true); //设置抗锯齿的效果
mPaint.setStyle(Paint.Style.STROKE); //设置画笔样式为描边
mPaint.setStrokeWidth(3); //设置笔刷的粗细度
mPaint.setColor(Color.RED); //设置画笔的颜色
mPaint.setPathEffect(new DashPathEffect(new float[]{5,5,5,5}, 1)); //设置画笔的路径效果为虚线效果
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawLine(0, 0, 100, 0, mPaint);
}
}
布局文件中引用如下:
<com.test.CustView android:layout_width="100dp" android:layout_height="10dp" android:layout_marginTop="10dp" />
说明:在自定义View的代码中,onDraw方法中执行的drawLine方法,全名如下:
public void drawLine (float startX, float startY, float stopX, float stopY, Paint paint)
startX:起始端点x坐标
startY:起始端点y坐标
stopX:终止端点x坐标
stopY:终止端点y坐标
上面四个左边的值均以相对位置计算,即与左边控件的相对位置,如果左边没有控件则手机屏幕左边框的相对位置计算。
canvas.drawLine(0, 0, 100, 0, mPaint);表示的是相对左边为x,y坐标为0的位置开始,向右画出100px的虚线。
去掉Button按钮后,相对位置开始以屏幕左边框计算,如图所示:
还有一点需要注意的是,stopX和stopY的值,不能超过该控件在xml中layout_width和layout_height的值,否则将会以值最小的为基准,超出的长度无效。
2.画一条垂直虚线
与上面代码一致,只需要修改至下面一处:
canvas.drawLine(0, 0, 0, 100, mPaint);
3.画一个实心圆
1).首先设置画笔样式为实心
mPaint.setStyle(Paint.Style.FILL); //设置画笔样式为填充
2).在画布中画圆
canvas.drawCircle(50, 50, 50, mPaint);
同样X和Y的值,不能超过该控件在xml中layout_width和layout_height的值。
4.画一个圆环
同样只需稍微修改一下代码:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(50, 50, 50, mPaint); //画一个外圆
mPaint.setColor(Color.WHITE); //重新设置画笔颜色
canvas.drawCircle(50, 50, 30, mPaint); //画一个内圆
}
5.画一个矩形
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
RectF rect = new RectF(0, 0, 80, 60);
canvas.drawRect(rect, mPaint);
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android
# View
# shape
# Android开发 OpenGL ES绘制3D 图形实例详解
# Android开发之OpenGL绘制2D图形的方法分析
# Android openGl 绘制简单图形的实现示例
# Android编程开发之在Canvas中利用Path绘制基本图形(圆形
# 矩形
# 椭圆
# 三角形等)
# Android编程之canvas绘制各种图形(点
# 直线
# 弧
# 圆
# 文字
# 多边形
# 曲线
# 圆角矩形)
# Android开发实现各种图形绘制功能示例
# Android自定义控件绘制基本图形基础入门
# android绘制几何图形的实例代码
# Android shape 绘制图形的实例详解
# Android中常见的图形绘制方式总结
# 画一
# 的是
# 自定义
# 画出
# 不能超过
# 我就
# 我在
# 只需
# 要在
# 胸有成竹
# 这样做
# 这样一个
# 一处
# 只需要
# 所示
# 并不能
# 还不能
# 会以
# 需要注意
# 写过
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
如何挑选优质建站一级代理提升网站排名?
动图在线制作网站有哪些,滑动动图图集怎么做?
如何获取PHP WAP自助建站系统源码?
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
大学网站设计制作软件有哪些,如何将网站制作成自己app?
如何在橙子建站中快速调整背景颜色?
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
Laravel如何实现用户密码重置功能?(完整流程代码)
iOS UIView常见属性方法小结
如何快速选择适合个人网站的云服务器配置?
Laravel定时任务怎么设置_Laravel Crontab调度器配置
黑客如何利用漏洞与弱口令入侵网站服务器?
Laravel storage目录权限问题_Laravel文件写入权限设置
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
node.js报错:Cannot find module 'ejs'的解决办法
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
免费网站制作appp,免费制作app哪个平台好?
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
如何在云主机上快速搭建网站?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
php 三元运算符实例详细介绍
java获取注册ip实例
如何获取免费开源的自助建站系统源码?
奇安信“盘古石”团队突破 iOS 26.1 提权
Laravel如何处理表单验证?(Requests代码示例)
佛山企业网站制作公司有哪些,沟通100网上服务官网?
JS碰撞运动实现方法详解
Laravel如何实现文件上传和存储?(本地与S3配置)
JS实现鼠标移上去显示图片或微信二维码
北京网站制作的公司有哪些,北京白云观官方网站?
EditPlus中的正则表达式实战(5)
如何用低价快速搭建高质量网站?
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
历史网站制作软件,华为如何找回被删除的网站?
如何基于PHP生成高效IDC网络公司建站源码?
太平洋网站制作公司,网络用语太平洋是什么意思?
如何快速上传自定义模板至建站之星?
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
Java垃圾回收器的方法和原理总结
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
如何确认建站备案号应放置的具体位置?
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
高端网站建设与定制开发一站式解决方案 中企动力
下一篇:如何正确链接本地CSS样式表文件
下一篇:如何正确链接本地CSS样式表文件

