我在問這個相當複雜的問題,希望我能從你那裏得到一個想法。當使用onInterceptTouchEvent()時檢測觸摸事件
這裏的事情:我創建了一個自定義列表視圖類,上面的一個:
public class FolderListView extends ListView {
private float xDistance, yDistance, lastX, lastY;
private int folder_index;
private FolderViewInterface openFolder;
// private boolean swiping = false;
// If built programmatically
public FolderListView(Context context) {
super(context);
}
// This example uses this method since being built from XML
public FolderListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
// Build from XML layout
public FolderListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_UP:
// if (swiping == false) {
//if (xDistance > yDistance)
// return false;
// else {
folder_index = pointToPosition((int) lastX, (int) lastY);
// Toast.makeText(getContext(),
// "You pressed a folder with index: " + folder_index,
// Toast.LENGTH_SHORT).show();
// }
HomeScreenFragment f = new HomeScreenFragment();
openFolder = (FolderViewInterface) f;
openFolder.onFolderOpened(folder_index);
// }
// swiping = false;
break;
case MotionEvent.ACTION_DOWN:
// swiping = false;
xDistance = yDistance = 0f;
lastX = ev.getX();
lastY = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
// swiping = true;
final float curX = ev.getX();
final float curY = ev.getY();
xDistance += Math.abs(curX - lastX);
yDistance += Math.abs(curY - lastY);
lastX = curX;
lastY = curY;
if (xDistance > yDistance)
return false;
}
return super.onInterceptTouchEvent(ev);
}
}
的事情是我在這裏尋找到正確檢測觸摸事件。 我想要觸摸打開其他片段,但現在片段在觸摸和滑動時都會打開。
我已經使用了onInterceptTouchEvent,因爲我的列表中的元素是viewpagers,並且它們在滾動時行爲不正常。
我需要某種邏輯在這裏檢測到刷卡,不執行此部分:
HomeScreenFragment f = new HomeScreenFragment();
openFolder = (FolderViewInterface) f;
openFolder.onFolderOpened(folder_index);
只有當事件是觸摸事件,而不是一個刷卡的。
任何類型的建議/幫助非常感謝,請讓我知道如果您需要任何更多的細節。
謝謝!
爲什麼你不只是添加'onClickListener'到您的項目有何看法? – Desert
試過,沒有工作... –
你可以發佈你的嘗試代碼? – Desert