我想尝试逐渐淡出图像(这样它就看不见了),然后立即反转,这样它就又逐渐变得可见了。
我有一个简单的Xamarin Android应用程序,背景为纯黑色,ImageView
显示图像,Button
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:background="@android:color/black">
<ImageView
android:id="@+id/imageView"
android:layout_width="400px"
android:layout_height="400px"
android:scaleType="centerInside"
android:src="@drawable/clownfish"/>
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
在OnCreate()
中,我将图像设置为完全不透明,并为按钮设置了一个单击处理程序:
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.activity_main);
this.FindViewById<ImageView>(Resource.Id.imageView).Alpha = 1.0f;
FindViewById<Button>(Resource.Id.btn).Click += Btn_Click;
}
在单击处理程序中,我创建了一对动画,每个动画的持续时间为5秒,将第二个动画设置为5秒后开始,将它们添加到AnimationSet
中,并在ImageView
上设置动画:
private void Btn_Click(object sender, EventArgs e)
{
const long duration = 5000L;
var imgView = this.FindViewById<ImageView>(Resource.Id.imageView);
var fadeOut = new AlphaAnimation(1f, 0f) // fully opaque -> fully transparent
{
Interpolator = new AccelerateInterpolator(),
Duration = duration
};
var fadeIn = new AlphaAnimation(0f, 1f) // fully transparent -> fully opaque
{
Interpolator = new AccelerateInterpolator(),
Duration = duration
};
fadeIn.StartOffset = duration;
var animSet = new AnimationSet(false);
animSet.AddAnimation(fadeOut);
animSet.AddAnimation(fadeIn);
imgView.StartAnimation(animSet);
}
当我点击按钮时,ImageView
立即变为透明,10秒后又立即变为完全不透明。没有从不透明到透明再回到不透明的渐变。我不明白为什么这不能达到我想要的效果。
如果我将click处理程序中的AnimationSet
代码替换为:
fadeOut.AnimationEnd += (s, e) => { imgView.StartAnimation(fadeIn); };
imgView.StartAnimation(fadeOut);
那么动画就可以正常工作了。我对代码的工作很满意,尤其是它更简短,而且我理解它的作用-但我不明白为什么使用AnimationSet
的方法不能执行平滑的动画。由于这是一个学习练习,有人能给我解释一下为什么第一种方法不起作用吗?谢谢。
1条答案
按热度按时间sz81bmfz1#
基于您的代码,我创建了一个演示,并实现了这个功能.
您可以参考以下代码:
1.设置此图像的属性
android:visibility="invisible"
。2.函数
Btn_Click