1. 程式人生 > >android 螢幕中心區域點選事件的監聽

android 螢幕中心區域點選事件的監聽

以下不是一個完整的演示,只是一些實現流程和思路

比如要獲取中間小框框的監聽事件

  • 以中心點左右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);
            }
        });