Android 将使用布局叠加层代替 Toast
Android layout overlay tobe uses instead of Toast
我设法在约束布局的中间有一个图像的相对布局 - 应该显示此图像而不是 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-布局本身中设置的竖起大拇指 - OK
当我将 like 设置为负值时,它会更改图像并将其淡出
当我将喜欢设置为正值时,它会使用竖起大拇指并淡出
但它只在第一次使图像淡出并且只有淡出部分起作用。
一旦它消失了,我可以再次调用这个函数,它不会再显示任何图片。
知道我的错误在哪里吗?
它应该像吐司消息一样工作(淡入 => 淡出)。
首先if
语句之间应该有else
。所以你应该 if( ){ } else { }
而不是 if( ) { } if( ) { }
其次,此行使您的图像永久不可见:
overlay.animate().alpha(0.0f).setDuration(800);
要使其正常工作,您应该 "chain" 制作动画。第一个选项是:
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();
我设法在约束布局的中间有一个图像的相对布局 - 应该显示此图像而不是 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-布局本身中设置的竖起大拇指 - OK
当我将 like 设置为负值时,它会更改图像并将其淡出
当我将喜欢设置为正值时,它会使用竖起大拇指并淡出
但它只在第一次使图像淡出并且只有淡出部分起作用。 一旦它消失了,我可以再次调用这个函数,它不会再显示任何图片。
知道我的错误在哪里吗?
它应该像吐司消息一样工作(淡入 => 淡出)。
首先if
语句之间应该有else
。所以你应该 if( ){ } else { }
而不是 if( ) { } if( ) { }
其次,此行使您的图像永久不可见:
overlay.animate().alpha(0.0f).setDuration(800);
要使其正常工作,您应该 "chain" 制作动画。第一个选项是:
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();