2014-12-17 13 views

Antwort

6

Leider die native ActionBar belebende Zeit scheint 4.1 in der Android source code nach Version hartcodiert werden (ohne Attribute, keine Dimensionen, keine Methoden) und es wird auf 250ms :

Beispiel des implementaiton von actionbar.hide() Methode in 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); 

Dies geschieht auch auf 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); 
     } 
    } 

Vor 4.1 (z.B. 4.0.1) Es gibt keinen fest codierten Wert für die Dauer (tatsächlich gibt es überhaupt keinen Wert). Sie können Reflection trotzdem verwenden, um nach der ersten Animation auf die Dauer Animator zuzugreifen. Das Feld für den Zugriff ist folgende:

private Animator mCurrentShowAnim; 

Ich weiß, dass dies keine vollständige Antwort, aber ich denke, es ist auf jeden Fall hilfreich sein könnte.

-3

eh @vincentzhou Ihre Frage nicht gut strukturiert ist, aber ich, was diese können Sie einige Führer geben, wie die Zeit einzustellen, Sie möchten, dass Sie Element in JavaScript manipulieren

$(document).ready(function(){ 
     $('#action').show(); 
     setTimeout(function() { 
     $('#action').fadeOut(); 
    }, 5000); 
    }); 

dies wird das Element angezeigt mit id="action" für 5s. hoffe es kann helfen

+0

Es tut mir leid, aber ich denke, dass ich eine Frage zu android bin zu fragen. – vincentzhou

-3

ActionBar.Show - Zeigt die ActionBar an, wenn sie gerade nicht angezeigt wird. Daran ist keine Dauer geknüpft. Es macht die ActionBar sichtbar, bis ein actionBar.Hide aufgerufen wird.

Hope this klärt

+0

Ich weiß. Aber wenn Sie actionbar.show() aufrufen, wird die Aktionsleiste mit einer Animation angezeigt. – vincentzhou

+0

Ich meine die Dauer dieser Animation. – vincentzhou

0

Zumindest in 4.3 war es 250ms.

Siehe die Quelle here

+0

Glaubst du? Oder ist das tatsächlich der Fall? Bitte schreiben Sie Ihre Antwort konkreter um. Wie es aussieht, sieht diese Antwort wie ein Kommentar aus. – JAL

Verwandte Themen