全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android下拉刷新与轮播图滑动冲突解决方案

最近在开发中遇到了这样一个问题,在下拉刷新组件中包含了一个轮播图组件,当左右滑动的图片时很容易触发下拉刷新,如下图所示:

如图中红色箭头所示方向切换轮播图,很容易触发下拉刷新。网上查了很多方法,发现都不能很好的解决,于是自己研究了下。

我选用的第三方控件

1.下拉刷新我选用的是chanven的CommonPullToRefresh(系统自带的SwipeRefreshLayout也应该是一样的道理);

2.轮播图选用的是daimajia的AndroidImageSlider(用ViewPager也是一样的道理)。具体界面自行脑补哈。

解决方案

我们仔细分析一下,我们要解决的实际上就是控件的事件拦截问题。现在的情况是外层的控件已经拦截了斜着滑动的事件,那么我们只要让外层的控件把这个事件分发下去就可以了【在dispatchTouchEvent(MotionEvent ev)方法中处理】,那么问题来了,怎么判断斜着的事件。网上有很多方案,但都不是很完美。我想到了一种,跟大家分享一下,先看图:

方案分析

1.图一中x=y,作为临界条件,这时α刚好等于45°;

2.图二中x<y,α>45°,这时我们判断为上下移动;

3.图三中x>y,α<45°,这时我们判断为左右移动。

那么我们只要判断tan(α)与tan(45)的关系就能判断是左右还是上下移动。我们写一个类继承PtrClassicFrameLayout,下面是关键代码:

public class SubPtrClassicFrameLayout extends PtrClassicFrameLayout {

  private float mDownX;
  private float mDownY;

  public SubPtrClassicFrameLayout(Context context) {
    super(context);
  }

  public SubPtrClassicFrameLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public SubPtrClassicFrameLayout(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
  }

  @Override
  public boolean dispatchTouchEvent(MotionEvent ev) {
    switch (ev.getAction()) {
      case MotionEvent.ACTION_DOWN:
        mDownX = ev.getX();
        mDownY = ev.getRawY();
        break;
      case MotionEvent.ACTION_MOVE:
        float moveX = ev.getX();
        float moveY = ev.getRawY();
        float diffX = Math.abs(moveX - mDownX);
        float diffY = Math.abs(moveY - mDownY);
        boolean isHorizon = Math.tan(diffY / diffX) < Math.tan(45.0);
        if (isHorizon) {
          return dispatchTouchEventSupper(ev);
        }
        break;
    }
    return super.dispatchTouchEvent(ev);
  }

}

我们可以看到,其实很简单,关键就是判断当前位置相对于初始位置的滑动方向。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Android下拉刷新  # 冲突  # webview下拉刷新  # Android滑动冲突  # Android自定义控件实现简单的轮播图控件  # Android ViewPager实现轮播图效果  # Android自定义控件实现优雅的广告轮播图  # Android实现基于ViewPager的无限循环自动播放带指示器的轮播图CarouselFigur  # Android如何使用RecyclerView打造首页轮播图  # 简单实现android轮播图  # Android开发在轮播图片上加入点击事件的方法  # Android实现轮播图无限循环效果  # Android实现ViewPage轮播图效果  # android常见手动和自动轮播图效果  # 的是  # 很容易  # 所示  # 斜着  # 我想  # 来了  # 很好  # 就能  # 有很多  # 是一样的  # 网上  # 不是很  # 可以看到  # 要让  # 一个问题  # 相对于  # 第三方  # 大家分享  # 也应  # 三中 


相关文章: 如何在IIS中新建站点并配置端口与物理路径?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  如何挑选优质建站一级代理提升网站排名?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  如何快速搭建支持数据库操作的智能建站平台?  常州企业网站制作公司,全国继续教育网怎么登录?  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  如何用狗爹虚拟主机快速搭建网站?  如何快速上传自定义模板至建站之星?  建站之星备案流程有哪些注意事项?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  全景视频制作网站有哪些,全景图怎么做成网页?  如何快速搭建高效简练网站?  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  创业网站制作流程,创业网站可靠吗?  Python文件管理规范_工程实践说明【指导】  建站中国官网:模板定制+SEO优化+建站流程一站式指南  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  Python多线程使用规范_线程安全解析【教程】  宝塔Windows建站如何避免显示默认IIS页面?  测试制作网站有哪些,测试性取向的权威测试或者网站?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  php json中文编码为null的解决办法  微课制作网站有哪些,微课网怎么进?  我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?  免费网站制作appp,免费制作app哪个平台好?  开封网站制作公司,网络用语开封是什么意思?  如何零成本快速生成个人自助网站?  如何在云服务器上快速搭建个人网站?  如何在Windows环境下新建FTP站点并设置权限?  常州企业建站如何选择最佳模板?  建站主机是什么?如何选择适合的建站主机?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  建站之星安全性能如何?防护体系能否抵御黑客入侵?  如何快速选择适合个人网站的云服务器配置?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  高防服务器租用首荐平台,企业级优惠套餐快速部署  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  已有域名和空间如何快速搭建网站?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  如何在万网开始建站?分步指南解析  如何在IIS中新建站点并解决端口绑定冲突?  建站之家VIP精选网站模板与SEO优化教程整合指南  Python如何创建带属性的XML节点  建站之星安装提示数据库无法连接如何解决?  如何制作网站标识牌,动态网站如何制作(教程)?  如何快速查询网站的真实建站时间?  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。