概述

之前曾写过一篇文章介绍了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中常见的图形绘制方式总结
# 画一
# 的是
# 自定义
# 画出
# 不能超过
# 我就
# 我在
# 只需
# 要在
# 胸有成竹
# 这样做
# 这样一个
# 一处
# 只需要
# 所示
# 并不能
# 还不能
# 会以
# 需要注意
# 写过
相关文章:
如何通过虚拟主机快速搭建个人网站?
如何在阿里云域名上完成建站全流程?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
西安专业网站制作公司有哪些,陕西省建行官方网站?
如何在建站宝盒中设置产品搜索功能?
开封网站制作公司,网络用语开封是什么意思?
设计网站制作公司有哪些,制作网页教程?
网站代码制作软件有哪些,如何生成自己网站的代码?
宝塔新建站点为何无法访问?如何排查?
Python多线程使用规范_线程安全解析【教程】
已有域名建站全流程解析:网站搭建步骤与建站工具选择
建站主机服务器选型指南与性能优化方案解析
如何快速搭建自助建站会员专属系统?
建站之星安装模板失败:服务器环境不兼容?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
建站VPS能否同时实现高效与安全翻墙?
制作网站公司那家好,网络公司是做什么的?
C#如何使用XPathNavigator高效查询XML
XML的“混合内容”是什么 怎么用DTD或XSD定义
如何快速搭建高效WAP手机网站吸引移动用户?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
定制建站流程步骤详解:一站式方案设计与开发指南
建站主机是什么?如何选择适合的建站主机?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
如何通过智能用户系统一键生成高效建站方案?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
建站之星展会模版如何一键下载生成?
在线教育网站制作平台,山西立德教育官网?
在线制作视频网站免费,都有哪些好的动漫网站?
建站主机选购指南与交易推荐:核心配置解析
如何在阿里云服务器自主搭建网站?
公司网站的制作公司,企业网站制作基本流程有哪些?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
学校建站服务器如何选型才能满足性能需求?
如何选择香港主机高效搭建外贸独立站?
定制建站如何定义?其核心优势是什么?
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
如何选择服务器才能高效搭建专属网站?
常州自助建站工具推荐:低成本搭建与模板选择技巧
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
小建面朝正北,A点实际方位是否存在偏差?
如何注册花生壳免费域名并搭建个人网站?
香港服务器WordPress建站指南:SEO优化与高效部署策略
建站主机如何选?高性价比方案全解析
建站之星如何助力企业快速打造五合一网站?
家庭服务器如何搭建个人网站?
深圳网站制作平台,深圳市做网站好的公司有哪些?
如何解决VPS建站LNMP环境配置常见问题?
*请认真填写需求信息,我们会在24小时内与您取得联系。