將 `dispatchTouchEvent` 中的震動邏輯提取,供其他類/函數復用。
public class VibrateTouchListener implements View.OnTouchListener {
private final Vibrator vibrator;
private final Random random = new Random();
public VibrateTouchListener(Context context) {
vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
int duration = random.nextInt(500) + 4000; // 4000-4500ms
vibrator.vibrate(duration);
}
return false; // 不攔截事件,繼續分發
}
}
// 在 Activity 中
View rootView = findViewById(android.R.id.content).getRootView();
rootView.setOnTouchListener(new VibrateTouchListener(this));
// 或針對特定 View
button.setOnTouchListener(new VibrateTouchListener(this));
若需**全局**攔截所有觸摸事件,可在 Application 中註冊 `ActivityLifecycleCallbacks`,為每個 Activity 的 `getWindow().getDecorView()` 設置同一 Listener 實例。