利用canvas实现分隔虚线(自定义view)

来源:互联网 发布:点o是什么文件 linux 编辑:程序博客网 时间:2024/06/07 05:58

目前的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;}@Overrideprotected 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;}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {    super.onSizeChanged(w, h, oldw, oldh);    width = w;    height = h;}@Overrideprotected 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);    }}

}
`

0 0
原创粉丝点击