package com.hdl.sdk.sourceos.knob;
|
|
|
import android.os.Handler;
|
import android.os.Looper;
|
import android.util.Log;
|
|
|
import java.util.concurrent.atomic.AtomicLong;
|
|
/**
|
* 旋钮大于200毫秒
|
* 左右互斥,灵动左右旋钮半格有问题
|
*/
|
public abstract class IKnobListenerAdapter extends OsEventListener {
|
|
|
|
//左旋
|
public static final int LEFT_KEY_CODE = 132;
|
//右旋
|
public static final int RIGHT_KEY_CODE = 131;
|
|
private static final long MAX_LONG_CLICK_TIME = 500L;
|
private static final long MAX_ROTATE_TIME = 500L;
|
|
private static final Handler mHandler = new Handler(Looper.getMainLooper());
|
|
//上一次点击时间
|
private final AtomicLong lastClickTime = new AtomicLong(0);
|
|
//上一次旋转时间
|
private final AtomicLong lastRotateTime = new AtomicLong(0);
|
private final AtomicLong rotateCount = new AtomicLong(0);
|
|
|
//上一次
|
public IKnobListenerAdapter() {
|
}
|
|
public void clear() {
|
mHandler.removeCallbacksAndMessages(null);
|
}
|
|
/**
|
* 长按
|
*/
|
public void onKnobLongClickListener() {
|
Log.i("knob", "IKnobListenerAdapter:onKnobLongClick");
|
}
|
|
/**
|
* 点击
|
*/
|
public void onKnobClickListener() {
|
Log.i("knob", "IKnobListenerAdapter:onKnobClick");
|
}
|
|
/**
|
* 向左旋转
|
*/
|
public void onKnobLongLeftListener() {
|
Log.i("knob", "IKnobListenerAdapter:onKnobLongLeft");
|
}
|
|
public void onKnobLeftListener() {
|
Log.i("knob", "IKnobListenerAdapter:onKnobLeft");
|
}
|
|
|
/**
|
* 向右旋转
|
*/
|
public void onKnobRightListener() {
|
Log.i("knob", "IKnobListenerAdapter:onKnobLongRight");
|
}
|
|
public void onKnobLongRightListener() {
|
Log.i("knob", "IKnobListenerAdapter:onKnobRight");
|
}
|
|
|
@Override
|
public void onKeyEvent(int keyCode, int action) {
|
long time = System.currentTimeMillis();
|
if (keyCode == LEFT_KEY_CODE) {
|
//向左旋转
|
if (action == 1) {//1是稳定状态
|
mHandler.removeCallbacks(mKnobRightRunnable);
|
mHandler.postDelayed(mKnobLeftRunnable, 150);
|
if (time - lastRotateTime.get() < MAX_ROTATE_TIME) {
|
if (rotateCount.get() > 4) {
|
rotateCount.set(0);
|
lastRotateTime.set(0);
|
//快速旋转
|
mHandler.post(mKnobLongLeftRunnable);
|
}
|
rotateCount.set(rotateCount.get() + 1);
|
} else {
|
lastRotateTime.set(time);
|
}
|
|
}
|
} else if (keyCode == RIGHT_KEY_CODE) {
|
//向右旋转
|
if (action == 1) {//1是稳定状态
|
mHandler.removeCallbacks(mKnobLeftRunnable);
|
mHandler.postDelayed(mKnobRightRunnable, 150);
|
if (time - lastRotateTime.get() < MAX_ROTATE_TIME) {
|
if (rotateCount.get() > 4) {
|
rotateCount.set(0);
|
lastRotateTime.set(0);
|
//快速旋转
|
mHandler.post(mKnobLongRightRunnable);
|
}
|
rotateCount.set(rotateCount.get() + 1);
|
} else {
|
lastRotateTime.set(time);
|
}
|
}
|
}
|
|
}
|
|
|
private final Runnable mKnobLeftRunnable = new Runnable() {
|
@Override
|
public void run() {
|
onKnobLeftListener();
|
}
|
};
|
|
private final Runnable mKnobLongLeftRunnable = new Runnable() {
|
@Override
|
public void run() {
|
onKnobLongLeftListener();
|
}
|
};
|
|
private final Runnable mKnobRightRunnable = new Runnable() {
|
@Override
|
public void run() {
|
onKnobRightListener();
|
}
|
};
|
|
private final Runnable mKnobLongRightRunnable = new Runnable() {
|
@Override
|
public void run() {
|
onKnobLongRightListener();
|
}
|
};
|
|
private final Runnable mKnobLongClickRunnable = new Runnable() {
|
@Override
|
public void run() {
|
onKnobLongClickListener();
|
}
|
};
|
|
private final Runnable mKnobClickRunnable = new Runnable() {
|
@Override
|
public void run() {
|
onKnobClickListener();
|
}
|
};
|
|
|
}
|