2011-11-03 104 views
0

我正在开发我的第一个Android项目,并且我将首先制作一个简单的启动画面,在主菜单显示前淡出为黑色。到目前为止它的工作。问题在图像淡出后立即出现,在显示主菜单之前,它瞬间弹回一秒。淡出问题 - Android动画

下面是SplashActivity.java代码:

public class SplashActivity extends Activity 
{ 
LinearLayout mLinearLayout; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.splash); 

    mLinearLayout = new LinearLayout(this); 


    ImageView i = new ImageView(this); 
    i.setImageResource(R.drawable.splash); 
    mLinearLayout.addView(i); 
    setContentView(mLinearLayout); 

    Animation fade = AnimationUtils.loadAnimation(this, R.anim.fade_out); 
    i.startAnimation(fade); 

    fade.setAnimationListener(new AnimationListener() { 
     public void onAnimationEnd(Animation animation) 
     { 
      startActivity(new Intent(SplashActivity.this, MenuActivity.class)); 
      SplashActivity.this.finish(); 
     } 

     public void onAnimationRepeat(Animation arg0) {    
     } 

     public void onAnimationStart(Animation arg0) { 
     } 
    }); 
} 
} 

下面是splash.xml代码:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout 
xmlns:android = "http://schemas.android.com/apk/res/android" 
android:orientation = "vertical" 
android:layout_width = "match_parent" 
android:layout_height = "match_parent" 
android:background = "#000"> 
</LinearLayout> 

最后,这里是为淡出XML:

<set android:shareInterpolator="false" xmlns:android="http://schemas.android.com/apk/res/android"> 
    <alpha 
    android:fromAlpha="1.0" 
    android:toAlpha="0.0" 
    android:duration="500" 
    android:startOffset="2500"> 
    </alpha> 
</set> 

一对夫妇笔记: 现在的初始屏幕只是为了表演(意思是我知道ri现在它没有达到任何真正的目的)。 我可以粘贴AndroidManifest xml或其他您认为可能需要的东西。

任何和所有的帮助表示赞赏。谢谢!

回答

3

动画结束,然后翻转回到以前的样子。 Android动画令人困惑,但想象一下你所看到的只是一场海市蜃楼。没有任何关于您正在进行动画制作的视图的变化。一旦完成,它就会回到原来的状态。

作为一个例子,创建一个按钮100dp x 100dp,并通过缩放动画缩小或旋转。非常缓慢地。就其运行而言,如果您点击空白区域,该按钮仍会注册该命中。那是因为它仍然“存在”,但你没有看到它。

你需要做的是设置在动画听众在图像上可见:

public void onAnimationEnd(Animation animation) 
    { 
     startActivity(new Intent(SplashActivity.this, MenuActivity.class)); 
     SplashActivity.this.finish(); 
     i.setVisibility(View.INVISIBLE); 
    } 

可能需要做的onAnimationStart。实验。

我在这段时间做了一个演示。可能是有用的:

https://docs.google.com/present/view?id=djqv5kb_187c62jvbf7

+1

请注意,您也可以调用'fade.setFillAfter(true)';这将在动画结束时将最终结果应用于视图。 – dmon

2

这将有助于。

public void onAnimationEnd(Animation animation) 
     { 
      i.setVisibility(View.INVISIBLE); 
      startActivity(new Intent(SplashActivity.this, MenuActivity.class)); 
      SplashActivity.this.finish(); 
     } 
+0

这很好,谢谢。 – vince88