2011-07-01 115 views
0

我已經創建了這個小程序來向用戶顯示屏幕上的手指,但問題是來自其他手指的X,Y值沒有被修改。我究竟做錯了什麼?Android觸摸屏監聽器問題

謝謝!

public class TestandoActivity extends Activity implements OnTouchListener { 
/** Called when the activity is first created. */ 
private TextView txtV; 
private TextView txtV2; 
private int nf = 0; 
private Map<Integer, String> info; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    info = new HashMap<Integer, String>(); 

    setContentView(R.layout.main); 
    this.txtV = (TextView)this.findViewById(R.id.textview); 
    this.txtV2 = (TextView)this.findViewById(R.id.textview2); 
    this.txtV.setOnTouchListener(this); 
} 

public boolean onTouch(View v, MotionEvent event) {  
    int actionCode = event.getAction() & MotionEvent.ACTION_MASK; 
    int pid = event.getAction() >> MotionEvent.ACTION_POINTER_ID_SHIFT; 

    info.put(pid, pid + ": X=" + event.getX() + " Y=" + event.getY() + " pressure=" + event.getPressure() + " size=" + event.getSize()); 

    if (actionCode == MotionEvent.ACTION_POINTER_UP || actionCode == MotionEvent.ACTION_UP) 
     info.remove(pid); 

    String total = ""; 
    for (Map.Entry<Integer, String> e : this.info.entrySet()) { 
     total += e.getValue() + "\n"; 
    } 

    this.txtV2.setText(total); 


    return true; 
} 
} 

回答

1

此問題的主要原因是您使用getX()和getY()方法。

getX()方法總是返回第一個指針的x位置,getY()返回它的y位置。

如果你想獲得其他手指X,Y值在屏幕上,你必須使用以下方法:

getX(int pointerId) //get #pointerId pointer's x value 
getY(int pointerId) //get #pointerId pointer's y value 

其他手指pointerId可以通過你使用的方式找到:

int pid = event.getAction() >> MotionEvent.ACTION_POINTER_ID_SHIFT; 

或者使用指針指數來獲得ID:

getPointerId (int pointerIndex) //pointerIndex is from 0 to getPointerCount()-1 

我希望這將是對你有所幫助。 :)