【问题标题】:Android: Fade view in and outAndroid:淡入淡出视图
【发布时间】:2013-05-23 22:27:39
【问题描述】:

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

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

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

【问题讨论】:

  • 您可以使用动画,并使用您的 Alpha 过渡创建动画 XML 文件,然后将其设置为 ImageButton

标签: android image fade


【解决方案1】:

在科特林中:

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

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

【讨论】:

  • 不错的解决方案。但是,在执行此操作之前需要将视图的 alpha 设置为 0f。 view.alpha = 0f
  • 没有得到你...你在问吗?
  • 不问。只是指出,如果你的 alpha 不是从 1 开始,这不会有任何影响。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 这看起来很不错,但它需要 API 级别 12,我需要级别 8(我忘了提...)
      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

        这是我们在项目中使用的动画。 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();
               }
             });
        

        【讨论】:

        • 这也需要 API 级别 12,我需要 8。无论如何,我会一直使用它,直到找到别的东西。如果我想无限地淡入淡出(意味着我需要从淡出动画结束监听器中启动淡入动画)最终会导致内存溢出吗?
        • 不,这通常不应该是一个问题。它们都在不同的线程上运行,一旦第一个线程完成它分配的所有内存将被释放。
        猜你喜欢
        • 2016-02-28
        • 2011-12-24
        • 2011-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-22
        • 1970-01-01
        相关资源
        最近更新 更多