Ich habe bereits überprüft Dieser Beitrag SO, aber ohne Erfolg: removeCallbacks not stopping runnableRunnable Code nicht für Android stoppen
Was meine app tut: Ich habe 2 imageViews. Wenn die Anwendung ausgeführt wird, sollte ein ImageView das Bild aus dem Standbild ändern, um das Bild zu aktivieren, und dann wieder in das Standbild zurückkehren. Dann wird der Handler für die Verzögerung verwendet, bevor dasselbe für die zweite Bildansicht ausgeführt wird. Und dann möchte ich, dass Runnable aufhört. Ich verwende Androids Frame-Animation. Bitte helfen!
public class MainActivity extends Activity {
AnimationDrawable[] animDrawList;
ImageView im;
ImageView im2;
private int curPos;
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
animDrawList = new AnimationDrawable[2];
curPos = 0;
im = (ImageView)findViewById(R.id.image1);
im2 = (ImageView)findViewById(R.id.image2);
im.setBackgroundResource(R.drawable.animation_to_run);
im2.setBackgroundResource(R.drawable.animation_to_run);
animDrawList[0] = (AnimationDrawable) im.getBackground();
animDrawList[1] = (AnimationDrawable) im2.getBackground();
mHandler = new Handler();
startTask();
}
Runnable myThread = new Runnable() {
volatile boolean stopMe = false;
@Override
public void run() {
if (curPos <= 1) {
animDrawList[curPos].start();
curPos++;
}
if (curPos > 1) {
stopMe = true;
}
if (stopMe) {
stopTask();
return;
}
mHandler.postDelayed(myThread, 1000);
}
};
void startTask() { myThread.run(); }
void stopTask() { mHandler.removeCallbacks(myThread); }
}//end of MainActivity class
Hier ist mein Layout-Datei, die straighforward ist:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="org.example.a.MainActivity">
<ImageView
android:id="@+id/image1"
android:layout_width="90px"
android:layout_height="90px"
android:layout_alignParentStart="true"
android:layout_marginStart="14dp"
android:layout_marginTop="13dp" />
<ImageView
android:id="@+id/image2"
android:layout_width="90px"
android:layout_height="90px"
android:layout_marginEnd="49dp"
android:layout_marginBottom="93dp"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>
Hier ist meine XML-Datei.
Die App läuft, keine Abstürze, aber es hört nicht auf. Ich möchte, dass das Runnable nach dem Animieren stoppt, warum ist meine Flagge "StopMe" nicht in Ordnung?
UPDATE FROM 4. JUNI 2017: Ich habe den Animationscode innerhalb der run-Methode entfernt und logcat output in run method hinzugefügt und Runnable stoppt mit "stopMe" boolean, so dass es Probleme mit der Frame-Animation gibt Kombiniere Androids Frame-Animation nicht mit Runnable? Ich werde das prüfen ...
Geben Sie Ihre Layoutdatei und alle Fehlerprotokolle an. Auch "es funktioniert nicht" ist keine sehr nützliche Fehler-/Problembeschreibung. – scb998