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);
            }
        });

猜你喜欢

转载自blog.csdn.net/qq_17846019/article/details/84892850