Tuesday, May 11, 2010

Re: [android-developers] Re: Multi Touch - Does anyone know how it works

Do you guys know if this is why the bug that many game developers have come across occurs.. where trying to simulate two joysticks on the screen wont work due to wrong touch info being consumed? I forget the details, but I think it had to do with if you touch one point, and while doing so, touch another..that works fine.. but if you release point 1, then touch again, it some how reads as point 2, instead of point 1? Was this issue resolved due to what you said above niko.. that multi-touch only works within one view? I would have thought a game would use a single view as well tho.

On Tue, May 11, 2010 at 4:49 AM, niko20 <nikolatesla20@yahoo.com> wrote:
No you cant just add onTouch to each button. The way multitouch is
designed it will only work inside one view. You will need to draw
everything yourself  - you cant use multitouch over multiple view
objects. It only works inside one View. Create a big view covering the
screen, draw the contents yourself, and you can then get multitouch
positions accurately.

I know it sucks, right? I complained about it originally too but they
didnt agree with me...


-niko

On May 11, 6:31 am, momojo <jason.kah...@gmail.com> wrote:
> Ok So I've gone through several tutorials on the web. I understand how
> the pointerCount works , I can get two points, etc, etc. My problem is
> I am trying to implement a game control, i.e. dpad and some buttons.
> The "buttons" are actually TextView objects with images. I Implement
> OnTouchListener Interface. my onTouch Method gets called when it
> should. The problem is if I have finger #1 on button a then press
> finger #2 on button b my OnTouch() method is called with the view of
> button a, not button b. Fine then I will just get the bounds of the
> buttons and see if they intersect with the points clicked. No luck, It
> seems as though the points that come in the MotionEvent are not
> relative to 0,0 , but to some other coordinate system. I would have
> thought all points were relative to upper left of screen. Here is my
> code.
>
> protected void onFinishInflate()
> {
>     dpadView = findViewById(R.id.dpad);
>     dpadView.setOnTouchListener(this);
>     aButton = (TextView)findViewById(R.id.a_button);
>     aButton.setOnTouchListener(this);
>     bButton = (TextView)findViewById(R.id.b_button);
>     bButton.setOnTouchListener(this);
>
> }
>
> public boolean onTouch(View v, MotionEvent event)
> {
>             // Dump touch event to log
>             // V.getId() is always equal to what the 1st finger is
> pressed on!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
>             Log.d("Controller","id:" +v.getId());
>
>             dumpEvent(event);
>             if(buttonHit(event,v))
>             {
>
>             }
>             return true; // indicate event was handled
>          }
>
> private boolean buttonHit(MotionEvent event, View view)
>     {
>         for(int i=0;i<event.getPointerCount();i++)
>         {
>             int pointerId = event.getPointerId(i);
>             int pointerX = (int)event.getX(pointerId);
>             int pointerY = (int)event.getY(pointerId);
>
>             Rect rect = new Rect();
>
>             view.getGlobalVisibleRect(rect);
>             //view.getGlobalVisibleRect(rect);
>             view.setBackgroundColor(Color.BLACK);
>
>             Log.d("Controller", "pointer (" + pointerX + "," +
> pointerY + ")" );
>             Log.d("Controller", "bounds [(" + rect.left + "," +
> rect.top + ")-(" +  rect.right + "," +
>                     rect.bottom + ")]");
>             if( rect.contains(pointerX, pointerY))
>             {
>                 view.setBackgroundColor(Color.CYAN);
>
>                 Log.d("Controller","Hit button");
>
> view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
>                 return true;
>             }
>         }
>         return false;
>
>     }
>
> I saw some posts from Romain Guy on Stack Overflow that said you can
> just add on OnTouchListener to each "Button" but when I do so I do not
> get a second event. Has anyone done this? Is there an example
> somewhere?
>
> --
> 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+unsubscribe@googlegroups.com
> For more options, visit this group athttp://groups.google.com/group/android-developers?hl=en

--
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+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

--
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+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

No comments:

Post a Comment