Android布局叠加使用而不是Toast

时间:2017-06-06 17:54:50

标签: android android-layout overlay

我设法在约束布局中设置了一个相对布局,中间有一个图像 - 应显示此图像而不是Toast-Message(淡入淡出=>淡出)

当应用程序启动时 - 只是为了证明它有效 - 它会显示来自XML设置的图像(拇指向上/可见性)。

现在我想使用以下功能更改图像:

  public void showThumbs(Integer like){
    if (like > 0){
        overlayout.bringToFront();
        overlay.setImageResource(R.drawable.like);
        overlay.bringToFront();
        overlay.animate().alpha(1.0f).setDuration(800);
        overlay.animate().alpha(0.0f).setDuration(800);
    }
    if (like < 0){
        overlayout.bringToFront();
        overlay.setImageResource(R.drawable.dislike);
        overlay.bringToFront();
        overlay.animate().alpha(1.0f).setDuration(800);
        overlay.animate().alpha(0.0f).setDuration(800);
    }
}

我尝试使用无效的可见性,现在我尝试了动画推子。

这是怎么回事:

一开始它显示了XML布局本身设置的拇指 - 好的

当我设置为负值时,它会更改图像并将其淡出

当我设置为正值时,它会使用竖起大拇指并将其淡出

但它只能在第一次淡化图像而只消弱淡出部分。 一旦它消失,我可以再次调用此功能,它将不再显示任何图片。

知道我的错误在哪里?

它应该像Toast-Message一样工作(Fade in =&gt;淡出)。

1 个答案:

答案 0 :(得分:2)

首先,else语句之间应该有if。因此,您应该if( ){ } else { }而不是if( ) { } if( ) { }

其次,此行会使您的图片永久隐藏:

overlay.animate().alpha(0.0f).setDuration(800);

为了使它成功,你应该&#34;链&#34;你的动画。第一个选项是:

if (isLiked) {
    overlay.setImageResource(R.drawable.like);
    // overlay is invisible by default
    overlay.animate()
        .alpha(1.0f)
        .setListener(new AnimatorListenerAdapter() {
          @Override
          public void onAnimationEnd(Animator animation) {
            super.onAnimationEnd(animation);
            overlay.animate().alpha(0.0f).setDuration(800);
          }
        }).setDuration(800);
} else {
    //... 
}

另一种选择是使用AnimatorSet

ObjectAnimator fadeOut = ObjectAnimator.ofFloat(overlay, "alpha",  1f, 0f);
fadeOut.setDuration(800);
ObjectAnimator fadeIn = ObjectAnimator.ofFloat(overlay, "alpha", 0f, 1f);
fadeIn.setDuration(800);

final AnimatorSet mAnimationSet = new AnimatorSet();

mAnimationSet.play(fadeOut).after(fadeIn);
mAnimationSet.start();