J'essaye d'animer mon appBar en utilisant un ViewDragHelper, quand je le fais glisser vers le bas il devrait commencer une animation et descendre. En plus j'ai une autre vue (rose en the example) qui "suit" mon appbar avec un comportement (la vue de dessus dépend de AppBarLayout). L'appbar est animée mais la position "réelle" ne change pas et, évidemment, mon image supérieure ne bouge pas.Android - Animer une vue et changer sa position réelle (et une autre vue suivre avec dépendance au comportement)
Pour animer j'utiliser le code suivant:
@Override
public void onViewReleased(final View releasedChild, float xvel, float yvel) {
super.onViewReleased(releasedChild, xvel, yvel);
if (releasedChild.getTop() > childHeight) {
Log.e("TAG", "SHOULD SCROLL " + releasedChild.getTop() + " > " + childHeight);
final int offset = height - releasedChild.getTop() - 100;
ViewCompat.animate(releasedChild).translationY(offset).setDuration(1000).setInterpolator(new OvershootInterpolator()).start();
} else {
Log.e("TAG", "SHOULD NOT SCROLL " + releasedChild.getTop() + " < " + childHeight);
eleasedChild.offsetTopAndBottom(-releasedChild.getTop());
}
if (mDragFrameLayoutController != null) {
mDragFrameLayoutController.onDragDrop(false);
}
}
J'ai essayé avec beaucoup d'autres animations:
TranslateAnimation scale = new TranslateAnimation(0.0f, 0.0f, 0.f, offset);
scale.setInterpolator(new OvershootInterpolator());
scale.setDuration(3000L);
scale.setFillEnabled(true);
scale.setFillAfter(true);
scale.setAnimationListener(new Animation.AnimationListener() {
ou
ObjectAnimator moveY = ObjectAnimator.ofInt(releasedChild, "y", releasedChild.getTop(), offset);
AnimatorSet as = new AnimatorSet();
as.play(moveY);
as.start();
Tous ces extraits me donnent le même résultat.
La seule manière que je trouvais pour déplacer la vue est en offset, mais cela n'anime pas, il se déplace juste en bas ...
releasedChild.offsetTopAndBottom(offset);
Toute idée? Merci.