我需要显示一个淡入淡出的图像按钮(以及淡入淡出等等......)可以使用 setAlpha 设置透明度,但我该如何淡入和淡出?我的意思是我不能在另一个线程上执行此操作,因为您需要在 UI 线程上执行此类操作,对吗?
我想它可以用动画来完成,但我没有找到任何东西,因为我没有任何动画经验,也不知道要搜索什么......
实际上,我真正想要的是淡入一个图像,另一个淡出,但我想最简单的方法是将第一个图像按钮放在第二个图像按钮下方,然后淡化第二个图像按钮。或者有更简单的方法吗?
这是我现在使用的解决方案,适用于低于 12 的 API 级别:
AlphaAnimation anim = new AlphaAnimation(1.0f, 0.0f);
anim.setDuration(1000);
anim.setRepeatCount(NUM_REPEATS);
anim.setRepeatMode(Animation.REVERSE);
button.startAnimation(anim);
这是我们在项目中使用的动画。Spinner 是一个视图,因此您可以使用 imageview 更改它。所以确实有 2 张图像相互重叠,一张可见,一张不可见。我们就是这样做的。希望能帮助到你。
spinner.setVisibility(View.VISIBLE);
spinner.setAlpha(0);
spinner.animate().setDuration(200).alpha(1).setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
spinner.setVisibility(View.VISIBLE);
}
});
infoActivityContent.animate().setDuration(200).alpha(0).setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
infoActivityContent.setVisibility(View.GONE);
mainPresenter.logout();
}
});
您必须从 阅读交叉淡化两个视图Android developers
。在本教程中解释了如何做你想做的事。
在科特林:
view.animate().alpha(1f).setDuration(1000)
.setInterpolator(AccelerateInterpolator()).start()
您可以添加一个AnimatorListenerAdapter
insetListener
来处理其他视图状态。
您可以将第一张图像的多个连续帧变形为第二张图像并返回,然后将它们定义为animation-list
并在 onCreate 中启动动画
button_frames.xml:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/frame1" android:duration="100" />
<item android:drawable="@drawable/frame2" android:duration="100" />
....
布局:
<ImageView android:id="@+id/button"
android:background="@drawable/button_frames"/>
创建时:
ImageView button= (ImageView)findViewById(R.id.button);
mAnimation = (AnimationDrawable) animationView.getBackground();
button.postDelayed(new Runnable() {
public void run() {
mAnimation.start();
}
}, 100);
实现动画类(您可以通过 XML 加载它或动态创建它)。
然后你可以通过 API setAnimation(Animation animation) 来设置它。