Exception bei ObjectAnimator

  • Antworten:11
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 6

12.02.2016, 19:43:19 via Website

Hallo, ich versuche mehrere Eigenschaften wie z.b. den Status einer ProgressBar oder die X-Verschiebung eines ImageView mithilfe eines ObjectAnimators zu animieren. So z.B.:
ObjectAnimator Anim1 = new ObjectAnimator();
Anim1.ofInt(ImgV1, "x", 100);
Anim1.setDuration(1000);
Anim1.setInterpolator(new LinearInterpolator());
Anim1.start();
Ich scheitere aber ständig daran, da immer wenn die start()-Methode aufgerufen wird eine Exception ("RuntimeInit$UncaughtHandler") ausgelöst wird.
Und ja, ich habe mittlerweile in der Dokumentation über die start()-Methode folgendes gelesen: "This thread should have a Looper on it (a runtime exception will be thrown if this is not the case)."
Aber wie setzte ich ein Looper Objekt auf den ObjectAnimator? Wie funktioniert das? Ist der nicht standardmäßig schon dabei? Denn wenn ich mir die etlichen Codebeispiele mit einem Objectanimator in irgenwelchen Foren angucke, scheint keiner sich um irgenein Looper gedanken zu machen. Die schreiben die selben Codezeilen wie oben aufgeführt hin und dann funktioniert es. Könntet ihr die oben stehenden Codezeilen also ohne weiteres ausführen? (Die Varible "ImgV1" ist natürlich oben schon erzeugt worden oder mit XML verknüpft)

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.177

12.02.2016, 20:56:28 via Website

Eigentlcih muss das so gehen.
Läuft das zufällig in einem anderen Thread oder asyncTask?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 6

12.02.2016, 23:01:14 via Website

Das eine steht in der OnTouch()-Methode, das andere am Ende von OnCreate(). Bei beiden das selbe. Sobald die Animation gestartet wird bricht die App ab.

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.177

13.02.2016, 00:04:31 via App

hast du auch die vollständige Exception

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 6

13.02.2016, 14:17:13 via Website

FATAL EXCEPTION: main

Caused by: java.lang.NullPointerException: Attempt to get length of null array
at android.animation.ValueAnimator.initAnimation(ValueAnimator.java:497)
at android.animation.ObjectAnimator.initAnimation(ObjectAnimator.java:856)
at android.animation.ValueAnimator.setCurrentFraction(ValueAnimator.java:571)
at android.animation.ValueAnimator.setCurrentPlayTime(ValueAnimator.java:550)
at android.animation.ValueAnimator.start(ValueAnimator.java:1039)
at android.animation.ValueAnimator.start(ValueAnimator.java:1050)
at android.animation.ObjectAnimator.start(ObjectAnimator.java:829)
at ac_blad.testproject_2.MainActivity.onCreate(MainActivity.java:54)
at android.app.Activity.performCreate(Activity.java:5990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
at android.app.ActivityThread.access$800(ActivityThread.java:151) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5254) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372)

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.177

13.02.2016, 15:01:37 via Website

Was steht denn in "MainActivity.onCreate(MainActivity.java:54)"
Main Activity Zeile 54?
Also da ist ein Array nicht gesetzt oder null, deswgen geht es nicht.
Das hat mit dem ObjectAnimator erstmal nix zutun

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 6

13.02.2016, 15:36:05 via Website

Ja doch, Zeile 54 ist ja eben der Aufruf des ObjectAnimators mit .start(). Also "Anim1.start(); "
Setzte ich einen Breakpoint an dieser Zeile und versuche dann einen Schritt weiter zu gehen wird die Exception ausgelöst.

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.177

13.02.2016, 15:47:44 via Website

Ok, es wird ein Int-Array Erwartet, du übergibst aber nur eine Integer variable bei
Anim1.ofInt(...);

Description:

public static ObjectAnimator ofInt (Object target, String propertyName, int... values)

Tipp: int... values ist eine alternativschreibweise zum int array

LG Pascal //It's not a bug, it's a feature. :) ;)

Bladein K.

Antworten
  • Forum-Beiträge: 6

13.02.2016, 16:03:42 via Website

Also es steht eigentlich schon in der Doku so geschrieben, das man auch einen einzelnen Int Wert übergeben kann: "A single value implies that that value is the one being animated to." Dann müsste das View 100 pixel weiter wandern. Und zwei Werte( also von bis) hab ich auch schon versucht: z.B. Anim1.ofInt(ImgV1, "x", 100, 300);
"Two values imply starting and ending values" Funktioniert aber eben so wenig...

Wenn die Argumente der ofInt-Methode nicht stimmen würden, dann würde doch schon an dieser Zeile eine Exception geworfen. Ich habs auch schon mit anderen Eigenschaften wie "rotation" oder "translateX" oder auch mit ofFloat probiert, aber leider immer eine Exception ab der Zeile .start();

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.177

13.02.2016, 16:18:54 via Website

Da weiss ich leider auch nicht weiter.
Arbeite nicht viel mit Animationen.
Bisher habe ich nur mit der TranslateAnimation gearbeitet.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Ludy
  • Mod
  • Blogger
  • Forum-Beiträge: 7.167

13.02.2016, 16:43:14 via Website

Hallo Bladein K.,

herzlich willkommen hier im Forum (*)

schau mal hier, ob es funktioniert

    float dest = 0;
    ImageView aniView = (ImageView) findViewById(R.id.imageView);
    dest = 360;
    if (aniView.getRotation() == 360) {
        System.out.println(aniView.getAlpha());
        dest = 0;
    }
    ObjectAnimator animation1 = ObjectAnimator.ofFloat(aniView,
            "rotation", dest);
    animation1.setDuration(2000);
    animation1.setInterpolator(new LinearInterpolator());
    animation1.start();

ObjectAnimator wird nicht mit new erstellt ;-)

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

Lebensmittelwarnung App-Thread

Download Samsung Firmware Tool

Bladein K.Pascal P.

Antworten
  • Forum-Beiträge: 6

13.02.2016, 22:09:01 via Website

Jap, tatsächlich jetzt funktioniert es:) Da hab ich mich von Routineschreibweisen in die Irre führen lassen. ofInt oder ofFloat sind ja statische Methoden die keine Objekterzeugung brauchen.....Vielen Dank Ludy und Pascal P.

Ludy

Antworten

Empfohlene Artikel