android 螢幕中心區域點選事件的監聽
阿新 • • 發佈:2018-12-09
以下不是一個完整的演示,只是一些實現流程和思路
比如要獲取中間小框框的監聽事件
- 以中心點左右100dp為寬
- 以中心點上下150dp為高
1,獲取整個螢幕寬度的方法
// get Size DisplayMetrics displayMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); mWidth = displayMetrics.widthPixels; mHeight = displayMetrics.heightPixels;
2,中心區域的監聽事件
這是一個不完整的類,可以防止
private OnTouchListener CenterOnTouchListener = new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { //mViewWidth 是整個螢幕的寬度 //就是在螢幕的一半+100和-100之間的寬度 同理高度 boolean isCenterOfX = event.getX() < mViewWidth / 2 + 100 && event.getX() > mViewWidth / 2 - 100; boolean isCenterOfY = event.getY() < mViewHeight / 2 + 150 && event.getY() > mViewHeight / 2 - 150; //如果點選的位置是在這個方形之間 if(isCenterOfX && isCenterOfY){ //必須要點選之後手指離開才進行監聽 if(event.getAction() == MotionEvent.ACTION_UP){ Log.i(TAG, "onTouch: Center"); //回撥方法 B中註冊使用 A就是該Activity進行監聽回撥 if(mOnUserNeedSettingListener != null){ mOnUserNeedSettingListener.onUserNeedSetting(); } } //返回true代表這個事件不向下分發,到這裡就停止了 //不會進行下面的方法了 return true; } switch (event.getAction()) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP: break; } return false; }
3,在監聽函式對應的活動中設定回撥函式
在阿中設定乙中傳入回撥物件,當甲的狀態即點選到中心區域後回撥給乙進行相應操作(也可以在同一活動中實現)
也叫觀察者模式:具體可以看一下我這篇文章Android App通訊 - 觀察者模式
private OnUserNeedSettingListener mOnUserNeedSettingListener; public OnUserNeedSettingListener getOnUserNeedSettingListener() { return mOnUserNeedSettingListener; } public void setOnUserNeedSettingListener(OnUserNeedSettingListener onUserNeedSettingListener) { mOnUserNeedSettingListener = onUserNeedSettingListener; } public interface OnUserNeedSettingListener{ void onUserNeedSetting(); }
4、在註冊回撥的活動中進行相應操作
// set user setting view listener.
mView.setOnUserNeedSettingListener(new xx類中的.OnUserNeedSettingListener() {
@Override
public void onUserNeedSetting() {
//具體todo
//這裡寫的是三目運算子,如果該控制元件處於顯示狀態,Gone掉,否則顯示
mSettingView.setVisibility(mSettingView.getVisibility() == View.VISIBLE
? View.GONE : View.VISIBLE);
}
});