Changing the ActionBar hide animation?
A hack for disabling the ActionBar animation (found by inspecting the source code) can be done through introspection via:
try
{
getActionBar().getClass().getDeclaredMethod("setShowHideAnimationEnabled", boolean.class).invoke(getActionBar(), false);
}
catch (Exception exception)
{
// Too bad, the animation will be run ;(
}
Ugly, of course, but this actually work, at least from Android v4.2.
No.
At least not in 3.0, 3.1, or 3.2. If you look at the decompiled sources of com.android.internal.app.ActionBarImpl
you'll find that the animations are hard-coded.
E.g., from 3.2:
.method public hide()V
.locals 8
.prologue
const/4 v5, 0x0
const/4 v7, 0x0
const/4 v6, 0x1
.line 529
iget-object v2, p0, Lcom/android/internal/app/ActionBarImpl;->mCurrentAnim:Landroid/animation/Animator;
if-eqz v2, :cond_0
.line 530
iget-object v2, p0, Lcom/android/internal/app/ActionBarImpl;->mCurrentAnim:Landroid/animation/Animator;
invoke-virtual {v2}, Landroid/animation/Animator;->end()V
.line 532
:cond_0
iget-object v2, p0, Lcom/android/internal/app/ActionBarImpl;->mContainerView:Lcom/android/internal/widget/ActionBarContainer;
invoke-virtual {v2}, Lcom/android/internal/widget/ActionBarContainer;->getVisibility()I
move-result v2
const/16 v3, 0x8
if-ne v2, v3, :cond_1
.line 553
:goto_0
return-void
.line 536
:cond_1
iget-boolean v2, p0, Lcom/android/internal/app/ActionBarImpl;->mShowHideAnimationEnabled:Z
if-eqz v2, :cond_3
.line 537
iget-object v2, p0, Lcom/android/internal/app/ActionBarImpl;->mContainerView:Lcom/android/internal/widget/ActionBarContainer;
const/high16 v3, 0x3f80
invoke-virtual {v2, v3}, Lcom/android/internal/widget/ActionBarContainer;->setAlpha(F)V
.line 538
iget-object v2, p0, Lcom/android/internal/app/ActionBarImpl;->mContainerView:Lcom/android/internal/widget/ActionBarContainer;
invoke-virtual {v2, v6}, Lcom/android/internal/widget/ActionBarContainer;->setTransitioning(Z)V
.line 539
new-instance v0, Landroid/animation/AnimatorSet;
invoke-direct {v0}, Landroid/animation/AnimatorSet;-><init>()V
.line 540
.local v0, anim:Landroid/animation/AnimatorSet;
iget-object v2, p0, Lcom/android/internal/app/ActionBarImpl;->mContainerView:Lcom/android/internal/widget/ActionBarContainer;
const-string v3, "alpha"
new-array v4, v6, [F
aput v5, v4, v7
invoke-static {v2, v3, v4}, Landroid/animation/ObjectAnimator;->ofFloat(Ljava/lang/Object;Ljava/lang/String;[F)Landroid/animation/ObjectAnimator;
move-result-object v2
invoke-virtual {v0, v2}, Landroid/animation/AnimatorSet;->play(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;
move-result-object v1
.line 541
.local v1, b:Landroid/animation/AnimatorSet$Builder;
iget-object v2, p0, Lcom/android/internal/app/ActionBarImpl;->mContentView:Landroid/view/View;
if-eqz v2, :cond_2
.line 542
iget-object v2, p0, Lcom/android/internal/app/ActionBarImpl;->mContentView:Landroid/view/View;
const-string/jumbo v3, "translationY"
const/4 v4, 0x2
new-array v4, v4, [F
aput v5, v4, v7
iget-object v5, p0, Lcom/android/internal/app/ActionBarImpl;->mContainerView:Lcom/android/internal/widget/ActionBarContainer;
invoke-virtual {v5}, Lcom/android/internal/widget/ActionBarContainer;->getHeight()I
move-result v5
neg-int v5, v5
int-to-float v5, v5
aput v5, v4, v6
invoke-static {v2, v3, v4}, Landroid/animation/ObjectAnimator;->ofFloat(Ljava/lang/Object;Ljava/lang/String;[F)Landroid/animation/ObjectAnimator;
move-result-object v2
invoke-virtual {v1, v2}, Landroid/animation/AnimatorSet$Builder;->with(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;
.line 544
iget-object v2, p0, Lcom/android/internal/app/ActionBarImpl;->mContainerView:Lcom/android/internal/widget/ActionBarContainer;
const-string/jumbo v3, "translationY"
new-array v4, v6, [F
iget-object v5, p0, Lcom/android/internal/app/ActionBarImpl;->mContainerView:Lcom/android/internal/widget/ActionBarContainer;
invoke-virtual {v5}, Lcom/android/internal/widget/ActionBarContainer;->getHeight()I
move-result v5
neg-int v5, v5
int-to-float v5, v5
aput v5, v4, v7
invoke-static {v2, v3, v4}, Landroid/animation/ObjectAnimator;->ofFloat(Ljava/lang/Object;Ljava/lang/String;[F)Landroid/animation/ObjectAnimator;
move-result-object v2
invoke-virtual {v1, v2}, Landroid/animation/AnimatorSet$Builder;->with(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;
.line 547
:cond_2
iget-object v2, p0, Lcom/android/internal/app/ActionBarImpl;->mHideListener:Landroid/animation/Animator$AnimatorListener;
invoke-virtual {v0, v2}, Landroid/animation/AnimatorSet;->addListener(Landroid/animation/Animator$AnimatorListener;)V
.line 548
iput-object v0, p0, Lcom/android/internal/app/ActionBarImpl;->mCurrentAnim:Landroid/animation/Animator;
.line 549
invoke-virtual {v0}, Landroid/animation/AnimatorSet;->start()V
goto :goto_0
.line 551
.end local v0 #anim:Landroid/animation/AnimatorSet;
.end local v1 #b:Landroid/animation/AnimatorSet$Builder;
:cond_3
iget-object v2, p0, Lcom/android/internal/app/ActionBarImpl;->mHideListener:Landroid/animation/Animator$AnimatorListener;
const/4 v3, 0x0
invoke-interface {v2, v3}, Landroid/animation/Animator$AnimatorListener;->onAnimationEnd(Landroid/animation/Animator;)V
goto :goto_0
.end method
UPDATE
Same goes for ICS and JellyBean