GestureDetector 手势监听,根据手势动态操作布局显示

1:需求向下滑动时布局隐藏掉一部分,向上滑动时候显示出来
大概样子如图的需求动态根据手势显示隐藏打赏的物品模块
GestureDetector 手势监听,根据手势动态操作布局显示_第1张图片
GestureDetector 手势监听,根据手势动态操作布局显示_第2张图片
2:做手势监听
在Android中,是由GestureDetector类来负责手势的检测,每一个GestureDetector类的实例都代表一个手势监听器。我们在为按钮设置点击事件监听器时会用到OnClickListener,创建手势管理器,实现五个方法

GestureDetector  mDetector = new GestureDetector(UiUtils.getContext(), new GestureDetector.OnGestureListener() {
 @Override
            public boolean onDown(MotionEvent event) {
                return false;
            }

            @Override
            public void onShowPress(MotionEvent event) {
            }

            @Override
            public boolean onSingleTapUp(MotionEvent event) {
                return false;
            }

            @Override
            public boolean onScroll(MotionEvent event, MotionEvent event1, float v, float v1) {
                Log.e("glk",v1+"");
                if(v1>0){
                    Log.e("glk",v1+"da");
                    recycle_reward_list.setVisibility(View.GONE);
                }else{
                    Log.e("glk",v1+"xiao");
                    recycle_reward_list.setVisibility(View.VISIBLE);
                }
                return false;
            }

            @Override
            public void onLongPress(MotionEvent event) {
            }

            @Override
            public boolean onFling(MotionEvent event, MotionEvent event1, float v, float v1) {
                return false;
            }
}

我这里根据Y轴移动正负来判断手势向上或者向下滑动的
GestureDetector 手势监听,根据手势动态操作布局显示_第3张图片
本来想加个动画效果,时间关系没弄
3:这个时候让布局与这个管理器绑定在一起

  mTypeList.setOnTouchListener(this);(这里不要用你的布局整体绑定,应该绑定具体某个控件要不根本监听不到)我这里和recycleview绑定的
``
4:在ontouch()方法里写监听

@Override
public boolean onTouch(View view, MotionEvent event) {
return mDetector.onTouchEvent(event);
}
“`
效果实现。
扩展重写的五个方法的具体作用
-boolean onDown(MotionEvent e):当用户在屏幕上按下时会触发该方法,但在移动或抬起手指时不会触发。

-void onShowPress(MotionEvent e):当用户在屏幕上按下,并且既没有移动有没有抬起手指时,会触发该方法。一般通过该方法告知用户他们的动作已经被识别到了,你可以高亮某个元素来提醒他们。

-boolean onSingleTapUp(MotionEvent e);:当用户在屏幕上轻击时(通常是指点击屏幕的时间很短)会触发该方法。

-boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY);:当用户在屏幕上发起滚动的手势时会触发该方法。参数中的e1指第一个按下开始滚动的动作事件,e2指触发当前这个方法的移动动作的事件,distanceX和distanceY则分别触发onScroll方法期间的X、Y轴上的滚动距离,而不是指e1和e2两个事件发生直接的距离。

-void onLongPress(MotionEvent e);:当用户在屏幕上持续地长按时会触发该方法。

-boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY);:当用户在屏幕上持续地按下并且有“抛”的动作时,会触发该方法。对于该事件的理解,你可以体会一下按住一个图标然后把它扔到某个地方的感觉。参数中的e1指第一个按下的动作事件,e2指触发当前这个方法的“猛扔”动作的事件,velocityX和velocityY则分别触发onFling方法期间X、Y轴上的移动速度。
如果你翻阅这些API的源代码,你还能发现还有一个名为OnDoubleTapListener的接口,显然是双击事件的一个监听器,它包含了下面这些方法。

-boolean onSingleTapConfirmed(MotionEvent e):当用户在屏幕上单击是会触发此方法,与上面的onSingleTapUp方法不同的地方在于,该方法只会在监听器确定了用户在第一次单击后不会触发双击事件时才会被触发。

-boolean onDoubleTap(MotionEvent e):当用户在屏幕上双击时会触发此方法。这里的按下动作事件指的时双击中的第一次触击。

-boolean onDoubleTapEvent(MotionEvent e):在双击事件发生时会触发此方法,包括了按下、移动和抬起事件。

`

你可能感兴趣的:(个人心得)