[JAVA] Erstellen einer Timer-App mit Schlamm

** Einfacher Timer mit verschiedenen Funktionen **

Ich musste es am 10. Dezember 2019 schreiben, aber es war über das Jahr.

Dann werde ich diesmal ↓ vorstellen

_ "Timer" App! !! !! _

Zusätzlich zum Starten, Stoppen und Zurücksetzen habe ich einfache Funktionen hinzugefügt (Funktionen, die ich nicht wirklich brauche).

Es ist ein Bild abgeschlossenes Bild. ↓ Photo_20-01-08-16-38-02.318.png

** _ Notwendige Dinge _ **

・ PC

・ Android Studio (hauptsächlich 3.0.1)

** _App Creation-1 Vorbereitung _ **

Erstellen Sie das Projekt wie gewohnt.

-Die API-Stufe ist 26 (android8.0).

-Empty wird als Aktivitätstyp angegeben.

** _App-Erstellung-2 Bildschirmerstellung _ **

Ordnen wir die Schaltflächen auf dem Bildschirm an.

activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
 ~ Abkürzung ~
>


    <TextView
        android:id="@+id/text_view_countdown"
        android:layout_width="395dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_marginEnd="7dp"
        android:layout_marginStart="7dp"
        android:gravity="center"
        android:text="@string/_00_00"
        android:textColor="@android:color/black"
        android:textSize="40sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.48"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.280" />

    <Button
        android:id="@+id/button_start_pause"
        android:layout_width="395dp"
        android:layout_height="43dp"
        android:layout_below="@+id/text_view_countdown"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="8dp"
        android:text="@string/start"
        app:layout_constraintBottom_toTopOf="@+id/button_reset"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/text_view_countdown" />

    <Button
        android:id="@+id/button_reset"
        android:layout_width="395dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button_start_pause"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="8dp"
        android:text="@string/reset"
        android:visibility="invisible"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button_start_pause"
        tools:visibility="visible" />
    <Button
        android:id="@+id/button_pause"
        android:layout_width="395dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button_reset"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="8dp"
        android:text="@string/pause"
        android:visibility="invisible"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button_reset"
        tools:visibility="visible" />

    <Button
        android:id="@+id/button_skip"
        android:layout_width="395dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button_pause"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="8dp"
        android:text="@string/skip"
        android:visibility="invisible"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button_pause"
        tools:visibility="visible" />

    <Button
        android:id="@+id/button_return"
        android:layout_width="395dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button_skip"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="8dp"
        android:text="@string/not_return"
        android:visibility="invisible"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button_skip"
        tools:visibility="visible" />

</android.support.constraint.ConstraintLayout>

Ja, das ist Ansicht. (Android.support.constraint.ConstraintLayout variiert von Person zu Person.)

        android:text="@string/pause"

Ich denke, dass ein Fehler auftreten wird, also werde ich diesmal die Datei strings.xml hinzufügen.

<resources>
    <string name="app_name">timer</string>
    <string name="_00_00">00:00</string>
 <string name = "start"> Start </ string>
 <string name = "reset"> reset </ string>
    <string name="stop">STOP</string>
 <string name = "pause"> Die Welt </ string>
 <string name = "skip"> King Crimson </ string>
    <string name="not_return">GER</string>
</resources>

Ja, benennen wir die Schaltflächen Pause und Überspringen entsprechend

Ich denke, dass der Bildschirm jetzt angezeigt werden kann.

** _ App Creation-3 Timer-Verarbeitung 1 _ **

Schreiben Sie in MainActivity.java den Vorgang, wenn jede Schaltfläche auf dem Bildschirm gedrückt wird! !!

Aber

Definieren Sie zuerst die Feldvariablen.

public class MainActivity extends AppCompatActivity {

 // Timer-Einstelleinheit Millisekunde
    private static final long START_TIME_IN_MILLIS = 180000;

 // Einstelleinheit Millisekunde anhalten
    private static final long PAUSE_IN_MILLIS = 7000;

 // Einstelleinheit Millisekunde überspringen
    private static final long SKIP_TIME_IN_MILLIS = 5000;

 //カウントダウンタイマー
    private TextView mTextCountDown;
 //ボタン
 private Button mButtonStart; // Start
 private Button mButtonReset; // Zurücksetzen
 private Button mButtonPause; // Pause
 private Button mButtonSkip; // Überspringen
 private Button mButtonReturn; // Return

