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. ↓
・ PC
・ Android Studio (hauptsächlich 3.0.1)
Erstellen Sie das Projekt wie gewohnt.
-Die API-Stufe ist 26 (android8.0).
-Empty wird als Aktivitätstyp angegeben.
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.
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.
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.
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.
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