TextView不能在ListeView中单独的滚动原因

默认ListView将会拦截MOVE事件向下传递

参见源码

 case MotionEvent.ACTION_MOVE: {switch (mTouchMode) {case TOUCH_MODE_DOWN:int pointerIndex = ev.findPointerIndex(mActivePointerId);if (pointerIndex == -1) {pointerIndex = 0;mActivePointerId = ev.getPointerId(pointerIndex);}final int y = (int) ev.getY(pointerIndex);initVelocityTrackerIfNotExists();mVelocityTracker.addMovement(ev);if (startScrollIfNeeded((int) ev.getX(pointerIndex), y, null)) {//此处将会拦截事件的传递return true;}break;}break;}

方案

使用NestedScrollChild\NestedScrollParent进行实现
Android 5.0 Lollipop 提供该套功能的API,NestedScrollChild\NestedScrollParent的定义集成到了View,ViewGroup中,V4包中提供向前兼容的API

具体步骤-此处采用集成的API,而未采用直接继承NestedScrollChild/NestedScrollParent

xml文件设置

TextView设置属性:android:nestedScrollingEnable=”true” //允许进行嵌套滚动

代码设置

ListeView中的改写

改写事件拦截条件,默认拦截ACTION_MOVE,不传递给子View

改写实现

/**
* 改写MotionEvent 拦截条件,当子View中有需要请求nested scroll 的时候不进行拦截
*/
override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
var superIntecept: Boolean
val actionMasked = ev.actionMasked

//先不改变ListView的默认实现,在下面的代码中根据情况进行拦截修改
superIntecept = super.onInterceptTouchEvent(ev)

    //当进行移动,且有子View需nested scroll,则一定不拦截when (actionMasked) {MotionEvent.ACTION_MOVE -> {//选择性的拦截-有需要配合nested scroll的子View则不拦截,否则拦截//nestedScrollAxes默认为SCROLL_AXIS_NONE=0,即没有子View调用startNestedScroll向其进行nestedScroll的请求if (nestedScrollAxes and ViewCompat.SCROLL_AXIS_VERTICAL == ViewCompat.SCROLL_AXIS_VERTICAL) {val parent = parentparent?.requestDisallowInterceptTouchEvent(true)return false}}}return superIntecept
}

TextView中的改写

改写onTouchEvent,当刚触摸时立即请求NestedScroll ,即调用startNestedScroll(View中已实现)

具体实现

 override fun onTouchEvent(event: MotionEvent?): Boolean {var action = event!!.actionMaskedwhen (action) {//down之后就开始nested scroll声明,并请求父View不拦截 touch eventMotionEvent.ACTION_DOWN -> {startNestedScroll(ViewCompat.SCROLL_AXIS_VERTICAL)val parent = parentparent?.requestDisallowInterceptTouchEvent(true)}}return super.onTouchEvent(event)
}

附-NestedScrollChild/NestedScrollParent使用介绍相关博客

https://blog.csdn.net/chen930724/article/details/50307193
https://blog.csdn.net/lmj623565791/article/details/52204039
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0822/3342.html
https://segmentfault.com/a/1190000002873657

ListView中让TextView中的文字进行单独滚动相关推荐

  1. 在Textview中获取指定文字位置(兼顾网址链接和emoji表情),并在其附近展示图片

    本文主要讲在Textview中获取指定文字的位置,最后,附带一点文字宽高的测量. 下面,我会给出全部源码.自己建个demo,复制进去就能跑起来. 先强调一下,不建议在ListView中使用.最好是在一 ...

  2. Android TextView中设定个别文字字体显示格式

    Android TextView中设定个别文字字体显示格式 文章分类:移动开发 用Html来格式化字符,例如要实现如下的显示: "这只是一个测试字符串,测试黑体字.斜体字.下划线.红色字的显示." 可 ...

  3. 解决listview中的textview设置了setMovementMethod导致onItemclick无效的问题

    前提: 当listview的item 中有textview,且textview中内容使用了spannablestring,并且需要点击事件(如超链接等),为textview设置了setMovement ...

  4. Android利用SpannableStringBuilder设置TextView中部分文字的颜色...

    原文:android - SpannableString或SpannableStringBuilder以及string.xml文件中的整型和string型代替 背景介绍 在开发应用过程中经常会遇到显示 ...

  5. android 文字倾斜,TextView中文本倾斜

    需求:使TextView中的文字倾斜一定的角度.如下图所示: 如何实现呢?自定义View?这可能是大多数同学产生的第一个想法.的确,自定义View可以实现这个需求.我也找过网上自定义view的方法,大 ...

  6. Android TextView中的文字通过SpannableString,设置不同的颜色,字体,不同文字段的点击事件

    SpannableString其实和String一样,都是一种字符串类型,SpannableString可以直接作为TextView的显示文本,不同的是SpannableString可以通过使用其方法 ...

  7. android 文字添加阴影,android中给TextView或许Button的文字添加阴影效果

    android中给TextView或者Button的文字添加阴影效果 1在代码中添加文字阴影 TextView 有一个方法 /** * Gives the text a shadow of the s ...

  8. Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性

    在Android中,TextView是我们最常用的用来显示文本的控件. 一般情况下,TextView中的文本都是一个样式.那么如何对于TextView中各个部分的文本来设置字体,大小,颜色,样式,以及 ...

  9. android TextView中文字通过SpannableString设置属性

    2019独角兽企业重金招聘Python工程师标准>>> 在Android中,TextView是我们最常用的用来显示文本的控件. 一般情况下,TextView中的文本都是一个样式.那么 ...

最新文章

  1. Java并发编程:线程池
  2. Pci设备驱动:设备枚举
  3. Ubuntu16.04安装ROS时,sudo rosdep init报错,Error: cannot download default sources list from:
  4. 打算自己做app,你们做过吗?
  5. Mybatis实现多表关联多条件查询
  6. ubuntu iptables设置
  7. 面试机试之序列前n项和
  8. 三菱MX Component通信应用
  9. 大漠插件7.2137
  10. 软件测试 vs 软件实施,哪个工作好?
  11. 深度剖析5款主流杀毒软件
  12. PS学习笔记6-选区工具
  13. 未来几年,谁能拯救手机拍照功能?
  14. excel文档损坏打不开该如何修复呢?
  15. 【tensorflow】conv2d/conv3d/maxpool2d/maxpool3d
  16. Seen and Unseen emotional style transfer for voice conversion with a new emotional speech dataset
  17. 硬件部分第三次培训——LCD1602、串口中断、SPI
  18. 栈帧push的汇编解释
  19. python查看汉字的编码_python有关汉字编码问题
  20. 和Sun一起开源(武林外传游戏外挂Java源代码) - 博客版

热门文章

  1. osgi java_使普通的旧Java OSGi兼容
  2. 将Java EE与jOOQ结合使用的初学者指南
  3. Apache Lucene基础教程
  4. JBoss BPM Travel Agency演示与现代BPM数据集成
  5. jvm 参数-server_JVM选项:-client vs -server
  6. Java中不一致的操作会扩大规则
  7. Java中的XSL转换:一种简单的方法
  8. Java EE 7 Batch中传递属性/参数的2种方式
  9. 使不安全变得更加安全
  10. Google Guava BiMaps