 //CountDownTimerクラス
    private CountDownTimer mCountDownTimer;
 //CallTimeクラス
    private boolean mTimerRunning;

    private long mTime = START_TIME_IN_MILLIS;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
 ~ Abkürzung ~

Hier definieren Sie die Anfangszeit des Timers, die Stoppzeit der Pause und die Zeit zum Überspringen des Überspringens.

** _App Creation-3 Timer-Verarbeitung 2 _ **

Schreiben Sie das Verhalten, wenn jede Taste zuerst gedrückt wird!

 // ~ Oben befindet sich eine geschützte Leere onCreate (Bundle savedInstanceState). ~

 //タイマー再開の処理
    private void startTimer() {
        mCountDownTimer = new CountDownTimer(mTime,1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                mTime = millisUntilFinished;
                updateCountDownText();
            }

            @Override
            public void onFinish() {
 mTimerRunning = false; // Timer gestoppt
                mTime = START_TIME_IN_MILLIS;
 mButtonStart.setText ("start");
                mButtonReset.setVisibility(View.INVISIBLE);
                mButtonPause.setVisibility(View.INVISIBLE);
                mButtonSkip.setVisibility(View.INVISIBLE);
                mButtonReturn.setVisibility(View.INVISIBLE);
            }
        }.start();

 mTimerRunning = true; // Timer läuft
 mButtonStart.setText ("Pause");
        mButtonReset.setVisibility(View.VISIBLE);
        mButtonPause.setVisibility(View.VISIBLE);
        mButtonSkip.setVisibility(View.VISIBLE);
        mButtonReturn.setVisibility(View.VISIBLE);

    }

 //タイマー一時停止の処理
    private void pauseTimer() {
        mCountDownTimer.cancel();
        mTimerRunning = false;
 mButtonStart.setText ("start");
        mButtonReset.setVisibility(View.VISIBLE);
    }

 //タイマーリセットの処理
    private void resetTimer() {
        mTime = START_TIME_IN_MILLIS;
        updateCountDownText();
        mCountDownTimer.cancel();
 mButtonStart.setText ("start");
        mTimerRunning = false;
        mButtonStart.setVisibility(View.VISIBLE);
        mButtonReset.setVisibility(View.INVISIBLE);
        mButtonPause.setVisibility(View.INVISIBLE);
        mButtonSkip.setVisibility(View.INVISIBLE);
        mButtonReturn.setVisibility(View.INVISIBLE);

    }

 //タイマー表示
    private void updateCountDownText() {
        int minutes = (int)(mTime / 1000) / 60;
        int seconds = (int)(mTime / 1000) % 60;

        String timeFormatted = String.format(Locale.getDefault(), "%02d:%02d",minutes,seconds);
        mTextCountDown.setText(timeFormatted);
    }

Damit habe ich den Prozess geschrieben, der sich bewegt, wenn die Taste gedrückt wird.

Grundsätzlich fühlt es sich so an, als würde das Überspringen oder Stoppen durch Anwenden von "Stop the Timer" erreicht.

** _App Creation-3 Timer-Verarbeitung 3 _ **

Implementieren Sie onKlicken Sie auf die Schaltfläche, damit sie beim Drücken funktioniert

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

        mTextCountDown  = findViewById(R.id.text_view_countdown);
        mButtonStart    = findViewById(R.id.button_start_pause);
        mButtonReset    = findViewById(R.id.button_reset);
        mButtonPause    = findViewById(R.id.button_pause);
        mButtonSkip     = findViewById(R.id.button_skip);
        mButtonReturn   = findViewById(R.id.button_return);

 //スタートボタン
        mButtonStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
 //タイマーの状態を取得
                if (mTimerRunning) {
 //動いてるなら停止
                    pauseTimer();
                } else {
                    startTimer();
                }
            }
        });

 //リセットボタン
        mButtonReset.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
 //タイマーのリセット
                resetTimer();
            }
        });

 //一時停止ボタン
        mButtonPause.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
 //タイマーを停止
                mCountDownTimer.cancel();
 //7秒後実行
                new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
                    @Override
                    public void run() {
 //タイマーの再開
                        startTimer();
                    }
                }, PAUSE_IN_MILLIS);

            }
        });

 //スキップボタン
        mButtonSkip.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
 //タイマーを停止
                mCountDownTimer.cancel();
                int futureTime = (int)(mTime - SKIP_TIME_IN_MILLIS);
 //残り時間が0以上あるならスキップ
                if (futureTime >= 0) {
                    mTime = futureTime;
                    int minutes = (futureTime / 1000) / 60;
                    int seconds = (futureTime / 1000) % 60;
                    String timeFormatted = String.format(Locale.getDefault(), "%02d:%02d",minutes,seconds);
                    mTextCountDown.setText(timeFormatted);
 //残り時間0になるならリセット
                } else {
                    resetTimer();
                }
                startTimer();
            }
        });

 //戻るボタン
        mButtonReturn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                resetTimer();
                startTimer();

            }
        });

        updateCountDownText();
    }

