簡體   English   中英

Android 多點觸控 View.OnTouchListener

[英]Android multitouch View.OnTouchListener

我試圖在 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 值找出我觸摸的布局?

我認為您應該擴展相對布局並在那里實現 onTouchEvent(MotionEvent ev) 以找出哪些指針正在接觸哪些子視圖(將 foo 和 bar 放在實現 onTouchEvent 的主要相對布局/視圖組中)。

IMO onTouch(View v, MotionEvent ev) 只允許您一次注冊一個指針,因此使用這種方法可能無法實現。 鏈接可能會有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM