`

自定义虚线控件

 
阅读更多

虚线控件有时会用到,横的虚线好实现,而竖的虚线则需要自定义,效果如下:

代码:

(1)自定义控件类:

package com.vvpinche.view;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PathEffect;
import android.util.AttributeSet;
import android.view.View;

import com.comotech.vv.R;
import com.vvpinche.util.CLog;

/**
 * 画虚线
 *
 * @author chenwenbiao
 * @date 2014-5-15
 * @version
 */
public class DashedLine extends View {
	
	private String TAG = getClass().getName();
	
	/**
	 * 类型,0表示横线,1表示竖线
	 */
	private int type = 0;
	
	
	public DashedLine(Context context){
		this(context, null);
	}
	
	public DashedLine(Context context, AttributeSet attrs) {
		this(context, attrs , 0);
	}
	
	public DashedLine(Context context, AttributeSet attrs , int defStyle) {
		super(context, attrs , defStyle);
		
		TypedArray mTypedArray = context.obtainStyledAttributes(attrs,    
                R.styleable.MyDashLine);
            
        //获取自定义属性和默认值                
        type = mTypedArray.getInt(R.styleable.MyDashLine_type , 0);  
        mTypedArray.recycle();

	}
	
	@Override
	protected void onDraw(Canvas canvas) {
		

        CLog.d(TAG , "onDraw=====>");
		
		
		// TODO Auto-generated method stub
		super.onDraw(canvas);
		
		measure(0, 0);
		
		/**
		 * 打印控件长宽
		 */
        CLog.d(TAG , "onDraw getWidth=====>" + getWidth());
        CLog.d(TAG , "onDraw getHeight=====>" + getHeight());
        CLog.d(TAG , "onDraw type=====>" + type);


		Paint paint = new Paint();
		paint.setStyle(Paint.Style.STROKE);
		paint.setColor(Color.DKGRAY);
		Path path = new Path();
		
		if(type == 1){
			path.moveTo(0,0);
			path.lineTo(0,getHeight());
		}
		else {
			path.moveTo(0, 0);
			path.lineTo(getWidth(), 0);
				
		}

		
		PathEffect effects = new DashPathEffect(new float[] { 5, 5, 5, 5 }, 1);
		paint.setPathEffect(effects);
		canvas.drawPath(path, paint);
	}
}

 

 

(2)示例布局:

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ptr="http://schemas.android.com/apk/res/com.comotech.vv"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/white"
    android:orientation="vertical"
    android:paddingLeft="20dp" >

    <!-- 虚线层 -->

    <LinearLayout
        android:id="@+id/user_route_line_layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <com.vvpinche.view.DashedLine
            android:id="@+id/up_dashedLine"
            android:layout_width="20dp"
            android:layout_height="45dp"
            ptr:type="1" />

        <com.vvpinche.view.DashedLine
            android:id="@+id/middle_dashedLine"
            android:layout_width="16dp"
            android:layout_height="1dp"
            ptr:type="0" />

        <com.vvpinche.view.DashedLine
            android:id="@+id/down_dashedLine"
            android:layout_width="20dp"
            android:layout_height="120dp"
            ptr:type="1" />
    </LinearLayout>

</LinearLayout>

 

(3)属性配置文件attrs.xml

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    
    <!-- 虚线自定义属性 -->
    <declare-styleable name="MyDashLine">
        <attr name="type" format="integer" />
    </declare-styleable>

</resources>

 

实用简单吧,呵呵。

 

 

 

  • 大小: 84.5 KB
分享到:
评论

相关推荐

    WPF自定义虚线树形控件

    自定义的树型控件,类似于WinForm的树控件,带虚线连接各子结点,可展开和收缩。结点带有可选框。

    Android中自定义水平进度条样式之黑色虚线

    主要介绍了Android中自定义水平进度条样式之黑色虚线 的相关资料,需要的朋友可以参考下

    自定义控件运行时动态调整大小及位置

    C#自定义控件,运行时动态调整控件大小及位置,选中时显示虚线框及8个调整节点。

    Android自定义View实现绘制虚线的方法详解

    最简单的方法是利用ShapeDrawable,比如说你想用虚线要隔开两个控件,就可以在这两个控件中加个View,然后给它个虚线背景。 嗯,理论上就是这样子的,实现上也很简单。 &lt;!-- drawable 文件 --&gt; &lt;?xml ...

    Android自定义控件实现圆形进度CircleProgressBar

    自定义上图所示效果的控件时,其实就是用Canvas绘制不同效果,比如渐变圆弧背景、圆周白色分割线、中间文字等,这篇博客也根据绘制的顺序依次阐述。 1.自定义CircleProgressBar,继承View,并实现响应的

    Android实现控件的缩放移动功能

    外层一个LinearLayout,里面一个自定义的控件DragScaleView,为了能够更清楚的看到控件的变化过程,就给控件加了一个灰色带虚线的边框bg_dashgap。 layout文件 &lt;?xml version=1.0 encoding=utf-8?&gt; &lt;...

    VB控件属性使用大全

    获得或设置一个值,指示当使用graphics方法或可定位的控件时,自定义坐标系的单位, 有8种可选: 0 自定义 1 表示单位为twip(缇),每英寸=1440缇,每厘米=567缇 2 表示单位为point(磅) ,每英寸=72磅,每磅=20缇 3 表示...

    MFC GroupBox自绘控件,可以方便改变边框的颜色

    由于项目需要,需要自绘一个GroupBox,可以方便改变边框颜色,可以设置显示的字体

    Android自定义View实现可拖拽缩放的矩形框

    本文实例为大家分享了Android自定义View拖拽缩放矩形框的具体代码,供大家参考,具体内容如下 在开发项目中,需要一个矩形框来实现截屏功能,并且还需要可以任意拖拽和缩放,这就需要自定义View来实现了,具体功能...

    Android自定义View仿QQ健康界面

    可以设置数字颜色,字体颜色,运动步数,运动排名,运动平均步数,虚线下方的蓝色指示条的长度会随着平均步数改变而进行变化。整体效果还是和QQ运动健康界面很像的。 自定义View四部曲,一起来看看怎么实现的。 1....

    贺兰实时曲线控件,VB6.0源码版

    摘要:VB源码,控件组件,曲线控件 实时曲线控件,绘制实时曲线(类似 Windows 任务管理器CPU使用率曲线),功能很多的一个曲线控件,可自定义的功能非常多,比如可以设置每条曲线的颜色、曲线的类型(实线、虚线等)...

    Android 自绘控件

    由于公司项目的需求,需要绘制一条竖直的间断线作为分割线。...所有的绘制操作就是在onDraw()方法里面进行的,当然我们的这个自定义控件都是View的直接子类。比如最常使用的TextView、ImageView就是View的直接子

    Vista风格button按钮及ICO图标控件VB源码.rar

    基于VB环境下使用的仿Vista风格button按钮及ICO图标控件源码,新增按钮主题风格样式,标题文字显示特效,颜色特效,标题对齐,标题禁止颜色自定义,标题坐标位置,圆角虚线焦点,实线焦点,字体,前景色.支持彩色...

    SuperXml:android布局能力增加,轻松实现圆角,边界,虚线,属性覆盖等功能。完全无侵入

    但是Google提供的布局属性有限,某些功能的实现我们必须使用代码,或者自定义控件的方式例如我们经常使用背景来表示和设置背景,那是不是可以使用layout_radius来表示和设置圆角呢? 使用示例需要在项目build.gradle...

    Android自定义环形LoadingView效果

    最近项目有要用到环形的进度条,Github上有一个类似的DashedCircularProgress控件,但是他画的进度是通过设置画笔的虚线效果来实现间隔的:progressPaint.setPathEffect(new DashPathEffect(new float[]{dashWith, ...

    Android使用自定义View实现横行时间轴效果

    每个阶段要显示时间、阶段名、状态图标、中间有虚线; 文字上下交错显示; 相邻阶段的文字在垂直方向上是可以相交的; 时间轴的个数不确定,但是要铺满屏幕并且不可滑动; 如果只实现上两点的效果,使用 Recycl

    RWidgetHelper:Android UI 快速开发,专治原生控件各种不服

    复用性差,自由度低RWidgetHelper优点:优化代码,简化使用,快速开发简介通过继承原生控件,设置自定义属性,解决常用 Selector,Gradient,Shape, 阴影,水波纹等功能原生控件都可实现 **基础功能** ,针对具体...

    Java实用程序设计100例(1)

    实例7 虚线与实线 实例8 显示多种字体 实例9 多种风格的窗口 实例10右键弹出菜单 实例11 森林状的关系图 实例12 简单的文本编辑器 实例13使用剪贴板的复制粘贴程序 实例14 文本的拖动处理 实例15 图片的拖动处理 ...

    CStatic派生类动态曲线图绘制

    本控件只是一个很简单的控件,比任务管理器里的曲线图略复杂,不具有图例、鼠标移动可以捕捉曲线上的坐标等特性。 具体如下: 1)从CStatic派生,容易在对话框中使用。 2)能够随对话框的缩放自动改变大小,这里...

Global site tag (gtag.js) - Google Analytics