Wenn Sie bisher geschrieben haben, können Sie es als Timer betreiben. Bitte kompilieren Sie es tatsächlich und führen Sie es auf dem tatsächlichen Computer aus.

Photo_20-01-08-16-38-00.994.png


** _ Postscript _ **

Danke fürs Lesen.

Der größte Teil der Quelle ist solide, aber ich habe nicht viel geschrieben, weil ich nur CountDownTimer verwendet habe.

(Ich wollte verschiedene andere Dinge hinzufügen, aber aus Zeitgründen werde ich es bis jetzt tun. Es ist fast einen Monat überfällig.)

Zuerst dachte ich daran, daraus eine Counter-App zu machen. (Jedes Mal, wenn Sie die Taste drücken, zählt sie hoch und der Durandal bleibt in der Animation von oben nach unten hängen.)

To Be Continued

Recommended Posts

Erstellen einer Timer-App mit Schlamm
[Rails6] Erstelle eine neue App mit Rails [Anfänger]
Ich habe eine Janken App mit Kotlin gemacht
[Rails 5] Erstelle eine neue App mit Rails [Anfänger]
Ich habe eine Janken App mit Android gemacht
Erstellen Sie mit Spring Boot eine einfache Such-App
Erstellen eines Browser-Automatisierungstools mit Ruby + Selenium
Lassen Sie uns mit Javas Timer einen zeitgesteuerten Prozess erstellen! !!
Erstellen eines gemeinsamen Repositorys mit Spring Data JPA
Üben Sie das Erstellen einer einfachen Chat-App mit Docker + Sinatra
Erstellen eines Chinchiro-Spiels mit Ruby 4. Erstellen eines Spielfortschrittsprozesses
Erstellen Sie eine Chat-App mit WebSocket (Tyrus) + libGDX + Kotlin
Erstellen eines lokalen Repositorys
Ein Memorandum beim Erstellen eines REST-Service mit Spring Boot
Testfall erstellen
Grobe Prozedur verbalisierte Ausgabe beim Erstellen einer App mit Rails
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
Die erste WEB-Anwendung mit Spring Boot-Making a Pomodoro Timer-
Zusammenfassung der ersten Arbeiten beim Erstellen einer App mit Rails
Erstellen Sie eine Hello World-Webanwendung mit Spring Framework + Jetty
So geben Sie db beim Erstellen einer App mit Rails an
iOS App Entwicklung: Timer App (2. Timer Anzeige)
Erstellen eines benutzerdefinierten Scala ExecutionContext
Erstellen eines Kalenders mit Ruby
[Rails] Erstellen eines Suchfelds
Ich habe eine Chat-App erstellt.
Erstellen Sie einen Spielplatz mit Xcode 12
iOS App Entwicklung: Timer App (Zusammenfassung)
Eine Geschichte, die bei NotSerializableException steckt
Die Geschichte des Refactorings mit einem selbstgemachten Helfer zum ersten Mal in einer Rails-App
[Rails] Vermeiden Sie das SELECT, das beim Erstellen eines Modells mit Gehört_zu Definiert ausgegeben wird!
Erstellen Sie eine Memo-App mit Tomcat + JSP + Servlet + MySQL mit Eclipse
Erstellen Sie eine JVM für die App-Verteilung mit JDK 9-Modulen und jlink
Benennungsregeln beim Erstellen neuer Controller und Modelle mit Schienen
Das Erstellen eines neuen Benutzers mit Schienen war verärgert über das unbekannte Attribut "Passwort" für den Benutzer.
Erstellen Sie eine Restaurant-Such-App mit der IBM Watson + Guru Navi-API (mit Quelle).
[Selbststudium] Erstellen eines Portfolios (Original-App) nach Abschluss des Rails-Tutorials