Android Zwei Buttons gleichzeitig drücken

Nametat

Mitglied
Hallo :)

Ich hab da eine kurze Frage:

Ich hab neulich mit dem Android programming angefangen und habe durch eine kurze Spielidee versucht zwei Buttons gleichzeitig zu drücken, also grundsätzlich soll ein Button für Spieler A eine Nummer A erhöhen und für Spieler B eine Nummer B. Wer als erstes 100 erreicht hat, hat gewonnen.

Nun meine Frage:
Gibt es eine Möglichkeit die Buttons in evtl getrennten Threads zu klicken, sodass für jeden ein Label hochzählt bzw ein Integer für das Label hochzählt?
Ist es überhaupt möglich zwei Buttons gleichzeitig zu drücken?

Ich programmiere auf dem OneplusOne und mit Netbeans auf Android 4.4.3 ( 19 glaube ich? ).

Danke schon mal im Voraus!
 

Nametat

Mitglied
Das scheint mir logisch :)

Aber wie bearbeiten die beiden Buttons dann ihre Aufgaben?
In meinem Fall MÜSSEN sie es parallel machen, da die Spieler ja gegeneinander spielen.
 

Nametat

Mitglied
Hat denn noch nie jemand dieses Problem bei einem Multiplayer spiel auf einem Gerät gehabt?
Die ganzen Reaktionsspiele basieren doch auch auf dem Prinzip oder nicht?
 

anti-held

Bekanntes Mitglied
Es reicht ja, wenn du beiden Buttons OnClickListener setzt, die die gewünschte Aufgabe erledigen.
Eine "Parallelität" musst du nicht selbst hinzufügen.
 

Nametat

Mitglied
Nein, es reicht leider nicht aus :(

Da wenn die beiden Spieler gleichzeitig auf die Buttons drücken ein Wert nicht hochzählt.

Also ich brauche etwas, das wenn die Buttons gleichzeitig gedrückt werden auch gleichzeitig eine Aufgabe erledigt wird.
Sowas wie Zwei Threads, die halt parallel ablaufen.
 

dzim

Top Contributor
Ich glaube, dass Android bei normalen Listenern die Events nicht weiterreicht (der erkennt nur einen "ein-Finger-Klick" auf dem Button), wenn man an mehreren Stellen klickt. Ich denke, du musst einen TouchListener auf einem (Transparenten?) Layer dadrüber machen und dann berechnen, ob du innerhalb der Buttons geklickt hast und dann entsprechend die Labels aktualisieren. Was anderes würde mir spontan nicht einfallen.
 

Nametat

Mitglied
Also, ich habs jetzt hinbekommen, dass er das gleichzeitig macht undzwar mit einem transparenten Textview über der kompletten "App".
Nun ist das Problem, dass er nur bei ACTION_MOVE die beiden Pointer erkennt.

Hier mal meine main.xml:

Code:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
    >
    
    <LinearLayout
        android:id="@+id/linearlayout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        >

        <TextView
            android:id="@+id/txtPlayer1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/textviewtext"
        />

        <Button 
            android:id="@+id/btnPlayer1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/buttontext"
        />

        <TextView
            android:id="@+id/txtPlayer2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/textviewtext"
        />

        <Button
            android:id="@+id/btnPlayer2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/buttontext"
        />
    </LinearLayout>
    
    <TextView
        android:id="@+id/txtTransparent"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
    />
    
</FrameLayout>

Und hier meine MainActivity.java

Java:
public class MainActivity extends Activity {

    private Button btnPlayer1;
    private TextView txtPlayer1;
    private int iPlayer1 = 0;
    private Button btnPlayer2;
    private TextView txtPlayer2;
    private int iPlayer2 = 0;
    private MyOnTouchListener myOnTouchListener;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Log.d("MainActivity", "--------New Start----------");

        myOnTouchListener = new MyOnTouchListener();

        TextView v = (TextView) findViewById(R.id.txtTransparent);
        v.setOnTouchListener(myOnTouchListener);

        btnPlayer1 = (Button) findViewById(R.id.btnPlayer1);
        txtPlayer1 = (TextView) findViewById(R.id.txtPlayer1);

        btnPlayer2 = (Button) findViewById(R.id.btnPlayer2);
        txtPlayer2 = (TextView) findViewById(R.id.txtPlayer2);

    }

    public class MyOnTouchListener implements View.OnTouchListener {
        
        public boolean onTouch(View v, MotionEvent event) {
            int pointerCount = event.getPointerCount();

            for (int i = 0; i < pointerCount; i++) {
                Log.d("MainActivity", "Counter:" + pointerCount);
                Log.d("MainActivity", "X:" + event.getX());
                Log.d("MainActivity", "Y:" + event.getY());

                Rect rectButton1 = new Rect(btnPlayer1.getLeft(), btnPlayer1.getTop(), btnPlayer1.getRight(), btnPlayer1.getBottom());
                if (rectButton1.contains((int) event.getX(i), (int) event.getY(i))) {
                    txtPlayer1.setText(++iPlayer1 + "");
                    Log.d("MainActivity", "Button 1 clicked:" + iPlayer1);
                }
                
                Rect rectButton2 = new Rect(btnPlayer2.getLeft(), btnPlayer2.getTop(), btnPlayer2.getRight(), btnPlayer2.getBottom());
                if (rectButton2.contains((int) event.getX(i), (int) event.getY(i))) {
                    txtPlayer2.setText(++iPlayer2 + "");
                    Log.d("MainActivity", "Button 2 clicked:" + iPlayer2);
                }
            }

            return true;
        }
    }

Momentan ist es so, dass wenn man auf die Buttons klickt, und in dem Button gedrückt hält, der jeweilige Zähler super schnell hochzählt.
Nun möchte ich, dass aber nur 1 pro Klick hochgezählt wird.

Habt ihr da ein paar Ideen oder Ansätze, wie man das am besten Implementieren kann?
Wäre auch nett, wenn Ihr euch mal den vorhandenen Code auf Verbesserungen anschauen könntet :)

