Animation und UI-Thread Blockierung

  • Antworten:5
Lims Kaya
  • Forum-Beiträge: 2

25.07.2013, 15:41:44 via Website

Hallo, ich hab ein Problem mit der Animation.

wenn ich eine Animation starte wird alles andere blockiert. Man kann dann nicht mehr auf Buttons etc. klicken, bis die Animation endet..

ich hab eigene imageSwitcher implementiert. Es wird periodisch images switcht (fade in/out animation).. Während der Animation sind die Buttons (ich glaube das ganze UI-Thread) blockiert..

1backImage.setInAnimation(AnimationUtils.loadAnimation(this,
2 android.R.anim.fade_in));
3
4 backImage.setOutAnimation(AnimationUtils.loadAnimation(this,
5 android.R.anim.fade_out));
6
7 Timer scrollTimer = new Timer();
8 scrollTimer.schedule(
9 new TimerTask(){
10 int i = 0;
11 @Override
12 public void run(){
13 runOnUiThread(new Runnable() {
14
15 @Override
16 public void run() {
17 if(i % 2 == 0)
18 backImage.setBackgroundResource(R.drawable.bride2);
19 else
20 backImage.setBackgroundResource(R.drawable.bride1);
21 i++;
22 }
23 });
24 }
25 },
26 5000,5000);

weiss jemand wie man Animationen woanders ausführen kann. also ausserhalb des UI-Threads?

— geändert am 25.07.2013, 15:58:51

Antworten
LitteM
  • Forum-Beiträge: 141

25.07.2013, 17:40:58 via Website

Du musst einen neuen Thread erstellen der dir deinen Code ausführt. Ansonsten, wie du schon gesagt hast, wird dein UI-Thread von dem code "blockiert" ;)

Antworten
Lims Kaya
  • Forum-Beiträge: 2

25.07.2013, 23:44:03 via Website

ja aber,
"backImage.setBackgroundResource(R.drawable.bride2);"
das muss ich in UI-Thread Ausführen.. Animation und setBackground sind beide UI-Operationen und die stören sich gegenseitig :((

Antworten
LitteM
  • Forum-Beiträge: 141

26.07.2013, 01:46:11 via Website

Wenn dein Thread auf UI Elemente zugreifen können muss, hilft dir vielleicht das Stichwort Handler weiter :)

/edit: Oder wie im Post vor mir erwähnt AsyncTask ;)

— geändert am 26.07.2013, 01:46:38

Antworten
impjor
  • Forum-Beiträge: 1.793

26.07.2013, 11:34:39 via App

Versuch mal:
1Handler handler = new Handler();
2handler.postDelayed(new Runnable() {
3public void run() {
4//deine Operationen durchführen
5handler.postDelayed(this, 5000);
6}
7}, 5000);

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten