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. ↓
・ PC
・ Android Studio (principalement 3.0.1)
Créez le projet comme d'habitude.
-Le niveau d'API est de 26 (android8.0).
-Empty est spécifié comme type d'activité.
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é.
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.
É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".
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.
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