安卓滑動衝突的理解和一些解決思路

2021-07-13 05:56:16 字數 2370 閱讀 3231

package com.example.testview;

import android.content.context;

import android.util.attributeset;

import android.util.log;

import android.view.motionevent;

import android.widget.button;

public class custombutton extends button

*/public custombutton(context context, attributeset attrs)

int mlastx;

int mlasty;

@override

public boolean ontouchevent(motionevent event)

mlastx = x;

mlasty = y;

// getparent().requestdisallowintercepttouchevent(false);

return true;

}@override

protected void onlayout(boolean changed, int left, int top, int right,

int bottom)

@override

protected void onmeasure(int widthmeasurespec, int heightmeasurespec)

@override

public boolean dispatchtouchevent(motionevent event)

}

package com.example.testview;

import android.content.context;

import android.util.attributeset;

import android.util.log;

import android.view.motionevent;

import android.widget.framelayout;

public class customviewgroup extends framelayout

/*** 外部攔截法和內部攔截法, 父和子

*/@override

public boolean dispatchtouchevent(motionevent ev)

//只有viewgroup特有的事件,就只執行一次,down事件執行

@override

public boolean onintercepttouchevent(motionevent ev)

else

case motionevent.action_up:

return false;

default:

break;

}// todo auto-generated method stub

log.e("testview","父容器攔截");

return false; //如果設定攔截,除了down,其他都是父類處理

}@override

public boolean ontouchevent(motionevent event)

/* log.e("testview","父容器處理");*/

return false;

}}

首先我們自定義2個類,乙個是子view,另乙個是父view, 子可能是個listview,父可能是乙個scrollview.

滑動衝突分多種,有可能是同方向的滑動,也可能是水平和豎直方向的。那為什麼會滑動衝突呢,關鍵是2個類都接到了同樣的事件,解決的思路就是同一時刻只能有乙個view處理motionevent事件,解決方法由2種

外部攔截法和內部攔截法

1.外部,故名思議是在父view的onintercepttouchevent處理.

它針對3中不同的事件做處理,

對於down, 返回false,除非你希望那個讓父view完全處理這3個事件。由於這裡是false.所以同一事件序列的其他2個事件父view肯定能執行到(除非設定乙個tag),

對於move,看業務情況,返回true代表父類來消耗,false則表示子類,

對於up,返回false.除非你想讓子view的click這種都無法用。

2.內部,重寫子元素的dispatchtouchevent方法。預設情況下父view可以寫成除了down,其他都攔截,然後在子view裡用parent,requestdisallowintercepttouchevent()

安卓遇到的一些問題

1.frament 使用靜態的時候在布局中必須給fragment加id 否則報錯 2.在使用 bridgewebview時候安卓js雙方都得初始化 無論怎樣形式的互動,js 必須要初始化jsbridge bridge.init function message,responsecallback co...

安卓一些硬體相關的解釋

1 解釋一下線刷和雙清 2 一些英文解釋 主介面reboot system now 重啟手機 刷機完畢選擇此項就能重新啟動系統 wipe data factory reset 清除使用者資料並恢復出廠設定 刷機前必須執行的選項 wipe cache partition 清除系統快取 刷機前執行 系統...

安卓開發使用Bmob遇到的一些問題及解決辦法

最近在做安卓的大作業,在資料庫方面遇到了很多困難,最後決定使用bmob雲資料庫作為後端。在按照官方文件將bmob sdk配置到android studio和初始化bmob時,出現了很多問題,下面記錄了我在使用bmob時的問題和一些解決方案 android studio版本為3.6,專案使用的andr...