android自定义横线,Android自定义水平或垂直虚线效果

该博客介绍了一种在Android中创建自定义垂直虚线视图的方法,通过在drawable下创建XML文件来设置虚线样式,然后在代码中使用自定义的ImaginaryLineView类,对外提供设置虚线属性的方法,包括颜色和宽度。博客提供了源码实现,适用于需要在多个地方使用虚线的情况,避免了重复创建和管理多个XML资源。
摘要由CSDN通过智能技术生成

项目中有时候会用到虚线,怎么办?drawable下创建一个shape类型的xml文件绘制,然后引用到view的background下?如果用到虚线的地方很多呢?创建多个,分别引用?横向的还好说,竖向的呢?垂直的虚线,普通的创建是显示不出来的,如果需要,就要进行旋转等的操作。但是,还是那个问题,需要很多个怎么办?挨个创建?

完全没必要,写个自定义,对外暴露设置虚线属性的方法就行。源码如下:

最后的说明很重要!!!

最后的说明很重要!!!

最后的说明很重要!!!

效果图:

aacadfd2a3eb104952c586b6edab37e7.png

源码:

ImaginaryLineView

package com.chen.demo;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.DashPathEffect;

import android.graphics.Paint;

import android.graphics.Path;

import android.graphics.PathEffect;

import android.support.annotation.Nullable;

import android.util.AttributeSet;

import android.view.View;

/**

* 自定义垂直虚线view

* chenjianqiang

* 2017/6/14

*

* 使用方法:

* 在代码中findview之后,调用setLineAttribute方法,自定义虚线颜色及宽度

*/

public class ImaginaryLineView extends View {

private Context ct;

private Paint mPaint;

private Path mPath;

private PathEffect effects;

private int width;

private int height;

private int defaultColor=0xffff0000;

public ImaginaryLineView(Context context) {

this(context, null);

}

public ImaginaryLineView(Context context, @Nullable AttributeSet attrs) {

this(context, attrs, -1);

}

public ImaginaryLineView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

ct = context;

init();

}

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh) {

super.onSizeChanged(w, h, oldw, oldh);

width = w;

height = h;

}

private void init() {

//初始化,并打开抗锯齿

mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

mPaint.setStyle(Paint.Style.STROKE);

mPaint.setColor(defaultColor);

mPaint.setStrokeWidth(dip2px(ct, 1));

mPath = new Path();

//数组含义:里面最少要有2个值,值的个数必须是偶数个。偶数位(包含0),表示实线长度,奇数位表示断开的长度

effects = new DashPathEffect(new float[]{4, 2}, 0);

}

/**

* 设置线的必要属性

*

* @param color 十六进制颜色值

* @param lineWidth 虚线宽度,单位是dp

*/

public void setLineAttribute(int color, float lineWidth,float[] f) {

if (color == 0) {

color = defaultColor;

}

if (lineWidth == 0) {

lineWidth = 1;

}

if(f==null){

f=new float[]{4,2};

}

effects = new DashPathEffect(f, 0);

mPaint.setStrokeWidth(dip2px(ct, lineWidth));

mPaint.setColor(color);

invalidate();

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

//定义起点

mPath.moveTo(0, 0);

//定义终点

if(width>height){

//宽度比高度大,是横线

mPath.lineTo(width, 0);

}else{

//竖线。(根据实际情况,这里不考虑宽高相等情况)

mPath.lineTo(0, height);

}

mPaint.setPathEffect(effects);

canvas.drawPath(mPath, mPaint);

}

private static int dip2px(Context context, float dpValue) {

final float scale = context.getResources().getDisplayMetrics().density;

return (int) (dpValue * scale + 0.5f);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值