2

我想做的是处理多点触控按钮。我有 6 个按钮,用户可以触摸 1 到 6 个按钮。问题是MotionEvent最多可以处理 3 个指针,但我需要最多 6 个指针。请问有什么帮助吗?

这是代码:

public class MultitouchtestActivity extends Activity {
    private class TouchListener implements OnTouchListener {

        @Override
        public boolean onTouch(final View v, final MotionEvent event) {


            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                switch (v.getId()) {
                case R.id.button1:
                    sqText = "Square 1 Pressed::Pointer count = "
                            + String.valueOf(event.getPointerCount());
                    break;
                case R.id.button2:
                    sq1Text = "Square 2 Pressed::Pointer count = "
                            + String.valueOf(event.getPointerCount());
                    break;
                case R.id.button3:
                    sq2Text = "Square 3 Pressed::Pointer count = "
                            + String.valueOf(event.getPointerCount());
                    break;
                case R.id.button4:
                    sq3Text = "Square 4 Pressed::Pointer count = "
                            + String.valueOf(event.getPointerCount());
                    break;
                case R.id.button5:
                    sq4Text = "Square 5 Pressed::Pointer count = "
                            + String.valueOf(event.getPointerCount());
                    break;
                case R.id.button6:
                    sq5Text = "Square 6 Pressed::Pointer count = "
                            + String.valueOf(event.getPointerCount());
                    break;
                }

            } else if (event.getAction() == MotionEvent.ACTION_POINTER_1_DOWN) {
                switch (v.getId()) {
                case R.id.button1:
                    sqText = "Square 1 Pointer1Down::Pointer count = "
                            + String.valueOf(event.getPointerCount()) + "\n";
                    break;
                case R.id.button2:
                    sq1Text = "Square 2 Pointer1Down::Pointer count = "
                            + String.valueOf(event.getPointerCount()) + "\n";
                    break;
                case R.id.button3:
                    sq2Text = "Square 3 Pointer1Down::Pointer count = "
                            + String.valueOf(event.getPointerCount()) + "\n";
                    break;
                case R.id.button4:
                    sq3Text = "Square 4 Pointer1Down::Pointer count = "
                            + String.valueOf(event.getPointerCount()) + "\n";
                    break;
                }
            } else if (event.getAction() == MotionEvent.ACTION_POINTER_2_DOWN) {
                switch (v.getId()) {
                case R.id.button1:
                    sqText = "Square 1 Pointer2Down::Pointer count = "
                            + String.valueOf(event.getPointerCount()) + "\n";
                    break;
                case R.id.button2:
                    sq1Text = "Square 2 Pointer2Down::Pointer count = "
                            + String.valueOf(event.getPointerCount()) + "\n";
                    break;
                case R.id.button3:
                    sq2Text = "Square 3 Pointer2Down::Pointer count = "
                            + String.valueOf(event.getPointerCount()) + "\n";
                    break;
                case R.id.button4:
                    sq3Text = "Square 4 Pointer2Down::Pointer count = "
                            + String.valueOf(event.getPointerCount()) + "\n";
                    break;
                }
            } else if (event.getAction() == MotionEvent.ACTION_POINTER_3_DOWN) {
                switch (v.getId()) {
                case R.id.button1:
                    sqText = "Square 1 Pointer3Down::Pointer count = "
                            + String.valueOf(event.getPointerCount()) + "\n";
                    break;
                case R.id.button2:
                    sq1Text = "Square 2 Pointer3Down::Pointer count = "
                            + String.valueOf(event.getPointerCount()) + "\n";
                    break;
                case R.id.button3:
                    sq2Text = "Square 3 Pointer3Down::Pointer count = "
                            + String.valueOf(event.getPointerCount()) + "\n";
                    break;
                case R.id.button4:
                    sq3Text = "Square 4 Pointer3Down::Pointer count = "
                            + String.valueOf(event.getPointerCount()) + "\n";
                    break;
                }




            }

            // TODO Auto-generated method stub
            return true;
        }
    }

    protected Button sq1;
    protected Button sq2;
    protected Button sq3;
    protected Button sq4;
    protected Button sq5;
    protected Button sq6;

    protected String sqText = new String();
    protected String sq1Text = new String();
    protected String sq2Text = new String();
    protected String sq3Text = new String();
    protected String sq4Text = new String();
    protected String sq5Text = new String();


    private final Handler handler = new Handler();

    private final Runnable mUpdateUITimerTask = new Runnable() {
        @Override
        public void run() {
            // do whatever you want to change here, like:
            updateTextField();
        }
    };

    /** Called when the activity is first created. */
    @Override
    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setViews();
        handler.postDelayed(mUpdateUITimerTask, 5000);
    }

    private void setViews() {
        sq1 = (Button) findViewById(R.id.button1);
        sq2 = (Button) findViewById(R.id.button2);
        sq3 = (Button) findViewById(R.id.button3);
        sq4 = (Button) findViewById(R.id.button4);
        sq5 = (Button) findViewById(R.id.button5);
        sq6 = (Button) findViewById(R.id.button6);

        sq1.setOnTouchListener(new TouchListener());
        sq2.setOnTouchListener(new TouchListener());
        sq3.setOnTouchListener(new TouchListener());
        sq4.setOnTouchListener(new TouchListener());
        sq5.setOnTouchListener(new TouchListener());
        sq6.setOnTouchListener(new TouchListener());
    }

    private void updateTextField() {
        final TextView view1 = (TextView) findViewById(R.id.logView);
        final TextView view2 = (TextView) findViewById(R.id.logView1);
        final TextView view3 = (TextView) findViewById(R.id.logView2);
        final TextView view4 = (TextView) findViewById(R.id.logView3);
        final TextView view5 = (TextView) findViewById(R.id.logView4);
        final TextView view6 = (TextView) findViewById(R.id.logView5);

        // view1.append(sqText + "\n");
        view1.setText(sqText);
        view2.setText(sq1Text);
        view3.setText(sq2Text);
        view4.setText(sq3Text);
        view5.setText(sq4Text);
        view6.setText(sq5Text);

        handler.post(mUpdateUITimerTask);
    }
}
4

1 回答 1

0

您可以使用 android 检测到的指针数量取决于设备。一些较旧的只能检测到一个,而更现代的可能能够检测到更多。

如果您想在市场上发布您的应用程序,请确保您的应用程序也可以在指针较少的设备上运行。

于 2012-10-27T22:51:19.143 回答