日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ListView中让TextView中的文字进行单独滚动

發布時間:2023/12/2 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ListView中让TextView中的文字进行单独滚动 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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中的文字进行单独滚动的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。