Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android multitouch View.OnTouchListener_Android_Multi Touch - Fatal编程技术网

Android multitouch View.OnTouchListener

Android multitouch View.OnTouchListener,android,multi-touch,Android,Multi Touch,我试着在Android上玩一些多点触控 我在屏幕上有两个RelativeLayout,我想在那里获得触摸事件 fooLayout = (RelativeLayout)findViewById(R.id.foo); fooLayout.setOnTouchListener(onTouchListener); barLayout = (RelativeLayout)findViewById(R.id.bar); barLayout.setOnTouchListener(onTouchListene

我试着在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方法获得了一个视图,我就可以通过视图识别当前的触摸事件,并保存指针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值计算出我所接触的布局?

我认为您应该扩展相对布局,并在那里实现onTouchEventMotionEvent ev,以计算出哪些指针正在接触主视图中的哪个子视图SPUT foo和bar实现onTouchEvent的相对布局/视图组


在TouchView v中,MotionEvent ev一次只允许注册一个指针,因此可能无法使用这种方法。这可能会有所帮助

我做了一个快速测试,在覆盖onTouchEvent时生成了两个自定义视图。如果我触摸并按住一个视图,然后触摸另一个视图,则事件将不会发送。到目前为止,我看到的所有例子,包括链接,似乎都是一个视图中的多点触控。是否没有办法使其适用于多个视图?请尝试扩展一个视图组(如相对布局),然后在XML中将其作为根视图,并在其中添加视图。在根目录上实现onTouchEvent。我认为这样所有子视图都将暴露于多个指针。因此,我必须使用根中事件的x/y值来确定触摸位于哪个视图中?是的,您甚至可以通过指针ID知道哪个指针位于哪个视图上OK,这就是我害怕的。我希望能从中找到答案。谢谢你的帮助。