53

我需要显示一个淡入淡出的图像按钮(以及淡入淡出等等......)可以使用 setAlpha 设置透明度,但我该如何淡入和淡出?我的意思是我不能在另一个线程上执行此操作,因为您需要在 UI 线程上执行此类操作,对吗?

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

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

4

6 回答 6

89

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

AlphaAnimation anim = new AlphaAnimation(1.0f, 0.0f);
anim.setDuration(1000);
anim.setRepeatCount(NUM_REPEATS);
anim.setRepeatMode(Animation.REVERSE);
button.startAnimation(anim);
于 2013-06-24T08:32:23.020 回答
28

这是我们在项目中使用的动画。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();
       }
     });
于 2013-05-28T20:27:38.600 回答
6

您必须从 阅读交叉淡化两个视图Android developers。在本教程中解释了如何做你想做的事。

于 2013-05-28T20:47:23.807 回答
5

在科特林:

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

您可以添加一个AnimatorListenerAdapterinsetListener来处理其他视图状态。

于 2018-11-22T06:36:00.273 回答
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"/>

创建时:

   ImageView button= (ImageView)findViewById(R.id.button);
   mAnimation = (AnimationDrawable) animationView.getBackground();
   button.postDelayed(new Runnable() {
       public void run() {
         mAnimation.start();
       }
   }, 100);
于 2013-05-28T20:33:54.650 回答
-1

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

然后你可以通过 API setAnimation(Animation animation) 来设置它。

于 2013-05-28T20:29:53.587 回答