• RecyclerView 空白区域点击事件


    在项目中使用RecyclerView展示列表数据,用了GridLayoutManager,在遇到item个数不满足一行时,会在页面右侧透出空白位, 如下图所示.

    目前点击空白位是没有点击响应事件的,我们想实现点击响应以扩大用户可以进入LandingPage的机会,在实现角度可以通过以下三种方式去实现:

    1.重写RecyclerView的onMeasure实现宽度自适应
    2.实现EmptyItem占位空白区域并给出点击事件
    3.针对RecyclerView实现空白区域点击

    本着最小改动的原则,我们采用了第三种方案进行探索。

     常规的想法:为RecyclerView设置setOnTouchListener(),监听点击手势,并且通过onTouch(View v,MotionEvent event)中v.getId!=0 可以区分出是RecyclerView的空白区域。

    基于以上知识点,可以实现空白区域的点击事件监听

    1. mRecyclerView.setOnTouchListener((v, event) -> {
    2. if (event.getAction() == MotionEvent.ACTION_UP) {
    3. if (v.getId() != 0) {
    4. //recyclerView空白处点击事件
    5. }
    6. }
    7. return false;
    8. });

    将上面的写到项目中,测试下基本可以实现需求,但是有个问题,当用户做滑动手势的时候也会触发上面的事件,接下来继续再优化下,屏蔽掉手势滑动:

    1. float scrollX;
    2. float scrollY;
    3. mRecyclerView.setOnTouchListener(new OnTouchListener() {
    4. @Override
    5. public boolean onTouch(View v, MotionEvent event) {
    6. if (event.getAction() == MotionEvent.ACTION_DOWN) {
    7. scrollX = event.getX();
    8. scrollY = event.getY();
    9. }
    10. if (event.getAction() == MotionEvent.ACTION_UP) {
    11. if (v.getId() != 0 && Math.abs(scrollX - event.getX()) <= 5 && Math.abs(scrollY - event.getY()) <= 5) {
    12. //处理空白区域的点击事件
    13. }
    14. }
    15. return false;
    16. }
    17. });

    增加MotionEvent.ACTION_DOWN动作的监听,在MotionEvent.ACTION_UP动作中比较dx和dy,dx和dy小于某个数,认为手指没有滑动,这样就完美屏蔽了手势滑动,只监听点击事情了!

    到此完美解决! 

  • 相关阅读:
    3GPP R17覆盖增强
    三数之和
    Memento(备忘录模式)
    JUC并发编程——JMM详解(基于狂神说得到学习笔记)
    软件测试的学习笔记(5)
    深入理解Linux网络技术内幕(十)——帧的接收
    .NET Emit 入门教程:第三部分:构建模块(Module)
    063_末晨曦Vue技术_过渡 & 动画之显性的过渡持续时间
    手撕单链表
    二硒化钨负载聚乳酸纳米载体 (PLA-WSe2)|聚已内酯改性二硒化钨(PCL-WSe2) 科研级
  • 原文地址:https://blog.csdn.net/Jason_HD/article/details/133787067