自定义虚线 DashLineView

//自定义虚线控件 可以动态改变虚线颜色 虚线间距 虚线长度 虚线高度

/**
 * 虚线控件
 *
 */
public class DashLineView extends View {
    /**
     * 虚线颜色
     */
    private int dashColor;
    /**
     * 虚线间距
     */
    private float dashGap;
    /**
     * 虚线长度
     */
    private float dashWith;
    /**
     * 虚线高度
     */
    private float lineHegiht;
    private Paint paint;
    private Path path;
    private int widthScreen;

    public DashLineView(Context context) {
        super(context);
        init(context, null);
    }

    public DashLineView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context, attrs);
    }

    public DashLineView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context, attrs);
    }

    private void init(Context context, AttributeSet attrs) {
        if (attrs != null) {
            TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.DashLine);
            dashColor = typedArray.getColor(R.styleable.DashLine_dashColor, R.color.black);
            dashGap = typedArray.getDimension(R.styleable.DashLine_dashGap, 5);
            dashWith = typedArray.getDimension(R.styleable.DashLine_dashWith, 15);
            lineHegiht = typedArray.getDimension(R.styleable.DashLine_lineHeight, 3);
            typedArray.recycle();
        }
        paint = new Paint();
        path = new Path();
        //widthScreen = ToolsManager.getInstance().getScreenWidth();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        paint.setStyle(Paint.Style.STROKE);// 空心
        paint.setColor(dashColor);
        paint.setStrokeWidth(lineHegiht);
        path.moveTo(0, 1);
        path.lineTo(widthScreen, 1);
        // DashPathEffect 可以使用DashPathEffect来创建一个虚线的轮廓(短横线/小圆点),而不是使用实线
        // float[] { 5, 5, 5, 5 }值控制虚线间距,密度
        PathEffect effects = new DashPathEffect(new float[] { dashWith, dashGap, dashWith, dashGap }, 1);
        paint.setPathEffect(effects);
        canvas.drawPath(path, paint);
    }

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        widthScreen = getMeasuredWidth();
    }

}
<declare-styleable name="DashLine">
        <attr name="dashColor" format="color" />
        <attr name="dashWith" format="dimension" />
        <attr name="dashGap" format="dimension" />
        <attr name="lineHeight" format="dimension" />
    </declare-styleable>
时间: 2024-11-10 01:30:20

自定义虚线 DashLineView的相关文章

GDI+编程小结

GDI+(Graphics Device Interface Plus图形设备接口加)是Windows XP和Windows Server 2003操作系统的子系统,也是.NET框架的重要组成部分,负责在屏幕和打印机上绘制图形图像和显示信息. GDI+不但在功能上比GDI 要强大很多,而且在代码编写方面也更简单,因此会很快成为Windows图形图像程序开发的首选. 一.              GDI+的特点和新增功能 GDI+与GDI一样,都具有设备无关性.应用程序的程序员可利用GDI+这样

GDI+的使用

一.创建画布 方法1: Graphics g = this.CreateGraphics(); 方法2: Bitmap bitmap = new Bitmap(picBTrackReplay.Width, picBTrackReplay.Height); Graphics g = Graphics.FromImage(bitmap); picBTrackReplay.Image = bitmap;//指定控件图片 另外使用using,可自动对画布进行资源回收. 二.创建画笔 1.创建画笔 usi

SVG开发包, 20 个有用的 SVG 工具,提供更好的图像处理

20 个有用的 SVG 工具,提供更好的图像处理 SVG 现正在 Web 设计领域变得越发流行, 你可以使用 Illustrator 或者 Inkscape 来创建 SVG 图像. 但当进行 Web 设计时,我们还需要做一些优化来使得 SVG 变得更加轻量. 下面介绍的 20 个工具,可以帮助你快速有效的创建 SVG 图像.现有的在线工具已经可以帮助我们进行优化.转换.新建模式等工作. 更详细的介绍,参见:How To Create SVG Animation Using CSS 交互式 SVG

很棒的Sketch动画教程

就像别人可以用PPT做动画,而你只会用它做演示,别人可以拿ps做gif,你却只会用它p照片.软件就是这样,我们使用大多数的软件也就是了解的程度,很难算得上精通.(后面补充了小教程,想看干货的直接看后面就行-) 而Sketch也是一样. 对于Sketch中线的应用,我一直只停留在会画虚线,会改变边缘形状的程度,自以为这就算掌握了. 大神是这样做的: AE神马的根本不用打开就实现了这类的小动画啊!太聪明了呀! 想了一下原理之后我自己还原了一下.如下图: 补充教程: [准备物料]:1.一枚录屏软件(因

【4】 简单绘图(二)

在上一篇里已经向大家介绍了如何使用GDI+绘制简单的图像,这一篇继续向大家介绍其它一些绘图知识. 1.首先我们来看下上一篇中我们使用过的Pen. Pen的属性主要有: Color(颜色),DashCap(短划线终点形状),DashStyle(虚线样式),EndCap(线尾形状), StartCap(线头形状),Width(粗细)等. 我们可以用Pen 来画虚线,带箭头的直线等 Pen p = new Pen(Color.Blue, 5);//设置笔的粗细为,颜色为蓝色 Graphics g =

C# GDI+简单绘图

一.使用Pen画笔 Pen的主要属性有: Color(颜色),DashCap(短划线终点形状),DashStyle(虚线样式),EndCap(线尾形状), StartCap(线头形状),Width(粗细)等. 我们可以用Pen 来画虚线,带箭头的直线等. Pen p = new Pen(Color.Blue, 5); Graphics g = this.CreateGraphics(); //这里在load中不行,在Paint中可以? //画虚线 p.DashStyle = System.Dra

可视化图表库--goJS

GoJS是Northwoods Software的产品.Northwoods Software创立于1995年,专注于交互图控件和类库.旗下四款产品: GoJS:用于在HTML上创建交互图的纯javaSCript库 GoDiagram:用于WinForms的.NET图控件. GoXam:用于WPF/Silverlight的图控件.( Silverlight是一个跨浏览器的.跨平台的插件, 与flash竞争的富客户端技术) JGo:用于Swing/SWT中创建交互图的java库. GoJS可以做什

自定义水平进度条样式:黑色虚线

布局layout中使用: 1 <ProgressBar 2 android:id="@+id/progress_bar" 3 style="?android:attr/progressBarStyleHorizontal" <!--必须设置为水平--> 4 android:progressDrawable="@drawable/myprogress" <!--此处用自定义样式--> 5 android:layout_

android自定义圆角实线边框,圆角虚线边框,直实线,虚实线,半圆角边框

先上图 在现实项目开发中,单纯的Button,EditText等控件远远不能满足我们项目的UI设计需求,这时候,我们就需要自己动手丰衣足食啦.接下来先给大家介绍一些属性,备注写的都非常清楚啦,我就不啰嗦啦. 1 <?xml version="1.0" encoding="utf-8"?> 2 <!--android:shape属性代表绘制的图形形状 retangle:矩形,oval:椭圆 ,line:线 ring,环形--> 3 <sh