ViewDragHelper를 사용하여 appBar에 애니메이션을 적용하려고하는데 애니메이션을 시작하고 아래로 드래그해야합니다.Android -보기 애니메이션 및 실제 위치 변경 (그리고 다른보기는 동작 종속성을 따릅니다.)
맨 위에 또 다른보기 (핑크 in the example)가 내 appbar에 "따라 가기"동작 (상단보기는 AppBarLayout에 달려 있음)이 있습니다.
As you can see here은 appbar는 애니메이션하지만 "진짜"위치는 분명, 내 상단 프레임이 이동하지 않습니다, 변경되지 않습니다. 나는 많은 다른 애니메이션과 시도했습니다
@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);
}
}
:
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() {
또는
ObjectAnimator moveY = ObjectAnimator.ofInt(releasedChild, "y", releasedChild.getTop(), offset);
AnimatorSet as = new AnimatorSet();
as.play(moveY);
as.start();
이 모든 조각이 날 줄 내가 다음 코드를 사용하여 애니메이션을하기 위해
동일한 결과.
I 오프셋을 사용하는 뷰를 이동 찾았지만이 그냥 아래로 이동, 애니메이션하지 않는 유일한 방법 ...
releasedChild.offsetTopAndBottom(offset);
어떤 생각? 감사.
내 viewDragHelper에 나는 다음과 같은 방법을 오버라이드 :
@Override
public void computeScroll() {
super.computeScroll();
if (mDragHelper.continueSettling(true)) {
ViewCompat.postInvalidateOnAnimation(this);
}
}
그리고 모든 : 내 사용자 정의보기에 다음
@Override
public int getViewVerticalDragRange(View child) {
return getMeasuredHeight() - child.getMeasuredHeight();
}
@Override
public void onViewReleased(View releasedChild, float xvel, float yvel) {
super.onViewReleased(releasedChild, xvel, yvel);
if(yvel>0) {
mDragHelper.settleCapturedViewAt(releasedChild.getLeft(), getMeasuredHeight()-releasedChild.getMeasuredHeight());
} else {
mDragHelper.settleCapturedViewAt(releasedChild.getLeft(), 0);
}
invalidate();
}
나는 다음과 같은 방법을 오버라이드