2013-05-28 119 views
31

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

我想它可以用动画来完成,但我没有发现任何东西,因为我没有与任何动画体验,真的不知道该怎么寻找...

其实我真正想要的是褪色一个图像和另一个出来,但我想最简单的方法是将第一个图像按钮放置在第二个图像下方,然后淡入第二个图像。还是有更简单的方法来做到这一点?

+0

你可以使用动画,并创建您的阿尔法过渡动画'XML'文件,然后设置它到'ImageButton' – kabuto178

回答

56

这是我现在使用的解决方案,即在API级别低于12的工作原理:

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

这是我们在我们的项目中使用的动画。微调是一个视图,所以你可以用你的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(); 
     } 
    }); 
+0

这也需要API级别12,我需要8个。无论如何,我会使用它,直到我找到别的东西。如果我想无限地淡入淡出(这意味着我需要从淡出动画结束侦听器中开始淡入淡出),它最终会导致内存溢出吗? – DominicM

+1

没有,通常不应该是一个问题。它们都在不同的线程上运行,一旦第一个完成所有分配的内存将被释放。 –

-1

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

然后,您可以通过API setAnimation(动画动画)对其进行设置。

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

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

+1

这看起来非常好,但它需要API等级12,我需要等级8(我忘了提及...) – DominicM