There are some basic "principles" in android regarding multi-touch that you should be aware of. Especially, wrt. your code these two come to my mind: 1) If the first "finger" touches view A, all other touches will be directed to view A as long as the first finger is still there, even if the subsequent touches touch another view. I think, the reason to implement it this way, was to ease implementation of gestures like pinch&zoom. 2) The action codes you will typically see during a multitouch "gesture" are: - ACTION_DOWN: this signals that the first finger touches the display - ACTION_POINTER_DOWN: the second, third, ... finger touches the display - ACTION_POINTER_UP: a finger was lifted, but there are still fingers on the display - ACTION_UP: the last finger was lifted Of course, you may also see ACTION_MOVE events in between and after a POINTER_UP, another POINTER_DOWN event may occur, if another finger touches the display before all fingers are lifted, etc.
Regarding your code: 1) means that you have to capture the events at a view that is an ancestor to all the buttons that should be part of the multi-touch. I.e. put both buttons into a common parent and listen for the touch events at the parent. You can then analyze the event to determine the coordinates of the new touch point and use the coordinates to determine the touched button. Be aware though, that some devices have terrible hardware "limitations" (i.e. problems). See http://androidandme.com/2010/03/news/is-multitouch-broken-on-the-nexus-one/ for an example. I.e. the code has to take some strange behaviour into account. Regarding analyzing the event, don't confuse pointer id's with pointer indizes. That's a problem that can be seen in various code examples online. 2) means, you have to listen for ACTION_POINTER_DOWN and ACTION_POINTER_UP (as well as ACTION_CANCEL) too. On 28 Nov., 15:13, ColletJb <[email protected]> wrote: > Hi, > > I'm facing an very simple (and stupid) issue and I hope someone will > be able to provide me an explanation... > > I'm trying to develop an Activity with 2 buttons (let's call them btnA > and btnB), they are in my xml layout. My goal is to be able to handle > click on both button (easy), even on the same time with multi-touch. > > First, I retrieve them on the onCreate method and I set them the > OnTouchListener to this (my Activity implements OnTouchListener): > > @Override > public void onCreate(Bundle savedInstanceState) { > super.onCreate(savedInstanceState); > setContentView(R.layout.main); > > this.btnA = (ImageButton) this.findViewById(R.id.btnA); > this.btnB = (ImageButton) this.findViewById(R.id.btnB); > > this.btnA.setOnTouchListener(this); > this.btnB.setOnTouchListener(this); > } > > I did override the onTouch method that way : > @Override > public boolean onTouch(View v, MotionEvent event) { > int action = event.getAction() & MotionEvent.ACTION_MASK; > if(v.equals((View)this.btnA)){ > if(action == MotionEvent.ACTION_DOWN){ > updateAState(true); > }else if(action == MotionEvent.ACTION_UP){ > updateAState(false); > } > }else if(v.equals((View)this.btnB)){ > if(action == MotionEvent.ACTION_DOWN){ > updateBState(true); > }else if(action == MotionEvent.ACTION_UP){ > updateBState(false); > } > } > return true; > } > > With this implementation, I can capture the DOWN and UP event on both > buttons, but not with multi-touch (ex: btnA DOWN, btnB DOWN, btnB UP, > btnB DOWN, btnB UP, btnA UP). > > Who can tell me how I can fix my onTouch method to support such > feature ? > > Thanks a lot. -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

