Android ScrollView嵌套横向滑动控件时冲突问题

发布时间 - 2026-01-11 02:40:25    点击率:

前言:今天在开发的时候遇到这样的问题,最外层是ScrollView,里面嵌套了一个横向滑动的日历控件,在滑动日历的时候很卡顿。看到这种问题,自然而然的就会想到scrollview和其他可滑动控件的冲突问题。

解决思路

用户的左右滑动操作被最外层的scrollView控件处理掉了,所以只要让scrollview对左右滑动事件不监听,让其子控件处理左右滑动事件 。重写scrollview的onInterceptTouchEvent方法,当上下滑动时不处理即可。

代码如下

public void setOnScollChangedListener(OnScollChangedListener onScollChangedListener) {
  this.onScollChangedListener = onScollChangedListener;
}

@Override
protected void onScrollChanged(int x, int y, int oldx, int oldy) {
  super.onScrollChanged(x, y, oldx, oldy);
  if (onScollChangedListener != null) {
    onScollChangedListener.onScrollChanged(this, x, y, oldx, oldy);
  }
}

public interface OnScollChangedListener {

  void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy);

}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
  switch (ev.getAction()) {
  case MotionEvent.ACTION_DOWN:
    xDistance = yDistance = 0f;
    xLast = ev.getX();
    yLast = ev.getY();
    break;
  case MotionEvent.ACTION_MOVE:
    final float curX = ev.getX();
    final float curY = ev.getY();

    xDistance += Math.abs(curX - xLast);
    yDistance += Math.abs(curY - yLast);
    xLast = curX;
    yLast = curY;

    /**
     * X轴滑动距离大于Y轴滑动距离,也就是用户横向滑动时,返回false,ScrollView不处理这次事件,
     * 让子控件中的TouchEvent去处理,所以横向滑动的事件交由子控件处理, ScrollView只处理纵向滑动事件
     */
    if (xDistance > yDistance) {
      return false;
    }
  }

  return super.onInterceptTouchEvent(ev);
}
}

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


# ScrollView嵌套横向滑动  # ScrollView  # 横向滑动嵌套  # Android 一个日历控件的实现代码  # Android实现日历控件示例代码  # Android学习教程之日历控件使用(7)  # Android使用GridLayout绘制自定义日历控件  # Android自定义日历控件实例详解  # Android开源堆叠滑动控件仿探探效果  # Android自定义View实现随手势滑动控件  # Android仿微信列表滑动删除之可滑动控件(一)  # Android实现IOS相机滑动控件  # Android自定义日历滑动控件  # 就会  # 最外层  # 掉了  # 重写  # 他可  # 要让  # 自然而然  # 大家多多  # 其子  # brush  # java  # class  # br  # pre  # public  # onScollChangedListener  # Override  # protected  # void  # setOnScollChangedListener 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在服务器上三步完成建站并提升流量?  如何登录建站主机?访问步骤全解析  如何快速上传建站程序避免常见错误?  使用spring连接及操作mongodb3.0实例  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  详解Huffman编码算法之Java实现  微信小程序 配置文件详细介绍  Python文件流缓冲机制_IO性能解析【教程】  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  如何在建站宝盒中设置产品搜索功能?  微信小程序 HTTPS报错整理常见问题及解决方案  如何在Windows虚拟主机上快速搭建网站?  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  Laravel怎么为数据库表字段添加索引以优化查询  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  lovemo网页版地址 lovemo官网手机登录  JavaScript如何实现音频处理_Web Audio API如何工作?  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  南京网站制作费用,南京远驱官方网站?  详解阿里云nginx服务器多站点的配置  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  大同网页,大同瑞慈医院官网?  青岛网站建设如何选择本地服务器?  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  EditPlus中的正则表达式 实战(4)  如何快速生成ASP一键建站模板并优化安全性?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  iOS中将个别页面强制横屏其他页面竖屏  详解Android图表 MPAndroidChart折线图  5种Android数据存储方式汇总  电商网站制作价格怎么算,网上拍卖流程以及规则?  如何在阿里云域名上完成建站全流程?  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  html5的keygen标签为什么废弃_替代方案说明【解答】  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  在线制作视频网站免费,都有哪些好的动漫网站?  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  在线制作视频的网站有哪些,电脑如何制作视频短片?  详解Oracle修改字段类型方法总结  Android滚轮选择时间控件使用详解  如何用已有域名快速搭建网站?  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  Laravel如何配置Horizon来管理队列?(安装和使用)  如何在Tomcat中配置并部署网站项目?