private void initListener() {
Looper.myQueue().addIdleHandler(new MessageQueue.IdleHandler() {
@Override
public boolean queueIdle() {
String location = GlobalConfigManage.getInstances().getInfoValue(GlobalConfigManage.KEY_SHORTCUT_LOCATION);
if (!TextUtils.isEmpty(location)) {
String[] array = location.split(",");
if (array.length == 2) {
String num1 = array[0];
String num2 = array[1];
float x = TextUtils.isEmpty(num1) ? 0 : Float.parseFloat(num1);
float y = TextUtils.isEmpty(num2) ? 0 : Float.parseFloat(num2);
x = Math.max(Math.min(screenWidth - shortCut.getWidth(), x), 0);
y = Math.max(0, Math.min(screenHeight - shortCut.getHeight() - virtualHeight - statusHeight - tabBarHeight, y));
shortCut.setX(x);
shortCut.setY(y);
}
}
return false;
}
});
shortCut.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
bMove = true;
return true;
}
});
shortCut.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int rawX = (int) event.getRawX();
int rawY = (int) event.getRawY();
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
bMove = false;
lastX = rawX;
lastY = rawY;
break;
case MotionEvent.ACTION_MOVE:
bMove = true;
//計算手指移動了多少
int dx = rawX - lastX;
int dy = rawY - lastY;
//這裏修復一些手機無法觸發點擊事件的問題
int distance = (int) Math.sqrt(dx * dx + dy * dy);
if (distance < 3) {
//給個容錯範圍,不然有部分手機還是無法點擊
bMove = false;
break;
}
float x = shortCut.getX() + dx;
float y = shortCut.getY() + dy;
//檢測是否到達邊緣 左上右下
x = Math.max(Math.min(screenWidth - shortCut.getWidth(), x), 0);
y = Math.max(0, Math.min(screenHeight - shortCut.getHeight() - virtualHeight - statusHeight - tabBarHeight, y));
shortCut.setX(x);
shortCut.setY(y);
lastX = rawX;
lastY = rawY;
GlobalConfigManage.getInstances().saveInfoValue(GlobalConfigManage.KEY_SHORTCUT_LOCATION, x + "," + y + "");
break;
case MotionEvent.ACTION_UP:
if (bMove) {
//恢復按壓效果
shortCut.setPressed(false);
}
break;
}
//如果是拖拽則消耗事件,否則正常傳遞即可。
return bMove || onTouchEvent(event);
}
});
}
// 保存上次移動的位置
public void saveInfoValue(String key, String value) { SharedPreferences sharedPreferences = Envi.appContext.getSharedPreferences(XML_GLOBAL_CONFIG_NAME, Context.MODE_PRIVATE); Editor editor = sharedPreferences.edit();// 獲取編輯器 editor.putString(key, value); editor.apply();//提交修改 } /** * 獲取用戶配置接口 * * @return */ public String getInfoValue(String key) { SharedPreferences share = Envi.appContext.getSharedPreferences(XML_GLOBAL_CONFIG_NAME, Context.MODE_PRIVATE); String infoValue = share.getString(key, ""); return infoValue; }