近期公司需要做一个控制面板对摄像头进行方向控制,之前用一个圆形背景加4个圆形Button做的,同事可能感觉做的太敷衍了,而且点击效果都被手指挡住了,所以他给领导打小报告说让我重做,既然领导说做,哪有不做的道理
先看效果,左边的是按下时的效果, 没有按键时,颜色和上下右边的颜色是一致的,按键灵敏,使用简单

下面我们看看怎么用画布画出这个Panel(当然,颜色什么的可以可以换)
首先我们需要继承一个View,给View初始化一个isTouch数组,这个数组在你点击的时候记录你点击的那个方向,然后重绘面板的时候,会将点击的方向颜色变深;
然后初始化画笔,和一些默认尺寸,arrowLeft 和 arrowLeftDP 都是表示尺寸的, 为了自适应不同的屏幕大小,我们用arrowLeftDP来记录默认dp尺寸的大小,在初始化的时候将arrowLeftDP转化成PX(像素)赋给arrowLeft,所以下面所有的带DP和不带DP的尺寸变量都是这个原理
初始化的时候我们顺便设置一下触摸事件,后面我们要点击用到
public class PanelView extends View implements View.OnTouchListener {
private final String TAG = "PanelView";
boolean[] isTouch = new boolean[]{false,false,false,false};
private Paint paint;
private int smallCircleRadius = 180;
private final int strokeWidth = 12;
private final int halfStrokeWidth = strokeWidth/2;
private int arrowLeft = -70;
private int arrowTop = 280;
private int arrowRight = 70;
private int arrowBottom = 450;
private final int smallCircleRadiusDP = 51;
private int arrowLeftDP = -20;
private int arrowTopDP = 80;
private int arrowRightDP = 20;
private int arrowBottomDP = 125;
public PanelView(Context context) {
super(context);
setOnTouchListener(this);
dpTopx(context);
}
public PanelView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
setOnTouchListener(this);
dpTopx(context);
}
public PanelView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(co

最低0.47元/天 解锁文章
3590





