step 1、继承 View 类
public class RockerView extends View {
// 构造函数
public RockerView(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
step 2、重载 OnMeasure 函数
该函数可以认为是固定操作
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int measureWidth, measureHeight;
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);
if (widthMode == MeasureSpec.EXACTLY) {
measureWidth = widthSize;
} else {
measureWidth = DEFAULT_SIZE;
}
if (heightMode == MeasureSpec.EXACTLY) {
measureHeight = heightSize;
} else {
measureHeight = DEFAULT_SIZE;
}
setMeasuredDimension(measureWidth, measureHeight);
}
step 3、重载 OnDraw 函数
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
该函数传入一张画布 canvas,在 canvas 中绘制想要的形状。
step 4、重载 OnTouchEvent 函数
该函数位组件的事件监听函数。
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 按下行为
case MotionEvent.ACTION_MOVE:
// 拖动行为
break;
case MotionEvent.ACTION_UP:
// 抬起行为
break;
case MotionEvent.ACTION_CANCEL:
// 行为动作结束
break;
}
return true;
}
step 5、配置接口函数
通过设置接口函数,可以有效的将组件的各个状态、数据,在适当的位置触发用户想要的操作,例如在获取到位置和角度数据的同时,调用接口函数,用户通过设置接口函数,来处理获取到的位置和角度数据。
public void setOnShakeListener(com.v5lab.fishrobot.selfview.RockerView.OnShakeListener listener) {
mOnShakeListener = listener;
}
public interface OnShakeListener {
void onStart();
void getData(double angle, double distance);
void onFinish();
}