全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android自定义View实现shape图形绘制

概述

之前曾写过一篇文章介绍了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小时内与您取得联系。