Android:淡入淡出视图

时间:2013-05-28 20:16:33

标签: android image fade

我需要显示淡入淡出的图像按钮(以及进出等等......) 可以使用setAlpha设置透明度,但我如何淡入淡出?我的意思是我不能在另一个线程上做,因为你需要在UI线程上做这些事情,对吗?

我想可以用动画完成,但我没有找到任何东西,因为我没有任何动画经验,也不知道要搜索什么......

实际上我真正想要的是淡化一张图像和另一张图像,但我想最简单的方法是将第一张图像按钮放在第二张图像按钮之下,然后淡化第二张图像按钮。或者有更简单的方法吗?

6 个答案:

答案 0 :(得分:74)

以下是我现在使用的解决方案,适用于低于12的API级别:

AlphaAnimation anim = new AlphaAnimation(1.0f, 0.0f);
anim.setDuration(1000);
anim.setRepeatCount(NUM_REPEATS);
anim.setRepeatMode(Animation.REVERSE);
button.startAnimation(anim);

答案 1 :(得分:22)

这是我们在项目中使用的动画。 Spinner是一个视图,因此您可以使用imageview更改此视图。确实有两张图像在彼此之上,一张可见的图像是不可见的。这就是我们这样做的方式。希望它有所帮助。

    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();
       }
     });

答案 2 :(得分:5)

您必须阅读Android developers中的Crossfading Two Views。在本教程中解释了如何做你想做的事。

答案 3 :(得分:0)

您可以将第一张图像的多个连续帧变形为第二张图像并返回,然后将其定义为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"/>

OnCreate中:

   ImageView button= (ImageView)findViewById(R.id.button);
   mAnimation = (AnimationDrawable) animationView.getBackground();
   button.postDelayed(new Runnable() {
       public void run() {
         mAnimation.start();
       }
   }, 100);

答案 4 :(得分:0)

在科特林:

view.animate().alpha(1f).setDuration(1000)
            .setInterpolator(AccelerateInterpolator()).start()

您可以在AnimatorListenerAdapter中添加setListener来处理其他视图状态。

答案 5 :(得分:-2)

实现动画类(您可以通过XML加载它或动态创建它)。

然后你可以通过API setAnimation(动画动画)设置它。