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

 更新时间:2017年01月02日 13:38:36   作者:yuminfeng728  
这篇文章主要为大家详细介绍了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 studio 调试技巧

    简单实用的Android studio 调试技巧

    这篇文章主要介绍了简单实用的Android studio 调试技巧的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • Android中实现地址栏输入网址能浏览该地址网页源码并操作访问网络

    Android中实现地址栏输入网址能浏览该地址网页源码并操作访问网络

    Android中实现地址栏输入网址能浏览该地址网页源码的效果,想必有很多朋友都不清楚吧,下面为大家详细介绍下
    2013-06-06
  • Android流式布局实现历史搜索记录功能

    Android流式布局实现历史搜索记录功能

    最近在开发项目的时候,有一个需求是展示历史搜索记录 ,展示的样式是流式布局(就是根据内容自动换行)。接下来通过本文给大家分享android流式布局实现历史搜索记录功能,感兴趣的的小伙伴参考下
    2017-05-05
  • Android获取栈顶的应用包名方法

    Android获取栈顶的应用包名方法

    下面小编就为大家分享一篇Android获取栈顶的应用包名方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • Android Picasso使用高斯模糊处理的示例代码

    Android Picasso使用高斯模糊处理的示例代码

    本篇文章主要介绍了Android Picasso使用高斯模糊处理的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 使用Chrome浏览器调试Android App详解

    使用Chrome浏览器调试Android App详解

    这篇文章主要介绍了使用Chrome浏览器调试Android App详解,本网讲解了使用Facebook开源Stetho实现在Chrome中调试Android App中,需要的朋友可以参考下
    2015-05-05
  • Android 七种进度条的样式

    Android 七种进度条的样式

    在开发中我们经常要用到进度条显示下载或者加载的进度。系统自带的黄色进度条在UI效果上经常不能满足策划或者美工的要求。这就要我们屌丝程序员自己自定义进度条,下面小编给大家介绍Android 七种进度条的样式,需要的朋友可以参考下
    2015-08-08
  • android实现手机截屏并保存截图功能

    android实现手机截屏并保存截图功能

    这篇文章主要为大家详细介绍了android实现手机截屏并保存截图功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • Android实现listview动态加载数据分页的两种方法

    Android实现listview动态加载数据分页的两种方法

    这篇文章主要为大家详细介绍了Android实现listview动态加载的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • Android系统添加自己写的工具

    Android系统添加自己写的工具

    今天小编就为大家分享一篇关于Android系统添加自己写的工具的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10

最新评论