学而实习之 不亦乐乎

Android 虚线的使用

2024-01-08 21:37:31

一、虚线介绍

虚线可以帮助用户更加清晰的识别出边框、分割线、进度条等在屏幕上的显示,能够有效提升用户体验。在Android中,虚线可以通过使用Paint对象的setPathEffect()方法设置路径效果来实现,其中有三个内置的路径效果:DiscretePathEffect、DashPathEffect和PathDashPathEffect。下面我们将分别介绍这三种效果。

二、DiscretePathEffect

DiscretePathEffect为路径添加一些随机性,它将路径分成若干个线段,并将每个线段随机偏移一段距离,这样就能够产生出一种跳跃的、抖动的效果,使线条显得更加生动、有趣。

Paint paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(5);
Path path = new Path();
path.moveTo(100, 100);
path.lineTo(400, 400);
path.lineTo(500, 300);
path.lineTo(800, 500);
PathEffect effect = new DiscretePathEffect(20, 5);
paint.setPathEffect(effect);
canvas.drawPath(path, paint);

上述代码创建了一个Paint对象,并设置它的样式为STROKE,线条宽度为5。然后创建了一个Path对象,并将其设置为一个不规则的三角形。接着创建了一个DiscretePathEffect对象,将其分割线段长度设置为20,偏移量为5,并将它设置到Paint对象中。最后在Canvas上面绘制出这条使用DiscretePathEffect的Path路径。

三、DashPathEffect

DashPathEffect为路径添加一些虚线,它的参数为一个数组,数组中的值依次为虚线的长度和实线的长度,借助于该参数,我们可以生成不同长度、不同间距的虚线。

Paint paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(5);

Path path = new Path();
path.moveTo(100, 100);
path.lineTo(400, 400);
path.lineTo(500, 300);
path.lineTo(800, 500);

PathEffect effect = new DashPathEffect(new float[]{20, 10, 5, 10}, 0);
paint.setPathEffect(effect);
canvas.drawPath(path, paint);

上述代码跟DiscretePathEffect的代码基本一致,不同的是我们创建了一个DashPathEffect对象,并将其参数设置为一组虚线长度和实线长度的数组,即:长度为20的实线,长度为10的虚线,长度为5的实线,长度为10的虚线,这样就可以实现一组具有规律的虚线了。效果如下图所示:

四、PathDashPathEffect

PathDashPathEffect可以使用一个Path对象来绘制路径,通过这个Path对象所绘制出来的图形来代替原有的路径,原有路径则被PathDashPathEffect所设置的间隔替换掉。

Paint paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(5);

Path path = new Path();
path.moveTo(100, 100);
path.lineTo(400, 400);
path.lineTo(500, 300);
path.lineTo(800, 500);

Path pathEffect = new Path();
pathEffect.moveTo(0, 0);
pathEffect.lineTo(20, 20);
pathEffect.lineTo(40, 0);
pathEffect.lineTo(60, 20);
pathEffect.lineTo(80, 0);
pathEffect.close();

PathEffect effect = new PathDashPathEffect(pathEffect, 50, 0, PathDashPathEffect.Style.ROTATE);
paint.setPathEffect(effect);
canvas.drawPath(path, paint);

上述代码创建了一个Path对象,代表要绘制的路线,然后创建了另一个Path对象pathEffect,表示要使用的路径间隔。pathEffect对象绘制的是一个箭头,一共是五个等边三角形拼接而成,每个三角形的边长为20。然后我们创建PathDashPathEffect对象,将Path对象和间隔长度及偏移量设置到其中,并将其绘制样式设置为ROTATE,表示箭头随着路径的走向旋转,然后将该效果设置到Paint对象中,最后便可以通过canvas.drawPath()方法来绘制这条路径(下图):

五、小结

通过上述介绍,我们可以看出,Android中虚线的的使用非常灵活且具有多种效果,可以使用DiscretePathEffect产生生动有趣的效果,使用DashPathEffect绘制出具有规律的虚线,还可以使用PathDashPathEffect绘制出代表着方向的箭头等等,上述代码也详细的展示了如何使用这些效果。当然,虚线的使用范围不限于这些效果,我们可以根据业务需求在实际项目中进行灵活的应用,达到更好的用户体验。