Android – Vergrößern Sie den linken Rand mit Animation

Ich ändere den linken Rand einer Bildansicht auf folgende Weise:

ViewGroup.MarginLayoutParams layoutParams = (MarginLayoutParams) image.getLayoutParams (); layoutParams.leftMargin = VALUE; image.setLayoutParams ( layoutParams ); 

Ich möchte die Änderung der Marge, um mit Animation anzuwenden. Irgendwelche Hinweise?

  • Android ListView Divider
  • Android: Kinderteiler in ExpandableListView ausblenden
  • Wie man einen android Peer zu Peer ohne Zwischen-Server?
  • Ändern Sie die Schriftart von ProgressDialog in DialogFragment
  • Gradle 4.0 Eine passende Konfiguration kann nicht gefunden werden
  • Übergeben von Schnittstelle zu Fragment
  • Was ich versuchte:

     ObjectAnimator objectAnimator = ObjectAnimator.ofFloat ( image , "x" , VALUE); objectAnimator.start(); 

    Das funktioniert einwandfrei, da das Bild mit Animation auf den angegebenen X-Wert verschoben wird. HOWEUR bleibt der Wert von layoutParams.leftMargin unverändert !! So kann ich diese Methode nicht verwenden, denn wenn ich versuche, den Wert von layoutParams.leftMargin auf 100 zu ändern, nachdem du den objectAnimator mit dem Wert 100 verwendet hast , ist der angewendete Wert nicht korrekt (200 wird anstelle von 100 angewendet, wenn der objectAnimator bleibt Wenn ich den linken Rand auf folgende Weise setze:

     layoutParams.leftMargin = 100; 

  • RadioButtons mit TextView in RadioGroup
  • Re-Start der Aktivität auf Home-Taste, aber ... nur das erste Mal
  • SURF-Beschreibung schneller mit FAST-Erkennung?
  • "Klasse nicht gefunden" beim Ausführen von JUnit-Tests von IntelliJ IDEA (Android)
  • Zugriff auf eine passwortgeschützte URL
  • INSTALL_FAILED_OLDER_SDK, wenn SDK-Versionen aussehen, wie es funktionieren sollte?
  • 3 Solutions collect form web for “Android – Vergrößern Sie den linken Rand mit Animation”

    Verwenden Sie Animation-Klasse, nicht ObjectAnimator.

     final int newLeftMargin = <some value>; Animation a = new Animation() { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { LayoutParams params = yourView.getLayoutParams(); params.leftMargin = (int)(newLeftMargin * interpolatedTime); yourView.setLayoutParams(params); } }; a.setDuration(500); // in ms yourView.startAnimation(a); 

    Bitte beachten Sie, dass Sie die richtige LayoutParams-Klasse verwenden sollten, dh wenn Ihre Ansicht das Kind von LinearLayout ist, dann sollten Params LinearLayout.LayoutParams sein

    Ich kam durch diese Frage, aber ich konnte es nicht verwenden, weil ich die Marge von einem negativen Wert auf 0 animieren möchte, also habe ich valueAnimater Basis auf user1991679 Antwort:

     final View animatedView = view.findViewById(R.id.animatedView); final LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) animatedView.getLayoutParams(); ValueAnimator animator = ValueAnimator.ofInt(params.bottomMargin, 0); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { params.bottomMargin = (Integer) valueAnimator.getAnimatedValue(); animatedView.requestLayout(); } }); animator.setDuration(300); animator.start(); 

    Sie müssen LinearLayout.LayoutParams nach animatedView-Container ändern. Auch können Sie Nineoldandroids für ältere Version verwenden, die keinen ValueAnimator haben.

    Sie können folgendes verwenden

     image.animate().setDuration(durationIn).translationXBy(offsetFloat).start(); 

    Sie können auch .setInterpolator(new BounceInterpolator()) hinzufügen, um das Aussehen der Animation zu ändern.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.