Android – Modifica il margine sinistro utilizzando l'animation

Cambiando il margine sinistro di una visualizzazione image nel modo seguente:

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

Vorrei che la modifica del margine venisse applicata con l'animation. Qualsiasi indizio?

  • Nessuna attività trovata per gestire intent action.dial
  • Android ClassCastException M: FrameLayout $ LayoutParams non può essere lanciato in WindowManager $ LayoutParams
  • Come giocare il video .mp4 in videoview in android?
  • Android carica l'image da galleria a server
  • Android: Come rendere TextView modificabile?
  • Nessun errore "Solo il thread originale che ha creato una gerarchia di visualizzazione può toccare le sue viste" quando la visualizzazione viene aggiornata senza indugio
  • Quello che ho provato:

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

    Questo funziona perfettamente, poiché l'image viene spostata nel valore X specificato con l'animation, comunque il valore di layoutParams.leftMargin rimane invariato !! Quindi non posso usare questo metodo perché se cerco di modificare il valore di layoutParams.leftMargin a 100 dopo l'utilizzo dell'objectAnimatore con il valore 100, il valore applicato non è corretto (200 viene applicato invece di 100, l'effetto se l' objectAnimatore rimane anche se imposta il margine sinistro nel seguente modo:

     layoutParams.leftMargin = 100; 

  • Redirect stdout a logcat in Android NDK
  • Android Game Framework
  • Crittografia dei dati in Android
  • Ottieni il codice di stato HTTP per le richieste di successo con Volley
  • Come scorrere fino alla parte superiore del layout ScrollView lungo?
  • Creazione di LinearLayout in Java - Elementi non vengono visualizzati
  • 3 Solutions collect form web for “Android – Modifica il margine sinistro utilizzando l'animation”

    Utilizza la class Animazione, non 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); 

    Si prega di notare che dovresti utilizzare la class LayoutParams corretta, vale a dire se la tua vista è figlia di LinearLayout allora i params devono essere LinearLayout.LayoutParams

    Sono venuto da questa domanda, ma non ho potuto utilizzarlo perché voglio animare il margine da un valore negativo a 0, quindi ho usato la base valueAnimater per la risposta user1991679:

     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(); 

    È necessario modificare LinearLayout.LayoutParams in base al contenitore animatedView. Inoltre è ansible utilizzare noveoldandroidi per la versione precedente che non dispone di ValueAnimator.

    È ansible utilizzare quanto segue

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

    È inoltre ansible aggiungere .setInterpolator(new BounceInterpolator()) per modificare l'aspetto dell'animation.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.