自定义虚线控件

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

代码:

(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>

实用简单吧,呵呵。

扫描二维码关注公众号,回复: 567344 查看本文章

猜你喜欢

转载自hz-chenwenbiao-91.iteye.com/blog/2083529