Multi-touch even with one pointer co-ordinate capability on the phone
<p>This is my onTouchEvent() Method.  While one touch is pressed, a second will not make a change.  If the first is lifted and pressed down again, that third down will make a change and two buttons will be pressed.  The second up event wont work even though I'm using ACTION_POINTER_UP.  BTW I am making my program compatible with Android builds lower than 8 so I cant use getActionMasked() or Index.</p>

<p>Update:  After testing it out for a bit, i found a great solution for myself.  My phone only supports the coordinates for one pointer (0).  However, by adding <code>event.setAction(MotionEvent.ACTION_UP);</code> to the end of my onTouchEvent method, I successfully simulated proper multi-touch!  Here's my updated method:</p>

<pre><code>public boolean onTouchEvent(MotionEvent event)
{
    int eventIndex = event.getAction() &gt;&gt; MotionEvent.ACTION_POINTER_ID_SHIFT;
    int actionCode = event.getAction() &amp; MotionEvent.ACTION_MASK;

        //PUSH DOWN ACTIONS
        //push down on onePlayer
    if ((actionCode == MotionEvent.ACTION_DOWN || actionCode == MotionEvent.ACTION_POINTER_DOWN || actionCode == MotionEvent.ACTION_MOVE)&amp;&amp;
            ((int) event.getX(eventIndex) &gt;= onePlayerPosx) &amp;&amp; ((int) event.getX(eventIndex) &lt;= onePlayerPosx + maxx/3) &amp;&amp;
            ((int) event.getY(eventIndex) &gt;= onePlayerPosy) &amp;&amp; ((int) event.getY(eventIndex) &lt;= onePlayerPosy + maxy/5))
    {
        onePlayerToggle = true;
    }
        //push down twoPlayer
    else if ((actionCode == MotionEvent.ACTION_DOWN || actionCode == MotionEvent.ACTION_POINTER_DOWN || actionCode == MotionEvent.ACTION_MOVE)&amp;&amp;
        ((int) event.getX(eventIndex) &gt;= twoPlayerPosx) &amp;&amp; ((int) event.getX(eventIndex) &lt;= twoPlayerPosx + maxx/3) &amp;&amp;
        ((int) event.getY(eventIndex) &gt;= twoPlayerPosy) &amp;&amp; ((int) event.getY(eventIndex) &lt;= twoPlayerPosy + maxy/5))
    {
        twoPlayerToggle = true;
    }
        //push down help
    else if ((actionCode == MotionEvent.ACTION_DOWN || actionCode == MotionEvent.ACTION_POINTER_DOWN || actionCode == MotionEvent.ACTION_MOVE)&amp;&amp;
            ((int) event.getX(eventIndex) &gt;= helpPosx) &amp;&amp; ((int) event.getX(eventIndex) &lt;= helpPosx + maxx/3) &amp;&amp;
            ((int) event.getY(eventIndex) &gt;= helpPosy) &amp;&amp; ((int) event.getY(eventIndex) &lt;= helpPosy + maxy/5))
    {
        helpToggle = true;
    }
        //push down exit
    else if ((actionCode == MotionEvent.ACTION_DOWN || actionCode == MotionEvent.ACTION_POINTER_DOWN || actionCode == MotionEvent.ACTION_MOVE)&amp;&amp;
            ((int) event.getX(eventIndex) &gt;= exitPosx) &amp;&amp; ((int) event.getX(eventIndex) &lt;= exitPosx + maxx/3) &amp;&amp;
            ((int) event.getY(eventIndex) &gt;= exitPosy) &amp;&amp; ((int) event.getY(eventIndex) &lt;= exitPosy + maxy/5))
    {
        exitToggle = true;
    }
    else if((actionCode == MotionEvent.ACTION_DOWN || actionCode == MotionEvent.ACTION_POINTER_DOWN || actionCode == MotionEvent.ACTION_MOVE))
    {
        onePlayerToggle = false;
        twoPlayerToggle = false;
        helpToggle = false;
        exitToggle = false;
    }

        //LIFT ACTIONS
        //lift finger on two player
    if ((actionCode == MotionEvent.ACTION_UP || actionCode == MotionEvent.ACTION_POINTER_UP) &amp;&amp;
            ((int) event.getX(eventIndex) &gt;= twoPlayerPosx) &amp;&amp; ((int) event.getX(eventIndex) &lt;= twoPlayerPosx + maxx/3) &amp;&amp;
            ((int) event.getY(eventIndex) &gt;= twoPlayerPosy) &amp;&amp; ((int) event.getY(eventIndex) &lt;= twoPlayerPosy + maxy/5))
    {
        upSwitch = false;
        Intent intent = new Intent(contextTrack, TwoPlayerSelectActivity.class);
        contextTrack.startActivity(intent);
    }
        //lift finger on exit
    else if ((actionCode == MotionEvent.ACTION_UP || actionCode == MotionEvent.ACTION_POINTER_UP) &amp;&amp;
            ((int) event.getX(eventIndex) &gt;= exitPosx) &amp;&amp; ((int) event.getX(eventIndex) &lt;= exitPosx + maxx/3) &amp;&amp;
            ((int) event.getY(eventIndex) &gt;= exitPosy) &amp;&amp; ((int) event.getY(eventIndex) &lt;= exitPosy + maxy/5))
    {
        upSwitch = false;
        System.runFinalizersOnExit(true);
        System.exit(0);
    }
    else if(actionCode == MotionEvent.ACTION_UP || actionCode == MotionEvent.ACTION_POINTER_UP)
    {
        onePlayerToggle = false;
        twoPlayerToggle = false;
        helpToggle = false;
        exitToggle = false;
    }
    if (upSwitch)
        drawScreen();
    event.setAction(MotionEvent.ACTION_UP);
    return true;
}
</code></pre>

<p>There are limitations.  ACTION_MOVE is still limited.  ACTION_UP and ACTION_DOWN are much more free now.  My problem now is this:  If I hold down one button while pressing twoPlayer to start the twoPlayer activity, the next screen freezes up.  Any ideas?  No buttons can be pushed and the game eventually crashes during surfaceCreated.</p>
