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

Reply via email to