Две кнопки нажаты одновременно на Android - PullRequest
0 голосов
/ 15 февраля 2012

Я новичок в программировании на Android, и я написал простую игру, в которой двум игрокам приходится нажимать собственную кнопку, чтобы достичь цели. В чем проблема?

  • Я протестировал приложение на Galaxy Nexus 4.0.3 и работает отлично.
  • Только что протестирован на HTC Desire 2.3.7 и не работает должным образом.

Но в то время как на Galaxy Nexus 2 игрока могут одновременно нажимать кнопки, на HTC Desire они не могут.

Оба устройства поддерживают мультитач.

Спасибо

Ответы [ 3 ]

0 голосов
/ 15 февраля 2012

Насколько я знаю, HTC Desire (а также его сестра Nexus One) на самом деле не поддерживают мультитач.Это скорее подделка, я думаю, что они говорят вам «квадрат», который нажимается (неуверенно).

На рынке есть программы, способные визуализировать то, что устройство распознало, вы должны установить одну из них наоба устройства и посмотрите, где различия, когда вы касаетесь их одним и тем же, мультитач, способом.

В сети есть и другие ресурсы, это хорошо известно.

0 голосов
/ 24 февраля 2019
package whaever.package.used;

import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;

// Modify this code as you wish.
// See if it works for you.
// I was looking for the same thing (press buttons and assync operation) on
// stackoverflow.com ...
// That is how I got to your question ... VERY LATE indeed (sorry, I am not
// working very much with Android, sorry for the HUDGE delay)
// Yet after reading the answers and after solving it for my particular case,
// I decided to provide this answer, maybe it is usefull and will help someone.
// Please be carefull as in my particular case I have much more code going
// with it. !!! This is only a model !!!

public class MainActivity extends AppCompatActivity {

    private final long butId_00_Down_Moment[] = new long[1];
    private final long butId_00_Up_Moment[] = new long[1];
    private final long butId_00_Duration[] = new long[1];

    private final long butId_01_Down_Moment[] = new long[1];
    private final long butId_01_Up_Moment[] = new long[1];
    private final long butId_01_Duration[] = new long[1];

    @SuppressLint("ClickableViewAccessibility")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final Button butId_00 = (Button) findViewById(R.id.but_id00);
        butId_00.setOnTouchListener (new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN: {
                        butId_00_Down_Moment[0] = System.currentTimeMillis();
                        butId_00_Duration[0] = 0;
                        MainActivity.this.findViewById(R.id.but_id00).performClick();
                        butId00_OnDown(view);
                        return true;
                    }
                    case MotionEvent.ACTION_UP: {
                        butId_00_Up_Moment[0] = System.currentTimeMillis();
                        butId_00_Duration[0] = butId_00_Up_Moment[0] - butId_00_Down_Moment[0];
                        MainActivity.this.findViewById(R.id.but_id00).performClick();
                        butId00_OnUp(view);
                        return true;
                    }
                }
                return false;
            }
        });
        butId_00.setOnClickListener(new View.OnClickListener () {
            @Override /**/ public void onClick (View view) { butId00_OnClick(view); }
        });

        final Button butId_01 = (Button) findViewById(R.id.but_id01);
        butId_01.setOnTouchListener (new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN: {
                        butId_01_Down_Moment[0] = System.currentTimeMillis();
                        butId_01_Duration[0] = 0;
                        MainActivity.this.findViewById(R.id.but_id01).performClick();
                        butId01_OnDown(view);
                        return true;
                    }
                    case MotionEvent.ACTION_UP: {
                        butId_01_Up_Moment[0] = System.currentTimeMillis();
                        butId_01_Duration[0] = butId_01_Up_Moment[0] - butId_01_Down_Moment[0];
                        MainActivity.this.findViewById(R.id.but_id01).performClick();
                        butId01_OnUp(view);
                        return true;
                    }
                }
                return false;
            }
        });
        butId_01.setOnClickListener(new View.OnClickListener () {
            @Override /**/ public void onClick (View view) { butId01_OnClick(view); }
        });
    }

    // For the first button "butId_00"
    private void butId00_OnDown(View view) {
        // TODO your code here
        Logger.getGlobal().info("butId00_OnDown" + butId_00_Down_Moment[0]);
    }
    private void butId00_OnClick(View view) {
        // TODO your code here
        Logger.getGlobal().info("butId00_OnClick" + butId_00_Duration[0]);
    }
    private void butId00_OnUp(View view) {
        // TODO your code here
        Logger.getGlobal().info("butId00_OnUp" + butId_00_Up_Moment[0]);
    }

    // For the second button "butId_01"
    private void butId01_OnDown(View view) {
        // TODO your code here
        Logger.getGlobal().info("butId01_OnDown" + butId_01_Down_Moment[0]);
    }
    private void butId01_OnClick(View view) {
        // TODO your code here
        Logger.getGlobal().info("butId01_OnClick" + butId_01_Duration[0]);
    }
    private void butId01_OnUp(View view) {
        // TODO your code here
        Logger.getGlobal().info("butId01_OnUp" + butId_01_Up_Moment[0]);
    }
}
0 голосов
/ 15 февраля 2012

Вместо использования ДВУХ разных кнопок вы должны иметь макет над вашими представлениями и определять в пределах этих видов «зоны», в которых оба игрока могут нажимать ...

Фактически, вам следует использоватьмультитач-возможности вашего Android-устройства (например, масштабирование и т. д.), но на этот раз оно будет использоваться двумя разными руками.

Тот факт, что вы можете нажимать 2 разные кнопки на Android 4.0, должен бытьошибка, ДВУХ кнопку нельзя нажимать одновременно, потому что на каждой кнопке запущен onClickListener в пределах одного потока ...

...