[JAVA] Créer une application de minuterie avec de la boue

** Minuterie facile avec diverses fonctions **

J'ai dû l'écrire le 10 décembre 2019, mais ça fait une année.

Ensuite, je vous présenterai cette fois ↓

_ Application "Timer"! !! !! _

En plus de démarrer, arrêter et réinitialiser, j'ai ajouté des fonctions simples (des fonctions dont je n'ai pas vraiment besoin).

C'est une image image complétée. ↓ Photo_20-01-08-16-38-02.318.png

** _ Choses nécessaires _ **

・ PC

・ Android Studio (principalement 3.0.1)

** _Création d'application-1 Préparation _ **

Créez le projet comme d'habitude.

-Le niveau d'API est de 26 (android8.0).

-Empty est spécifié comme type d'activité.

** _Création d'application-2 Création d'écran _ **

Organisons les boutons sur l'écran.

activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
 ~ abrégé ~
>


    <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>

Oui, c'est View. (Android.support.constraint.ConstraintLayout varie d'une personne à l'autre.)

        android:text="@string/pause"

Je pense qu'une erreur se produira, donc j'ajouterai strings.xml cette fois.

<resources>
    <string name="app_name">timer</string>
    <string name="_00_00">00:00</string>
 <string name = "start"> Début </ string>
 <string name = "reset"> reset </ string>
    <string name="stop">STOP</string>
 <string name = "pause"> Le monde </ string>
 <string name = "skip"> King Crimson </ string>
    <string name="not_return">GER</string>
</resources>

Oui, nommons les boutons de pause et de saut de manière appropriée

Je pense que l'écran peut maintenant être affiché.

** _ Création d'application-3 Timer Processing 1 _ **

Dans MainActivity.java, écrivez le processus lorsque chaque bouton de l'écran est enfoncé! !!

Mais

Définissez d'abord les variables de champ.

public class MainActivity extends AppCompatActivity {

 // Unité de réglage de la minuterie Milliseconde
    private static final long START_TIME_IN_MILLIS = 180000;

 // Unité de réglage de la pause Milliseconde
    private static final long PAUSE_IN_MILLIS = 7000;

 // Ignorer l'unité de réglage Milliseconde
    private static final long SKIP_TIME_IN_MILLIS = 5000;

 //カウントダウンタイマー
    private TextView mTextCountDown;
 //ボタン
 Bouton privé mButtonStart; // Démarrer
 Bouton privé mButtonReset; // Réinitialiser
 Bouton privé mButtonPause; // Pause
 Bouton privé mButtonSkip; // Ignorer
 Bouton privé mButtonReturn; // Retour

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

    private long mTime = START_TIME_IN_MILLIS;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
 ~ abrégé ~

Ici, vous définissez l'heure initiale de la minuterie, l'heure d'arrêt de la pause et l'heure de sauter le saut.

** _Création d'application-3 Traitement du minuteur 2 _ **

Écrivez le comportement lorsque chaque bouton est pressé en premier!

 // ~ Il y a un void protégé onCreate (Bundle savedInstanceState) ci-dessus. ~

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

            @Override
            public void onFinish() {
 mTimerRunning = false; // Minuterie arrêtée
                mTime = START_TIME_IN_MILLIS;
 mButtonStart.setText ("démarrer");
                mButtonReset.setVisibility(View.INVISIBLE);
                mButtonPause.setVisibility(View.INVISIBLE);
                mButtonSkip.setVisibility(View.INVISIBLE);
                mButtonReturn.setVisibility(View.INVISIBLE);
            }
        }.start();

 mTimerRunning = true; // Minuterie en cours d'exécution
 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 ("démarrer");
        mButtonReset.setVisibility(View.VISIBLE);
    }

 //タイマーリセットの処理
    private void resetTimer() {
        mTime = START_TIME_IN_MILLIS;
        updateCountDownText();
        mCountDownTimer.cancel();
 mButtonStart.setText ("démarrer");
        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);
    }

Avec cela, j'ai écrit le processus qui se déplace lorsque le bouton est enfoncé.

En gros, on a l'impression de sauter ou de s'arrêter en appliquant "arrêter la minuterie".

** _Création d'application-3 Traitement du minuteur 3 _ **

Implémenter onClick sur le bouton pour qu'il fonctionne lorsqu'il est pressé

@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();
    }

Si vous écrivez jusqu'à présent, vous pouvez l'utiliser comme une minuterie. Veuillez le compiler et l'exécuter sur la machine réelle.

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


** _ Postscript _ **

Merci pour la lecture.

La plupart des sources sont solides, mais je n'ai pas beaucoup écrit parce que je viens d'utiliser CountDownTimer.

(Je voulais ajouter diverses autres choses, mais en raison de contraintes de temps, je vais le faire jusqu'à présent. C'est presque un mois de retard.)

Au début, je pensais en faire une application de compteur. (Chaque fois que vous appuyez sur le bouton, il compte et le durandal colle de haut en bas dans l'animation)

To Be Continued

Recommended Posts

Créer une application de minuterie avec de la boue
[Rails6] Créer une nouvelle application avec Rails [Débutant]
J'ai créé une application Janken avec kotlin
[Rails 5] Créer une nouvelle application avec Rails [Débutant]
J'ai créé une application Janken avec Android
Créez une application de recherche simple avec Spring Boot
Création d'un outil d'automatisation de navigateur avec Ruby + Selenium
Créons un processus chronométré avec la minuterie de Java! !!
Création d'un référentiel commun avec Spring Data JPA
Entraînez-vous à créer une application de chat simple avec Docker + Sinatra
Création d'un jeu Chinchiro avec Ruby 4th Création d'un processus de progression du jeu
Créez une application de chat avec WebSocket (Tyrus) + libGDX + Kotlin
Créer un référentiel local
Un mémorandum lors de la création d'un service REST avec Spring Boot
Créer un cas de test
Sortie verbalisée de procédure approximative lors de la création d'une application avec Rails
[Rails] J'ai essayé de créer une mini application avec FullCalendar
La première application WEB avec Spring Boot-Making a Pomodoro timer-
Résumé du travail initial lors de la création d'une application avec Rails
Créez une application Web Hello World avec Spring Framework + Jetty
Comment spécifier la base de données lors de la création d'une application avec des rails
Développement d'applications iOS: application Timer (2. affichage de la minuterie)
Création d'un ExecutionContext personnalisé Scala
Créer un calendrier avec Ruby
[Rails] Création d'un champ de recherche
J'ai créé une application de chat.
Créez un terrain de jeu avec Xcode 12
Développement d'applications iOS: application Timer (résumé)
Une histoire bloquée avec NotSerializableException
L'histoire du refactoring avec un assistant personnel pour la première fois dans une application Rails
[Rails] Evitez le SELECT émis lors de la création d'un modèle avec appartient_to défini!
Créez une application mémo avec Tomcat + JSP + Servlet + MySQL à l'aide d'Eclipse
Créer une JVM pour la distribution d'applications avec les modules JDK 9 et jlink
Règles de dénomination lors de la création de nouveaux contrôleurs et modèles avec rails
Créer un nouvel utilisateur avec des rails était en colère contre l'attribut inconnu "mot de passe" pour l'utilisateur.
Créez une application de recherche de restaurant avec l'API IBM Watson + Guru Navi (avec source)
[Auto-apprentissage] Création d'un portfolio (application d'origine) après avoir terminé le didacticiel Rails