仿抖音/快手可手势拖动关闭的Dialog

前言

  最近使用短视频App,比如快手和抖音,发现他们的回复评论框(感觉Dialog实现的,当然也还可以用其他方式实现),可以向下拖动关闭,感觉效果还可以,体验不错,要知道一般的dialog都是点击外部关闭,效果很一般,因此我想到要优化下这个体验。

 

效果图

 

  

  1.前几帧可以看到向下拖动,拖动到一半后,松开手指则Dismiss掉Dialog.

   2.后续几帧Dialog里用的是GridView实现的计算器功能,可以点击item进行加减运算.

实现原理及步骤

 实现思路: “当检测到用户的手机是移动操作时,不向下传递事件,同时根据手指移动距离改变Dialog位置,

 当用户操作为单击事件时则向下传递事件,响应GridView的item点击事件”

 自定义Dialog代码步骤:

1.重写Dialog的dispatchTouchEvent(分发事件) ,这个地方需要深刻理解事件分发,拦截,处理机制,此处只用到了分发事件的TouchEvent,如果是移动操作,则return true,不向下分发事件,则此时的任何操作,子元素均无法响应,事件被消费处理了,不会再传递下去了。

2.判断出用户是单击事件,则注意,要return super.dispatchTouchEvent(event);继续向下传递事件,子元素可以响应事件,因为事件正常的传递下去了。

核心代码如下,里面的方法就不展示了,过于简单,计算距离和判断单击,想必大家都非常清晰了,代码撸起来就是了


    @Override
    public boolean dispatchTouchEvent(@NonNull MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                onActionDown(event);
                break;
            case MotionEvent.ACTION_MOVE:
                onActionMove(event);
                break;
            case MotionEvent.ACTION_UP:
                onActionUp(event);
                break;
        }
        return isPullDown || super.dispatchTouchEvent(event);
    }

 

文末彩蛋

 1.事件分发/拦截/处理建议大家学习下其他的博客,本博客也有总结,都是经过本人写样例验证的一些总结..

 2.这个场景按道理应用场景还是挺多的,比如说常见的直播的menuBar,阅读器的上下工具条,都是可以以这个思路来实现,

 当menuBar显示的时候,不向下传递事件;反之,隐藏时候,事件则可以正常的传递.

3.场景还很多,原理就是这样,大家码起来吧.

 

  

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值