gpt4 book ai didi

android - 使用交叉淡入淡出动画在 View 之间切换

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:51:10 24 4
gpt4 key购买 nike

我编写了一个能够在两个 View 之间切换的小 Activity 。现在我正在尝试添加一些动画(淡入/淡出效果)。任何人都可以向我解释如何正确地做到这一点吗?

我自己尝试执行此操作有点错误(如果我非常快速地单击按钮,我的应用程序会卡住)。我使用下面列出的代码:

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>

请注意,您不必使用相对布局,我只是为了清楚起见才使用它们。

实现动画

在您的 Activity 中获取对 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

如果可以的话,我强烈建议您使用这些 - 它会为您节省很多时间。

现在,如果您想在 View 之间切换,请使用以下命令:

v.showNext();
v.showPrevious();

您可能需要稍微更改动画文件以确保动画正确过渡(即制作淡入淡出的右左动画)。

希望这对您有所帮助!

关于android - 使用交叉淡入淡出动画在 View 之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13237224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com