目前的app中,分隔线较为广泛使用,虚线的视觉效果又要优于实现,起始虚线的制作也很简单,只需要实现自定义view的基本步骤即可,本文只是侧重在画布canvas上实现虚线,所以省略了自定义view的style.xml实现。现在贴出java源码:
`package com.example.customviewdemo;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
/**
* Created by thompson on 16-11-7.
*/
public class MyView extends View {
private int defaultSize;
private int width;
private int height;
public MyView(Context context) {
this(context,null);
}
public MyView(Context context, AttributeSet attrs)
{
super(context, attrs);
defaultSize=100;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec,heightMeasureSpec);
int width = getSize(widthMeasureSpec);
int height = getSize(heightMeasureSpec);
setMeasuredDimension(width, height);
}
//由于directionMeasureSpec包含测量模式和测量长度,所以这里进行提炼封装
private int getSize(int measureSpec) {
int defaultNum = defaultSize;
int mode = MeasureSpec.getMode(measureSpec);
int size = MeasureSpec.getSize(measureSpec);
switch(mode){
case MeasureSpec.UNSPECIFIED:
defaultNum = defaultSize;
break;
case MeasureSpec.AT_MOST:
case MeasureSpec.EXACTLY:
defaultNum = size;
break;
}
return defaultNum;
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
width = w;
height = h;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//画笔设置
Paint paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(2);
paint.setColor(Color.BLUE);
//步进数字18为线段长+俩线段间隔
for(int i=0;i<width;i+=18){
//drawLine(startPointX,startPointY,endPointX,endPointY,paint)
//因为分隔线为水平方向所以起始点和终止点的Y值相等,X值相减=10为线段长度
canvas.drawLine(i, 100, i + 10, 100, paint);
}
}
}
`