【发布时间】:2013-08-05 12:19:48
【问题描述】:
我在问这个相当复杂的问题,希望我能从你那里得到一个想法。
事情是这样的:我创建了一个自定义列表视图类,上面的那个:
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添加到您的项目视图中? -
试过了,不行...
-
你能发布你的尝试代码吗?
-
folder_list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { System.out.println("TOUCHED!"); } });但是没有打印出来。 folder_list 是一个 FolderListView 项目对象,不为空。 -
请注意:stackoverflow.com/questions/2220547/…。另外,我们可以看看你正在使用的 xml 布局吗?
标签: android android-listview touch-event android-event