全网整合营销服务商

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

免费咨询热线: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中常见的图形绘制方式总结  # 画一  # 的是  # 自定义  # 画出  # 不能超过  # 我就  # 我在  # 只需  # 要在  # 胸有成竹  # 这样做  # 这样一个  # 一处  # 只需要  # 所示  # 并不能  # 还不能  # 会以  # 需要注意  # 写过 


相关文章: 小型网站制作HTML,*游戏网站怎么搭建?  定制建站如何定义?其核心优势是什么?  青岛网站建设如何选择本地服务器?  h5网站制作工具有哪些,h5页面制作工具有哪些?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  成都响应式网站开发,dw怎么把手机适应页面变成网页?  黑客入侵网站服务器的常见手法有哪些?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  制作营销网站公司,淘特是干什么用的?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  实例解析Array和String方法  建站之星备案是否影响网站上线时间?  小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  公司网站的制作公司,企业网站制作基本流程有哪些?  如何快速搭建高效简练网站?  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何在企业微信快速生成手机电脑官网?  制作网页的网站有哪些,电脑上怎么做网页?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  如何制作一个表白网站视频,关于勇敢表白的小标题?  深圳网站制作案例,网页的相关名词有哪些?  建站之星安装后界面空白如何解决?  b2c电商网站制作流程,b2c水平综合的电商平台?  PHP 500报错的快速解决方法  大连网站设计制作招聘信息,大连投诉网站有哪些?  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站org新手必看:2024最新搭建流程与模板选择技巧  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  宁波免费建站如何选择可靠模板与平台?  网站图片在线制作软件,怎么在图片上做链接?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  建站之星如何快速生成多端适配网站?  在线制作视频的网站有哪些,电脑如何制作视频短片?  常州自助建站费用包含哪些项目?  建站之星24小时客服电话如何获取?  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  如何制作算命网站,怎么注册算命网站?  名字制作网站免费,所有小说网站的名字?  盐城做公司网站,江苏电子版退休证办理流程?  油猴 教程,油猴搜脚本为什么会网页无法显示?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  网站代码制作软件有哪些,如何生成自己网站的代码?  C++如何使用std::optional?(处理可选值)  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  建站之星安装提示数据库无法连接如何解决? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。