我写了一个小活动,可以在两个视图之间切换.现在我想添加一些动画(淡入/淡出效果).任何人都可以解释我该怎么做对吗?
我自己尝试这样做的工作有点儿(如果我会非常快地点击按钮,我的应用程序会冻结).我使用下面列出的代码:
public class WelcomeActivity extends Activity { private boolean isLogin = false; private String KEY_IS_LOGIN = "KEY_IS_LOGIN"; private Animation anim_fadein; private RelativeLayout welcome,login; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); welcome = (RelativeLayout)getLayoutInflater().inflate(R.layout.activity_welcome_menu,null); login = (RelativeLayout)getLayoutInflater().inflate(R.layout.activity_welcome_login,null); anim_fadein = AnimationUtils.loadAnimation(this,R.anim.anim_fadein); if (savedInstanceState != null) isLogin = savedInstanceState.getBoolean(KEY_IS_LOGIN,false); if (isLogin) setContentView(login); else setContentView(welcome); } @Override public void onBackPressed() { if (isLogin) { setContentView(welcome); welcome.startAnimation(anim_fadein); isLogin = false; } else { super.onBackPressed(); } } @Override public void onSaveInstanceState(Bundle outState) { outState.putBoolean(KEY_IS_LOGIN,isLogin); super.onSaveInstanceState(outState); } public void onButton1Click(View v) { setContentView(login); login.startAnimation(anim_fadein); } public void onButtonLoginClick(View v) { Intent i = new Intent(getApplicationContext(),MainActivity.class); startActivity(i); } public void onButtonBackClick(View v) { setContentView(welcome); welcome.startAnimation(anim_fadein); }
动画XML文件:
<?xml version="1.0" encoding="utf-8"?> <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="800" />
提前致谢!
解决方法
我过去这样做的方法是使用
ViewFlipper类并利用包提供的内置动画功能.
这是一个如何做到这一点的例子;根据我的经验,过渡非常顺利:
XML文件
<LinearLayout //Ommitted... <ViewFlipper android:id="@+id/[your_id_here]" android:layout_width="fill_parent" android:layout_height="fill_parent"> <RelativeLayout <!--Your first layout XML here...--> </RelativeLayout> <RelativeLayout <!--Your second layout XML here...--> </RelativeLayout> </ViewFlipper> </LinearLayout>
请注意,您不必使用相对布局,我只是为了清晰起见而使用它们.
实现动画
在您的活动中获取对ViewFlipper的引用:
ViewFlipper v = (ViewFlipper) findViewById(R.id.[your_id]);
根据需要设置动画:
v.setInAnimation(AnimationUtils.loadAnimation([your_activity_name].this,R.anim.[your_in_animation here])); v.setOutAnimation(AnimationUtils.loadAnimation([your_activity_name].this,R.anim.[your_out_animation here]));
请注意,您可以在位于以下目录中的Android类文件中找到一些非常好的预建动画:
[android-sdks]/samples/android-[VERSION_NUMBER_HERE]/ApiDemos/res/anim
如果可以的话,我强烈推荐使用它们 – 它会为你节省很多时间.
现在,如果要在视图之间切换,请使用以下命令:
v.showNext(); v.showPrevIoUs();
您可能需要稍微更改动画文件以确保动画正确转换(即,使左右动画淡入淡出).
希望这可以帮助!