TempControlView
TempControlView copied to clipboard
建议添加OnStartChangeListener/OnEndChangeListener/OnChangeListener
/**
* 设置开始温度改变监听
*
* @param onStartChangeListener 监听接口
*/
public void setOnStartChangeListener(OnStartChangeListener onStartChangeListener) {
this.onStartChangeListener = onStartChangeListener;
}
/**
* 设置温度改变监听
*
* @param onChangeListener 监听接口
*/
public void setOnChangeListener(OnChangerListener onChangeListener) {
this.onChangeListener = onChangeListener;
}
/**
* 设置结束温度改变监听
*
* @param onEndChangeListener 监听接口
*/
public void setOnEndChangeListener(OnEndChangeListener onEndChangeListener) {
this.onEndChangeListener = onEndChangeListener;
}
/**
* 设置点击监听
*
* @param onClickListener 点击回调接口
*/
public void setOnClickListener(OnClickListener onClickListener) {
this.onClickListener = onClickListener;
}
/**
* 温度开始改变监听接口
*/
public interface OnStartChangeListener {
/**
* 回调方法
*
* @param temp 温度
*/
void change(int temp);
}
/**
* 温度改变监听接口
*/
public interface OnChangerListener {
/**
* 回调方法
*
* @param temp 温度
*/
void change(int temp);
}
/**
* 温度结束改变监听接口
*/
public interface OnEndChangeListener {
/**
* 回调方法
*
* @param temp 温度
*/
void change(int temp);
}
/**
* 点击回调接口
*/
public interface OnClickListener {
/**
* 点击回调方法
*
* @param temp 温度
*/
void onClick(int temp);
}
添加一个变量用来控制startChange
private boolean startChange;
然后还有修改onTouchEvent
@Override
public boolean onTouchEvent(MotionEvent event) {
if (!canRotate) {
return super.onTouchEvent(event);
} else {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
isDown = true;
if(onStartChangeListener != null && startChange == false){
onStartChangeListener.change(temperature);
startChange = true;
}
float downX = event.getX();
float downY = event.getY();
currentAngle = calcAngle(downX, downY);
break;
case MotionEvent.ACTION_MOVE:
isMove = true;
float targetX;
float targetY;
downX = targetX = event.getX();
downY = targetY = event.getY();
float angle = calcAngle(targetX, targetY);
// 滑过的角度增量
float angleIncreased = angle - currentAngle;
// 防止越界
if (angleIncreased < -270) {
angleIncreased = angleIncreased + 360;
} else if (angleIncreased > 270) {
angleIncreased = angleIncreased - 360;
}
IncreaseAngle(angleIncreased);
currentAngle = angle;
invalidate();
if(onChangeListener != null)
onChangeListener.change(temperature);
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP: {
if (isDown) {
startChange = false;
if (isMove) {
// 纠正指针位置
rotateAngle = (float) ((temperature - minTemp) * angleRate * angleOne);
invalidate();
// 回调温度改变监听
if (onEndChangeListener != null) {
onEndChangeListener.change(temperature);
}
isMove = false;
} else {
// 点击事件
if (onClickListener != null) {
onClickListener.onClick(temperature);
}
}
isDown = false;
}
break;
}
}
return true;
}
}
我比较懒,懒得branches,就直接issue提了 然后我这么写会有个click会响应start的问题,我随便,反正我项目重点不是这个