【发布时间】:2015-03-30 15:36:04
【问题描述】:
我正在尝试在 Android 中使用一些多点触控。
我在屏幕上有两个 RelativeLayout,我想在其中获取触摸事件。
fooLayout = (RelativeLayout)findViewById(R.id.foo);
fooLayout.setOnTouchListener(onTouchListener);
barLayout = (RelativeLayout)findViewById(R.id.bar);
barLayout.setOnTouchListener(onTouchListener);
...
View.OnTouchListener onTouchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
...
我尝试为每个布局设置一个 OnTouchListener,但这似乎根本不起作用。
我想既然 onTouch 方法获得了一个 View,我就可以通过 view 判断当前触摸事件的来源并保存指针 id。
int pointerId = event.getPointerId(event.getActionIndex());
int action = event.getActionMasked();
switch (action) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
switch (v.getId()) {
case R.id.foo:
fooPointerId = pointerId;
break;
case R.id.bar:
barPointerId = pointerId;
break;
}
这并不像我想象的那样工作。 当我的第一根手指触摸其中一个布局时,我将从该布局中获得正确的 id。但是当我在另一个布局中放下第二根手指时,它会得到我放下第一根手指的布局的 id。
我是不是走错路了?
这是否可行,或者我是否必须将 OnTouchListener 放在顶视图上,并通过事件的 x/y 值确定我触及的布局?
【问题讨论】:
标签: android multi-touch