Thanks for your answer.

I tried what you mentioned and put this on my onTouch method:

this.aRect = new Rect();
this.aBtn.getLocalVisibleRect(aRect);

if(aRect.contains((int)event.getRawX(), (int)event.getRawY())){
        Log.i(TAG, "inA");
        if(action == MotionEvent.ACTION_DOWN){
                updateAState(true);
        }else if(action == MotionEvent.ACTION_UP){
                updateAState(false);
        }
}else ....

but unfortunately, it seems i got wrong infos from
getLocalVisibleRect... Do you have any idea ?

On 29 nov, 10:38, al <achim.leub...@googlemail.com> wrote:
> 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). 
> Seehttp://androidandme.com/2010/03/news/is-multitouch-broken-on-the-nexu...
> 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 <collet...@gmail.com> 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 android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to