1. 程式人生 > >解決TextView多行滑動與NestedScrollView等,滑動衝突,我的解決方案

解決TextView多行滑動與NestedScrollView等,滑動衝突,我的解決方案

1.首先要明白,什麼時候回TextView處理滑動,什麼時候不處理滑動

1.1往上滑動,到達文字底部就不要再處理了,如果往上滑動不在底部則繼續TextView滑動

1.2往下滑動,到達文字頂部就不要再處理了,如果往下滑動不在頂部則繼續TextView滑動

關鍵計算地方:

      1.當前是上滑動還是下滑動(相對於螢幕) ,使用ev.getRawY()獲得當前滑動位置在螢幕哪個地方

      2.  計算文字客滑動到哪裡即可停止, (行高*總文字行數)- (行高 * 最多顯示行數)   int sum = getLineHeight() * getLineCount() - getLineHeight() * getMaxLines();

廢話不說了,上程式碼,歡迎參考使用,轉載請說明出處,原創不易且行且珍惜,謝謝支援

import android.content.Context;
import android.text.method.ScrollingMovementMethod;
import android.util.AttributeSet;
import android.view.MotionEvent;

import com.suxuantech.erpsys.utils.L;

/**
 * ......................我佛慈悲....................
 * ......................_oo0oo_.....................
 * .....................o8888888o....................
 * .....................88" . "88....................
 * .....................(| -_- |)....................
 * .....................0\  =  /0....................
 * ...................___/`---'\___..................
 * ..................' \\|     |// '.................
 * ................./ \\|||  :  |||// \..............
 * .............../ _||||| -卍-|||||- \..............
 * ..............|   | \\\  -  /// |   |.............
 * ..............| \_|  ''\---/''  |_/ |.............
 * ..............\  .-\__  '-'  ___/-. /.............
 * ............___'. .'  /--.--\  `. .'___...........
 * .........."" '<  `.___\_<|>_/___.' >' ""..........
 * ........| | :  `- \`.;`\ _ /`;.`/ - ` : | |.......
 * ........\  \ `_.   \_ __\ /__ _/   .-` /  /.......
 * ....=====`-.____`.___ \_____/___.-`___.-'=====....
 * ......................`=---='.....................
 * ..................佛祖開光 ,永無BUG................
 *
 * @author Created by 李站旗 on 2018/3/3 0003 15:25 .
 *         QQ:1032992210
 *         E-mail:
[email protected]
* @Description: 可滑動的TextView, 並且解決了與 ScrollView等的滑動衝突
*/ public class ScrollTextView extends android.support.v7.widget.AppCompatTextView { public ScrollTextView(Context context) { super(context); setMovementMethod(ScrollingMovementMethod.getInstance()); }
public ScrollTextView(Context context, AttributeSet attrs) { super(context, attrs); setMovementMethod(ScrollingMovementMethod.getInstance()); } public ScrollTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setMovementMethod(ScrollingMovementMethod.getInstance()); } float lastScrollY = 0; @Override public boolean onTouchEvent(MotionEvent ev) { if (getLineCount() > getMaxLines()) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { lastScrollY = ev.getRawY(); L.d("lldd","down:"+lastScrollY); } else if (ev.getAction() == MotionEvent.ACTION_MOVE) { //滑動到頭並且還在繼續上滑動,或者滑動到底部就不要再攔截了(有誤差) int sum = getLineHeight() * getLineCount() - getLineHeight() * getMaxLines(); //計算上次與本次差 float diff = lastScrollY - ev.getRawY(); if (diff>0){//下滑動並且到達了底部也不要處理了 //底部這裡用abs的原因是,因為計算sum的時候有些誤差 if (Math.abs(sum - getScrollY())<5) { getParent().requestDisallowInterceptTouchEvent(false); } else { getParent().requestDisallowInterceptTouchEvent(true); } }else if (diff<0){//上滑動 if (getScrollY() == 0) {//上滑動並且已經到達了頂部就不要在處理了 getParent().requestDisallowInterceptTouchEvent(false); } else { getParent().requestDisallowInterceptTouchEvent(true); } } lastScrollY = ev.getRawY(); } else { getParent().requestDisallowInterceptTouchEvent(false); } } return super.onTouchEvent(ev); } }

相關推薦

解決TextView滑動NestedScrollView,滑動沖突,解決方案

rip max 解決 底部 e-mail ast sts end 謝謝 1.首先要明白,什麽時候回TextView處理滑動,什麽時候不處理滑動 1.1往上滑動,到達文本底部就不要再處理了,如果往上滑動不在底部則繼續TextView滑動 1.2往下滑動,到達文本頂部就不要再處

解決TextView滑動NestedScrollView,滑動衝突,解決方案

1.首先要明白,什麼時候回TextView處理滑動,什麼時候不處理滑動 1.1往上滑動,到達文字底部就不要再處理了,如果往上滑動不在底部則繼續TextView滑動 1.2往下滑動,到達文字頂部就不要再處理了,如果往下滑動不在頂部則繼續TextView滑動 關鍵計算地方:   

ScrollViewListView合用(TextView顯示時計算不正確)的問題解決

最近測試的時候發現在使用SrollView 中使用兩個listView,如果使用特大字型的話,比較長的LISTVIEW多行顯示會有問題。在網上搜索了一下,大概有兩種解決方案,一種是重寫ListView的onMeasure方法,一種是重寫TextView的onMeasure方

android TextView文字(超過3)使用ellipsize屬性無效問題的解決方法

<TextView android:id="@+id/businesscardsingle_content_abstract" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layou

android TextView文字(超過3)使用ellipsize="end"屬性無效問題的解決方法

<TextView  android:id="@+id/desc" android:layout_width="match_parent" android:layout_height="130px" android:lineSpacingExtra="2px" android:textColor="@

vim註釋取消

== 相關配置 問題 eas gpo 固定 如果 點擊 http 神操作 在vim中編寫代碼,常常會遇到多行註釋和取消註釋的情況,在VS中我們可以用默認的快捷鍵或者在設置中自定義快捷鍵來解決這個問題。 vim既然這麽強大,必然也是有快捷鍵來完成的。下面給

linux下vim註釋取消

轉載部落格:https://blog.csdn.net/summy_j/article/details/75104748 神操作 在vim中編寫程式碼,常常會遇到多行註釋和取消註釋的情況,在VS中我們可以用預設的快

一個TextView 文字省略

前提:公司需求,在圖中右側的tip中,如果資料過長,就在尾部省略。返回的資料是 ("區域性多雲,不利於健康") 原本是一個TextView,雖然用兩個textview最容易實現,但是感覺太low了吧。 於是乎,學了這麼久的自定義View 終於派上用場了。 哈哈哈哈嗝

單行文字、文字溢位時省略號表示的多種解決方式;調整字元間距;段落首字母大寫縮排效果;

文字溢位省略號表示的實現效果: 1、解決單行文字溢位: 解決方式: 在文字容器樣式中新增 overflow:hidden; text-overflow:ellipsis; white-space: nowrap;  其中overflow:hidden;是在超出元素寬

TextView AutoLink, ClikSpan 長按事件衝突解決

  前言    首先,我們先來複習一下 autoLink 和 ClickableSpan 是幹什麼用的。    autoLink 當中有五個屬性值:分別是 phone、email、map、web、all 和 none,前四個分別是自動識別電話號碼、郵箱、地址和網址,而第五個是識別前四個的全部,none 是不識

View — TextView文字後新增可點選的固定文字

一、概述 需求如下:在一個多行文字最後新增一個可點選的文字。 二、程式碼 佈局檔案 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="ht

android中TextView文字滾動的實現及單行走馬燈實現

TextView當設定行數是單行的時候可以實現走馬燈效果,但有時候多行的時候如何實現文字滾動呢,一般方法: NO.1setMovementMethod方法 textView賦值前,呼叫如下方法即可實

Linux 註釋刪除

1.多行註釋:   1. 首先按esc進入命令列模式下,按下Ctrl + v,進入列(也叫區塊)模式;   2. 在行首使用上下鍵選擇需要註釋的多行;   3. 按下鍵盤(大寫)“I”鍵,進入插入模式;   4. 然後輸入註釋符(“//”、“#

解決EditText編輯時在ScrollView中無法滾動的問題

這是一件很鬱悶的事,一個傻x給我找事,說我做的應用不好用,以為自己是傻逼產品經理嗎?管的事真不少。各種問題,各種向老大反應,連伺服器的端的問題都來找我,以為我是救世主啊,吐槽完了轉入正題。

vim刪除註釋新增多註釋

刪除多行註釋 按 Esc 進入命令列模式,按下Ctrl + v, 進入列模式 選定將要取消註釋的多行 按 “d” 即可 新增多行註釋 首先按Esc進入命令列模式下,按下 Ctrl + v

Android 動態生成 radiobutton 解決 radiogroup 顯示的問題 單選

專案有需求,然後看了下網上的方法,好多都太麻煩了,而且也不怎麼靠譜。。先上效果圖 先上佈局的程式碼 <RadioGroup android:id="@+i

嘗試解決Java字串的編輯問題

很多時候,我們都需要在程式碼中書寫大段或者需要轉義的字串,常見的情形有: SQL, 正則表示式, XML/HTML, 引用一大段文字 等等.       不幸的是, 到目前為止, Java都沒有

TextView 文字,字串自適應

多行文字,字串自適應 過長的用省略號替代和字型大小控制,示例程式碼如下 tv_auto_settings_title.postDelayed(new Runnable() {

vim 刪除複製

VI中的多行刪除與複製 法一: 單行刪除,:1(待刪除行)d 多行刪除 ,:1,10d 法二: 游標所在行,dd 游標所在行以下的N行,Ndd 方法1: 游標放到第6行, 輸入:2yy 游標放到第9行, 輸入:p 此方法適合複製少量行文字的情況,複製第6行(包括)下面的2行

Textview時,最後結尾處顯示省略號

一般情況寫,在設定Textview最大行數和結尾處顯示省略號以後,預設是會在結尾處顯示省略號的。這裡不用系統預設的,而是自己拼省略號,以滿足某些實際需求。文章最後附onWindowFocusChanged()生命週期。 效果圖: 程式碼實現(2種方式):