Я хочу сделать анимацию, когда анимационная панель активирована. Тем не менее, я не знаю продолжительность анимации actionbar.
Какова продолжительность анимации actionbar.show() и hide()
Ответ 1
К сожалению, встроенное время анимации азартных файлов кажется жестко закодированным в исходном коде Android после версии 4.1 (без атрибутов, нет измерений, нет методов), и он установлен на 250 мс:
Пример реализации метода actionbar.hide()
в Android 4.1/4.4:
public void doHide(boolean fromSystem) {
if (mCurrentShowAnim != null) {
mCurrentShowAnim.end();
}
if (mCurWindowVisibility == View.VISIBLE && (mShowHideAnimationEnabled
|| fromSystem)) {
mContainerView.setAlpha(1);
mContainerView.setTransitioning(true);
AnimatorSet anim = new AnimatorSet();
float endingY = -mContainerView.getHeight();
if (fromSystem) {
int topLeft[] = {0, 0};
mContainerView.getLocationInWindow(topLeft);
endingY -= topLeft[1];
}
ObjectAnimator a = ObjectAnimator.ofFloat(mContainerView, View.TRANSLATION_Y, endingY);
a.addUpdateListener(mUpdateListener);
AnimatorSet.Builder b = anim.play(a);
if (mContentAnimations && mContentView != null) {
b.with(ObjectAnimator.ofFloat(mContentView, View.TRANSLATION_Y,
0, endingY));
}
if (mSplitView != null && mSplitView.getVisibility() == View.VISIBLE) {
mSplitView.setAlpha(1);
b.with(ObjectAnimator.ofFloat(mSplitView, View.TRANSLATION_Y,
mSplitView.getHeight()));
}
anim.setInterpolator(AnimationUtils.loadInterpolator(mContext,
com.android.internal.R.interpolator.accelerate_cubic));
anim.setDuration(250);
anim.addListener(mHideListener);
mCurrentShowAnim = anim;
anim.start();
} else {
mHideListener.onAnimationEnd(null);
Это также происходит на Lollipop:
public void doHide(boolean fromSystem) {
if (mCurrentShowAnim != null) {
mCurrentShowAnim.end();
}
if (mCurWindowVisibility == View.VISIBLE && (mShowHideAnimationEnabled
|| fromSystem)) {
mContainerView.setAlpha(1);
mContainerView.setTransitioning(true);
AnimatorSet anim = new AnimatorSet();
float endingY = -mContainerView.getHeight();
if (fromSystem) {
int topLeft[] = {0, 0};
mContainerView.getLocationInWindow(topLeft);
endingY -= topLeft[1];
}
ObjectAnimator a = ObjectAnimator.ofFloat(mContainerView, View.TRANSLATION_Y, endingY);
a.addUpdateListener(mUpdateListener);
AnimatorSet.Builder b = anim.play(a);
if (mContentAnimations && mContentView != null) {
b.with(ObjectAnimator.ofFloat(mContentView, View.TRANSLATION_Y,
0, endingY));
}
if (mSplitView != null && mSplitView.getVisibility() == View.VISIBLE) {
mSplitView.setAlpha(1);
b.with(ObjectAnimator.ofFloat(mSplitView, View.TRANSLATION_Y,
mSplitView.getHeight()));
}
anim.setInterpolator(AnimationUtils.loadInterpolator(mContext,
com.android.internal.R.interpolator.accelerate_cubic));
anim.setDuration(250);
anim.addListener(mHideListener);
mCurrentShowAnim = anim;
anim.start();
} else {
mHideListener.onAnimationEnd(null);
}
}
До 4.1 (например, 4.0.1) нет никакого значения продолжительности жесткого кодирования (на самом деле этого нет вообще), в любом случае вы могли бы использовать отражение для доступа к Animator
продолжительность после первой анимации. Поле для доступа следующее:
private Animator mCurrentShowAnim;
Я знаю, что это не полный ответ, но я думаю, что это может быть полезно в любом случае.
Ответ 2
Как минимум в 4.3, это было 250 мс.
Смотрите источник здесь
Ответ 3
eh @vincentzhou ваш вопрос не очень структурирован, но я думаю, что это может дать вам некоторое руководство о том, как установить время, когда вы хотите, чтобы вы манипулировали своим элементом в JavaScript
$(document).ready(function(){
$('#action').show();
setTimeout(function() {
$('#action').fadeOut();
}, 5000);
});
будет отображаться элемент с id="action"
для 5 секунд. надеюсь, что это поможет
Ответ 4
ActionBar.Show - показывает ActionBar, если он пока не отображается. С этим не связана никакая продолжительность. Это делает ActionBar видимым до тех пор, пока не вызывается actionBar.Hide.
Надеюсь, что это разъяснит