如何在button.click之后使动画正常工作?

时间:2016-05-20 13:12:59

标签: c# android xamarin.android

我需要在点击它后立即为按钮设置动画。所以我制作了一个简单的动画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让你的窗口成为焦点时会调用它。

但经过一些尝试后,我仍然无法找到解决方案。

2 个答案:

答案 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)
  }
});