当用户在视图上移动手指时,我们如何获取在 Android 中的 onTouchListener 中触摸的视图的 id?
Posted
技术标签:
【中文标题】当用户在视图上移动手指时,我们如何获取在 Android 中的 onTouchListener 中触摸的视图的 id?【英文标题】:How can we get the id of the view that was touched in onTouchListener in Android when the user is moving the finger on the views? 【发布时间】:2015-02-18 07:37:20 【问题描述】:我无法获得手指移动的第二个视图 ID。我试图在触摸监听器中打印指针使用以下内容的 id。
case MotionEvent.ACTION_MOVE:
int pointerCount = event.getPointerCount();
for (int i = 0; i < pointerCount; i++)
//System.out.println(v.getId());
System.out.println(event.getX() + "---" + event.getY());
System.out.println(v.getId());
break;
这里的事件是我的 MotionEvent,v 是视图。我能够获得触摸的 X 和 Y 位置,但我想知道哪个视图被越过。我只得到一直按下的第一个视图的视图 ID。
我查看了以下链接以获得一些帮助,但无法获得任何相关详细信息。
How do I get the ID of the moving finger
retrieving the id of the view that was clicked
how to get the particular sub view id from the view in android?
有人可以帮我解决这个问题吗?
【问题讨论】:
【参考方案1】:如果您在视图上设置监听器,您将始终在事件中获取该视图。例如
View one = findById(R.id.one);
one.setOnTouchListener(new OnTouchListener()
public void onClick(View v)
// v == one
)
但是如果你将你的 Activity 声明为触摸监听器:
Activity implements OnTouchListener
然后你在根视图上设置监听器:
View rootView = findViewById(R.id.rootView);
rootView.setOnTouchListener(this);
并覆盖 onTouch:
@Override
public boolean onTouch(View v, MotionEvent e)
// here v is what you look for
我认为你应该检查你是否在根视图而不是一个特定视图上设置 onTouchListener
【讨论】:
嘿@Javier,我试过了,但没有帮助。我有一个相对布局,里面有几个相互重叠的图像按钮。当我按下按钮时,我可以检测到触摸。但问题在于将手指拖动到第二个按钮,一旦我触摸到我移动到的另一个按钮,我就无法检测到第二个视图,我得到的 id 仍然是第一个视图。 你能发布一下你是如何设置触摸监听器的吗? 我已经实现了如下监听器:public class MyClass implements OnTouchListener, OnLongClickListener @Override public boolean onTouch(View v, MotionEvent event) //Here I have used switch case to identify the id of the button that was pressed
好的,但是你如何设置触摸监听器?类似View rootView = findViewById(R.id.rootView); rootView.setOnTouchListener(this);
以上是关于当用户在视图上移动手指时,我们如何获取在 Android 中的 onTouchListener 中触摸的视图的 id?的主要内容,如果未能解决你的问题,请参考以下文章