fragment获得触摸事件监听

    /** 
    * 以下的几个方法用来,让fragment能够监听touch事件 
    */
    private ArrayList<MyOnTouchListener> onTouchListeners = new ArrayList<MyOnTouchListener>(10);


    @Override
    public boolean dispatchTouchEvent(MotionEvent ev)
    {
        for (MyOnTouchListener listener : onTouchListeners)
        {
            listener.onTouch(ev);
        }
        return super.dispatchTouchEvent(ev);
    }


    public void registerMyOnTouchListener(MyOnTouchListener myOnTouchListener)
    {
        onTouchListeners.add(myOnTouchListener);
    }


    public void unregisterMyOnTouchListener(MyOnTouchListener myOnTouchListener)
    {
        onTouchListeners.remove(myOnTouchListener);
    }


    public interface MyOnTouchListener
    {
        public boolean onTouch(MotionEvent ev);

    }



1、在Activity中注册监听

2、在fragment获得监听


       myOnTouchListener = new MainActivity.MyOnTouchListener()
        {


            @Override
            public boolean onTouch(MotionEvent event)
            {
                if (event.getActionMasked() == MotionEvent.ACTION_DOWN)
                {


                    // 获得当前得到焦点的View,一般情况下就是EditText(特殊情况就是轨迹求或者实体案件会移动焦点)
                    mEvents = 0;
                    View v = getActivity().getCurrentFocus();
                    lastY = (int) event.getY();
                    handler.removeMessages(3);


                }
                else if (event.getActionMasked() == MotionEvent.ACTION_POINTER_UP)
                {
                    // 过滤多点触碰
                    mEvents = -1;
                    Log.e("MotionEvent.ACTION_POINTER_UP", "mEvents = " + mEvents);
                }
                else if (event.getActionMasked() == MotionEvent.ACTION_UP)
                {
                    Log.e("MotionEvent.ACTION_UP", "mEvents=" + mEvents);
                    Log.e("MotionEvent.ACTION_UP", "origin_height=" + origin_height);
                    Log.e("MotionEvent.ACTION_UP", "origin_width=" + origin_width);
                    height = origin_height;
                    width = origin_width;
                    if (srcollView.getTop() == 0 || pullDownY <= 100)
                    {
                        LayoutParams para;
                        para = iv_bg.getLayoutParams();
                        para.height = height;
                        para.width = width;
                        // iv_bg.setLayoutParams(para);
                    }
                }
                else if (event.getActionMasked() == MotionEvent.ACTION_MOVE)
                {


                    if (mEvents == 0)
                    {


                        if (srcollView.getTop() == 0)
                        {
                            pullDownY = 0;
                            radio_iv = 2;
                        }


                        if (event.getY() - lastY < 0)
                        {
                            lastY = (int) event.getY();
                        }
                        else
                        {
                            pullDownY = (event.getY() - lastY) / radio_iv;
                        }
                        if (pullDownY < 0)
                        {
                            pullDownY = 0;


                        }
                        if (pullDownY > layout_noUp.getMeasuredHeight())
                        {


                            pullDownY = layout_noUp.getMeasuredHeight();
                        }


                        if (srcollView.getTop() != 0)
                        {
                            LayoutParams para;
                            para = iv_bg.getLayoutParams();
                            int totalOffset = (int) (height + pullDownY);
                            int f = totalOffset / height;
                            para.height = totalOffset;
                            para.width = width * f;
                            // iv_bg.setLayoutParams(para);
                            mask_height = para.height;
                            mask_width = para.width;
                            // Log.e("单点触控", "mask_height = " + mask_height);
                            // Log.e("单点触控", "mask_width = " + mask_width);


                        }
                    }
                    else
                    {
                        mEvents = 0;


                        radio_iv = (float) (2 + 2 * Math.tan(Math.PI / 2 / layout_noUp.getMeasuredHeight() * (pullDownY)));
                        lastY = event.getY();
                        height = mask_height;
                        width = mask_width;
                        // Log.e("mEevent =  -1", "mask_height = " + height);
                        // Log.e("mEevent =  -1", "mask_width = " + width);
                    }


                }
                return true;
            }
        };
        ((MainActivity) getActivity()).registerMyOnTouchListener(myOnTouchListener);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值