Zahl soll sich erhöhen während Button gedrückt wird!

  • Antworten:17
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 1.445

11.08.2014, 16:03:05 via Website

Hy, ich hab ein Problem:

Ich möchte ein kleines spiel machen, das eine zahl so lange erhöht, wie der Button gedrückt wird. sobald er wieder losgelassen wird, soll das Erhöhen aufhören und die aktuelle zahl gespeichert werden. aber wie mache ich das mit dem Gedrückthalten?
Ich habe onClickListener, Ontouchlistener und onLongclicklisener probiert und schon zwei stunden tutorials angeschaut, doch ich verstehs einfach nicht...
kann mir vllt jemand helfen'

liebe Grüsse, NoAh! :)

Grüße NoAh!

Antworten
  • Forum-Beiträge: 1.445

11.08.2014, 16:47:26 via App

danke Steffen, das hab ich mir auch schon durchgelesen, ich kann es aber nicht richtig anwenden...

Grüße NoAh!

Antworten
  • Forum-Beiträge: 11.137

11.08.2014, 18:14:05 via App

Theoretisch reicht eine Whileschleife.
Starte einen Thread beim Touchdown event.
In diesem zählt eine whileschleife deine Zahl hoch.
Wenn der Button losgelassen wird dann musst du schleife und thread stoppen und die Zahl speichern.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

11.08.2014, 18:14:16 via Website

Ich würde den OnTouchListener nehmen und dann while(event = Down) -> erhöhe Zahl. (genauen Wortlaut musst du eben nachschauen :P)
Nur dann musst du in der While - Schleife nur eine Verzögerung einbauen dass die Zahl nicht zu schnell hochgezählt wird.

Ich gebe keine Garantie, dass das eine wirklich gute Möglichkeit ist :D

Yeah gleiche Idee wie Pascal:D (lightbulb)

— geändert am 11.08.2014, 18:14:54

Antworten
  • Forum-Beiträge: 1.445

11.08.2014, 18:30:59 via Website

Hey Danke ihr beiden! ;-)

Jetzt muss ich nur noch herausfinden, wie man eine verzögerung/delay einbaut.... :D

Grüße NoAh!

Antworten
  • Forum-Beiträge: 11.137

11.08.2014, 18:33:39 via App

Im Schlimmsten Fall Thread#Sleep aber ich würde Handler#postDelayed nehmen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 1.445

11.08.2014, 19:27:01 via App

boah ey, ich glaub ich ich mach das später mal, das ist ja abnormal schwierig! :O
ich bin jetzt seit ner guten stunde dran und es klappt einfach nicht -.-

— geändert am 11.08.2014, 19:28:29

Grüße NoAh!

Antworten
  • Forum-Beiträge: 1.445

11.08.2014, 19:31:18 via Website

package com.example.samuel.asfastasyoucan;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.util.logging.Handler;

public class GameseiteActivity extends Activity implements View.OnTouchListener {

public Button spielbutton;
public TextView tvZahl;
int zahl = 0;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_gameseite);

}




@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.gameseite, menu);

    spielbutton = (Button) findViewById(R.id.button2);
    spielbutton.setOnTouchListener(this);
    tvZahl = (TextView) findViewById(R.id.textView);


    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

public boolean onTouch (View v, MotionEvent event) {


        return false;
    }

Unter Public boolean onTouch soll es weitergehen, aber .....

Grüße NoAh!

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

11.08.2014, 20:15:32 via Website

Wo ist das Problem? Beim TouchEvent oder bei der Verzögerung?
In der onTouch musst du dann das event abfragen:

while (event == MotionEvent.ACTION_DOWN){
//Da die Verzögerung in etwa so glaube ich:
handler.postDelayed(new Runnable(){
            @Override
            public void run() {
                zahl++;
            }
        }, verzoegerungInteger);
}

Ich hab es selbst nicht ausprobiert keine Ahnung ob es mit der Verzögerung so richtig ist ;)

— geändert am 11.08.2014, 20:16:02

Antworten
  • Forum-Beiträge: 1.904

11.08.2014, 20:18:50 via App

Nein, da die Verzögerung nur verzögert die Zahl erhöht und nicht das Hochzählen für eine bestimmte Zeit blockiert.
Also: Irgendwie das Hochzählen kurz blockieren.

— geändert am 11.08.2014, 20:19:37

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

11.08.2014, 20:20:19 via Website

Sven Rahn

Nein, da die Verzögerung nur verzögert die Zahl erhöht

Ist das nicht das Ziel?

Antworten
  • Forum-Beiträge: 1.904

11.08.2014, 21:30:16 via App

Denke ich nicht, du kannst ja deinen Code testen :)
Du wirst sehen, dass das nicht das erwartete Ergebnis ist. ;)

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

11.08.2014, 21:42:17 via Website

Jep bleibt hängen :P
bin erstmal raus muss ausprobieren(thinking)

Antworten
  • Forum-Beiträge: 1.904

11.08.2014, 22:19:41 via App

Ich denke, das Problem ist, dass die Schleife den kompletten main Thread blockiert.

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
  • Forum-Beiträge: 11.137

11.08.2014, 22:29:23 via App

Deswegen musst du das auch auslagern über einen anderen Thread oder über einen AsyncTask.
Oder du wartest am ende der Whileschleife mit Thread sleep um die 100 ms sollte eigentlich klappen.
sonst bleibt nur einen anderen Thread zu benutzen.

Oder du machst es anders: Messe die Zeit des Touch eventes und Zähle dann zu deiner Zahl pro Zeiteinheit ( 1ne oder 1/2 sekunde) +1 zu deiner Zahl hinzu
So vermeidest du die while schleife und hast trotzdem die Abhängigkeit Zahl <> Zeit des Buttondrucks.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 11.137

11.08.2014, 22:29:24 via App

Deswegen musst du das auch auslagern über einen anderen Thread oder über einen AsyncTask.
Oder du wartest am ende der Whileschleife mit Thread sleep um die 100 ms sollte eigentlich klappen.
sonst bleibt nur einen anderen Thread zu benutzen.

Oder du machst es anders: Messe die Zeit des Touch eventes und Zähle dann zu deiner Zahl pro Zeiteinheit ( 1ne oder 1/2 sekunde) +1 zu deiner Zahl hinzu
So vermeidest du die while schleife und hast trotzdem die Abhängigkeit Zahl <> Zeit des Buttondrucks.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 1.445

11.08.2014, 22:31:14 via App

soo danke für die unterstützung, ich hab jetzt vorerst was anderes daraus gemacht, damit ich nicht enttäuscht ins bett gehen muss ;) ich hab jetzt einen button, der per onClickListener hochgezählt wird und man muss 100 klicks unter 12 sekunden schaffen! :)

aber ich werd hier noch dranbleiben und danke für jede hilfe! :)

Grüße NoAh!

Antworten