我需要在点击它后立即为按钮设置动画。所以我制作了一个简单的动画AnimationDrawable:
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item android:drawable="@drawable/gradient_box" android:duration="200" />
<item android:drawable="@drawable/gradient_box_end" android:duration="200" />
</animation-list>
gradient_box和gradient_box_end之间的唯一区别是宽度(相应地为280和180dp):
<?xml version="1.0" encoding="UTF-8" ?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<size
android:width="280dp"
android:height="50dp"/>
<gradient
android:startColor="#FF3366"
android:endColor="#FF3366"
android:angle="180"/>
<padding android:left="7dp"
android:top="7dp"
android:right="7dp"
android:bottom="7dp" />
<corners android:radius="35dp" />
</shape>
按钮在xml layuot中分配了android:background =“@ drawable / gradient_animation”。
MainActivity.cs是:
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Main);
Button buttonlogin = FindViewById<Button>(Resource.Id.button1); //animated button
AnimationDrawable animation = (AnimationDrawable)buttonlogin.Background;
buttonlogin.Click += (sender, e) =>
{
animation.Start();
};
问题是动画在应用程序执行某些操作后有效,但不仅仅是在button.click之后。例如,我单击一个按钮,没有任何反应,我点击一个edittext,键盘出现在屏幕上,动画开始。
我发现谷歌推荐这个:
重要的是要注意,在Activity的onCreate()方法中,无法调用在AnimationDrawable上调用的start()方法,因为AnimationDrawable尚未完全附加到窗口。如果你想立即播放动画而不需要交互,那么你可能想从你的Activity中的onWindowFocusChanged()方法调用它,当Android让你的窗口成为焦点时会调用它。
但经过一些尝试后,我仍然无法找到解决方案。
答案 0 :(得分:0)
为了简单起见,我想建议一个图书馆https://github.com/daimajia/AndroidViewAnimations 尝试它,因为它易于使用,并有多种动画可供选择。
答案 1 :(得分:0)
here是使用Translate Animation的一个简单示例,您只需要使用动画类对象来管理它们,就像在onCreate中创建对象一样。
Animation traslateAnimation= AnimationUtils.loadAnimation(this,
R.anim.yourxmlanimation);
并在按钮onclick
中使用此代码yourButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
v.startAnimation(traslateAnimation)
}
});