मेरे ऐप में मैं का उपयोग करके एक विशिष्ट ईवेंट पर AppBarLayout
का विस्तार या अनुबंध करता हूं।AppBarLayout.setExpanded (बूलियन, सच) समर्थन लाइब्रेरी में अजीब एनीमेशन 23.1.1
मुझे com.android.support:design:23.1.0
का उपयोग करके एक स्नैपी और तरल एनीमेशन के साथ अच्छा परिणाम मिला है, तो मैंने 23.1.1
पर अपडेट किया और एनीमेशन बहुत धीमा हो गया और बिल्कुल भी नहीं।
android.support.design.widget.AppBarLayout
के स्रोत कोड में, मैं animateOffsetTo
में समस्या स्थित (public static class Behavior extends HeaderBehavior<AppBarLayout>
से कम), उस संस्करण में 23.1.0 इस तरह था:
private void animateOffsetTo(final CoordinatorLayout coordinatorLayout,
final AppBarLayout child, int offset) {
if (mAnimator == null) {
mAnimator = ViewUtils.createAnimator();
mAnimator.setInterpolator(AnimationUtils.DECELERATE_INTERPOLATOR);
mAnimator.setUpdateListener(new ValueAnimatorCompat.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimatorCompat animator) {
setHeaderTopBottomOffset(coordinatorLayout, child,
animator.getAnimatedIntValue());
}
});
} else {
mAnimator.cancel();
}
mAnimator.setIntValues(getTopBottomOffsetForScrollingSibling(), offset);
mAnimator.start();
}
और संस्करण 23.1.1 इस तरह है में :
private void animateOffsetTo(final CoordinatorLayout coordinatorLayout,
final AppBarLayout child, final int offset) {
final int currentOffset = getTopBottomOffsetForScrollingSibling();
if (currentOffset == offset) {
if (mAnimator != null && mAnimator.isRunning()) {
mAnimator.cancel();
}
return;
}
if (mAnimator == null) {
mAnimator = ViewUtils.createAnimator();
mAnimator.setInterpolator(AnimationUtils.DECELERATE_INTERPOLATOR);
mAnimator.setUpdateListener(new ValueAnimatorCompat.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimatorCompat animator) {
setHeaderTopBottomOffset(coordinatorLayout, child,
animator.getAnimatedIntValue());
}
});
} else {
mAnimator.cancel();
}
// Set the duration based on the amount of dips we're travelling in
final float distanceDp = Math.abs(currentOffset - offset)/
coordinatorLayout.getResources().getDisplayMetrics().density;
mAnimator.setDuration(Math.round(distanceDp * 1000/ANIMATE_OFFSET_DIPS_PER_SECOND));
mAnimator.setIntValues(currentOffset, offset);
mAnimator.start();
}
मैं विस्तार/अनुबंध एनीमेशन कैसे बदल सकता हूं और तेज़ी से कर सकता हूं?
सेट अवधि बदलें ??? ... –
क्या आप वाकई यह सही समस्या है जो आप इंगित कर रहे हैं ??? – Pankaj
@MicheleLacorte: कैसे? यह com.android.support:design – Nifhel