Vielen Dank schon mal im Voraus!
 

dzim

Top Contributor
Ich weiss nicht, ob das was bringt, aber was ist, wenn du #ACTION_POINTER_DOWN/UP verwendest? MOVE ist, denke ich mal, per Definition nicht geeignet für ein "Klick"-Event. Da musst du schon mit den #ACTION_POINTER_DOWN/UP arbeiten...

Nur ein Verbesserungsvorschlag: Ich verwende für Transparente Layer eigentlich immer FrameLayouts mit transparenten Background...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Julius99 Android Distanz zwischen zwei Location Android & Cross-Platform Mobile Apps 12
M Android Kabellose Datenübertragung zwischen zwei Handys - Reichweiten Android & Cross-Platform Mobile Apps 3
K Android Datenaustausch zwischen zwei Fragments Android & Cross-Platform Mobile Apps 1
E Android Zwei Canvase übereinander legen und anzeigen Android & Cross-Platform Mobile Apps 7
M Zwei Android Geräte verbinden Android & Cross-Platform Mobile Apps 7
G zwei Runnable gleichzeitig Android & Cross-Platform Mobile Apps 3
T Zeit in zwei Zahlen für Widget zerlegen Android & Cross-Platform Mobile Apps 2
S Zwei Anfaengerfragen Android & Cross-Platform Mobile Apps 10
S onClickListener auf Buttons die im Code erzeugt wurden setzen. Android & Cross-Platform Mobile Apps 8
L Hintergrund eines Switch(Buttons) ändern Android & Cross-Platform Mobile Apps 3
D Android dynamische Buttons positionieren Android & Cross-Platform Mobile Apps 1
H Buttons färben sich mit, beim Hintergrund ändern Android & Cross-Platform Mobile Apps 3
D Hilfe! es geht um Buttons und Sounds Android & Cross-Platform Mobile Apps 14
K Dynamische (Image)Buttons, Größe bestimmen Android & Cross-Platform Mobile Apps 4
V Buttons bei Klick hinzufügen Android & Cross-Platform Mobile Apps 2
V Buttons zur Actionbar hinzufügen Android & Cross-Platform Mobile Apps 4
L Android Bildschirm bleibt dunkel nach neustarten der App nach betätigen des Home-Buttons Android & Cross-Platform Mobile Apps 3
D Android Viele Buttons und ein Layout Android & Cross-Platform Mobile Apps 6
K Verständisfrage bzgl. Buttons und ihnen eine Funktion geben. Android & Cross-Platform Mobile Apps 3
P Buttons im + anordnen Android & Cross-Platform Mobile Apps 2
T Android AlertDialog; Buttons ändern Android & Cross-Platform Mobile Apps 4
H Buttons werden falsch angeordent Android & Cross-Platform Mobile Apps 2
F Buttons und awt? Android & Cross-Platform Mobile Apps 7
ruutaiokwu Android In einem Android-“Spinner”-Element GLEICHZEITIG Bild (links) UND Text (rechts) anzeigen Android & Cross-Platform Mobile Apps 0
I Java Handy - mehrere Programme gleichzeitig Android & Cross-Platform Mobile Apps 8

Ähnliche Java Themen

Neue Themen


Oben