一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情。
需求分析
最近有一个需求,就是要在屏幕中实现对角线效果(这里为了方便对屏幕触摸测试时,测试人员能够根据画的线条轨迹进行测试),起初我们可以使用android中的View标签实现线条,不过这种线条原始都是横向或垂直状态,那么如何实现对角线效果呢?我们可以去自己定义View,使用canvas画2条线条,使用canvas的drawLine方法填入线条的坐标即可实现。
代码实现
我们定义一个class让其extends自View,必须要对构造函数进行重写,其构造函数有多个,我们必要进行重写其中的一个,不同参数的构造函数有不同的含义及使用,我们直接选择集成2个的参数的构造方法即可,2个参数的构造方法代表能在xml布局中使用时自动进行调用。
我们接着要实现onDraw方法,这里是我们进行绘制的关键,在方法里面初始化画笔,给画笔设置想要的颜色值,然后使用canvas.drawLine方法进行绘制2条线,传入对应的坐标值。使用getWidth()、getHeight()方法可以直接得到控件的宽度和高度,视图可以看做是坐标系,左上角是坐标的原点即x、y坐标都是0。
第一条线的开始和结束坐标我们可以表示成:开始坐标:(0,0)结束坐标:(width,height)
第二条线的开始和结束坐标我们可以表示成:开始坐标:(0,height)结束坐标:(width,0)
public class DiagonalView extends View {
private Paint paint;
public DiagonalView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.parseColor("#000000"));
//视图宽高
int width = getWidth();
int height = getHeight();
//画左上角开始斜线
canvas.drawLine(0, 0, width, height, paint);
//画左下角开始的斜线
canvas.drawLine(0, height, width, 0, paint);
}
}
这样我们就完成了我们想要的View,直接在xml布局中使用即可,因为要实现屏幕对角线,我们传入控件的宽度和高度都是用match_parent就ok。
<com.glc.diagonal.view.DiagonalView
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
要实现全屏效果还需要在代码中编写隐藏顶部状态栏、底部导航栏,下面来看一下运行的效果图