滑動沖突小記

這幾天工作中遇到不少滑動沖突問題夫凸,記錄下來衰抑,分享一下匙监。

主要有兩種情況:

  1. ScrollView嵌套ListView

    這種情況的應用場景不多,一般應用的話也多用于展示揽趾,重新計算下ListView的高度就ok

    先上圖:

    頂層布局是一個ScrollView,里面包含一個Edittext台汇,一個Listview,一個Button

    正常情況下ScrollView不會攔截掉ListView的點擊事件,不過當Edittext中的內(nèi)容比較多苟呐,直到屏幕展示不開出現(xiàn)滾動條時痒芝,ScrollView就會攔截掉ListView的點擊事件,使Listview沒辦法正常工作

這種情況下Listview的滑動事件會被攔截掉
    
解決方案:判斷點擊位置牵素,按位置來確定誰來執(zhí)行點擊事件

解決滑動沖突問題一般有兩種解決方式:
外部攔截法和內(nèi)部攔截法

先來看外部攔截法
外部攔截也就是說從父控件中處理是否攔截點擊事件

上代碼

    非完整代碼
    public class MyScrollView extends ScrollView {
        private ListView mListView;
          private float mLeft;
           private float mRight;
           private float mTop;
           private float mBpttom;
           private float mRawX;
           private float mRawY;
        
           @Override
           public boolean onInterceptTouchEvent(MotionEvent ev) {
               switch (ev.getAction()){
                   case MotionEvent.ACTION_DOWN:
                       int[] location = new int[2];
                       mListView.getLocationInWindow(location);
                       mLeft = location[0];
                       mTop = location[1];
                       mRight = mLeft + getWidth();
                       mBpttom = mTop + getHeight();
                       mRawX = ev.getRawX();
                       mRawY = ev.getRawY();
                       if(mRawX>mLeft && mRawX<mRight 
                       && mRawY>mTop && mRawY<mBpttom){
                           return false;
                       }
                       return true;
                   case MotionEvent.ACTION_MOVE:
        
                       break;
                   case MotionEvent.ACTION_UP:
        
                       break;
               }
        
               return super.onInterceptTouchEvent(ev);
           }
        }

簡單說一下吼野,獲取Listview在屏幕中的位置,判斷點擊的坐標是否在Listview中两波,如果是就直接不去攔截點擊事件,讓Listview處理

內(nèi)部攔截法:

在內(nèi)部view中通過requestDisallowInterceptTouchEvent()方法來干涉父控件是否攔截點擊事件

代碼邏輯一樣的就不上代碼了闷哆,重寫Listview的onTouchEvent方法

如果點擊位置在Listview內(nèi)就調(diào)用requestDisallowInterceptTouchEvent(true)

  1. ScrollView嵌套可以橫向滑動的Webview(和Viewpager嵌套Listview)一樣的

這個就比較簡單了腰奋,判斷滑動房間,外部攔截就重寫父空間的onIntercepterTouchEvent 內(nèi)部攔截就重寫view空間的onTouchEvent方法抱怔,直接上代碼

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        switch (ev.getAction()){
            case MotionEvent.ACTION_DOWN:
                mRawX = ev.getRawX();
                mRawY = ev.getRawY();
                break;
            case MotionEvent.ACTION_MOVE:
                float moveX = ev.getRawX();
                float moveY = ev.getRawY();
                float differX = Math.abs(moveX - mRawX);
                float differY = Math.abs(moveY - mRawY);
                if(differX>differY){
                    return false;
                }else
                    return true;
            case MotionEvent.ACTION_UP:

                break;
        }

        return super.onInterceptTouchEvent(ev);
    }

計算移動距離的絕對值劣坊,判斷在哪個方向上移動距離長,然后處理事件

順便提一下屈留,Webview的loadData方法局冰,系統(tǒng)提供的方法有時候也會出現(xiàn)亂碼,可以這么處理

    mWebView.getSettings().setDefaultTextEncodingName("UTF-8");
    mWebView.loadData(mHtmlStr, "text/html; charset=UTF-8", null);
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末灌危,一起剝皮案震驚了整個濱河市康二,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌勇蝙,老刑警劉巖沫勿,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異味混,居然都是意外死亡产雹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門翁锡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔓挖,“玉大人,你說我怎么就攤上這事馆衔∥僚校” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵角溃,是天一觀的道長荒适。 經(jīng)常有香客問我,道長开镣,這世上最難降的妖魔是什么刀诬? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上陕壹,老公的妹妹穿的比我還像新娘质欲。我一直安慰自己,他們只是感情好糠馆,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布嘶伟。 她就那樣靜靜地躺著,像睡著了一般又碌。 火紅的嫁衣襯著肌膚如雪九昧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天毕匀,我揣著相機與錄音铸鹰,去河邊找鬼。 笑死皂岔,一個胖子當著我的面吹牛蹋笼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播躁垛,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼剖毯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了教馆?” 一聲冷哼從身側響起逊谋,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎土铺,沒想到半個月后涣狗,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡舒憾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年镀钓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片镀迂。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡丁溅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出探遵,到底是詐尸還是另有隱情窟赏,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布箱季,位于F島的核電站涯穷,受9級特大地震影響,放射性物質發(fā)生泄漏藏雏。R本人自食惡果不足惜拷况,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赚瘦,春花似錦粟誓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至揽咕,卻和暖如春悲酷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背亲善。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工设易, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逗爹。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像嚎于,于是被迫代替她去往敵國和親掘而。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容