我正在制作一个图片库应用程序。我目前有一个底部带有文本视图的图像视图。目前它只是半透明的。我想让它淡入,等待 3 秒,然后淡出 90%。将焦点放在它上面或加载新图片将使其重复循环。我已经阅读了十几页并尝试了一些事情,但没有成功。我得到的只是淡入和瞬间淡出
问问题
36140 次
5 回答
60
protected AlphaAnimation fadeIn = new AlphaAnimation(0.0f , 1.0f ) ;
protected AlphaAnimation fadeOut = new AlphaAnimation( 1.0f , 0.0f ) ;
txtView.startAnimation(fadeIn);
txtView.startAnimation(fadeOut);
fadeIn.setDuration(1200);
fadeIn.setFillAfter(true);
fadeOut.setDuration(1200);
fadeOut.setFillAfter(true);
fadeOut.setStartOffset(4200+fadeIn.getStartOffset());
非常适合白色背景。否则,您需要在实例化AlphaAnimation
类时切换值。像这样:
AlphaAnimation fadeIn = new AlphaAnimation( 1.0f , 0.0f );
AlphaAnimation fadeOut = new AlphaAnimation(0.0f , 1.0f );
这适用于黑色背景和白色文本颜色。
于 2012-07-15T17:52:43.717 回答
10
Guy Cothal 回答的 Kotlin 扩展函数:
inline fun View.fadeIn(durationMillis: Long = 250) {
this.startAnimation(AlphaAnimation(0F, 1F).apply {
duration = durationMillis
fillAfter = true
})
}
inline fun View.fadeOut(durationMillis: Long = 250) {
this.startAnimation(AlphaAnimation(1F, 0F).apply {
duration = durationMillis
fillAfter = true
})
}
于 2019-06-16T23:52:33.457 回答
9
这就是我在我的项目中用于在 TextViews 上循环淡入/淡出动画的解决方案:
private void setUpFadeAnimation(final TextView textView) {
// Start from 0.1f if you desire 90% fade animation
final Animation fadeIn = new AlphaAnimation(0.0f, 1.0f);
fadeIn.setDuration(1000);
fadeIn.setStartOffset(3000);
// End to 0.1f if you desire 90% fade animation
final Animation fadeOut = new AlphaAnimation(1.0f, 0.0f);
fadeOut.setDuration(1000);
fadeOut.setStartOffset(3000);
fadeIn.setAnimationListener(new Animation.AnimationListener(){
@Override
public void onAnimationEnd(Animation arg0) {
// start fadeOut when fadeIn ends (continue)
textView.startAnimation(fadeOut);
}
@Override
public void onAnimationRepeat(Animation arg0) {
}
@Override
public void onAnimationStart(Animation arg0) {
}
});
fadeOut.setAnimationListener(new Animation.AnimationListener(){
@Override
public void onAnimationEnd(Animation arg0) {
// start fadeIn when fadeOut ends (repeat)
textView.startAnimation(fadeIn);
}
@Override
public void onAnimationRepeat(Animation arg0) {
}
@Override
public void onAnimationStart(Animation arg0) {
}
});
textView.startAnimation(fadeOut);
}
希望这会有所帮助!
于 2017-05-26T09:41:11.483 回答
4
您可以使用额外的动画对象(不修改其 alpha)来防止即时淡出,为您的淡入效果设置 animationListener 并在淡入的 on animationEnd 中启动额外的动画对象,然后您开始在额外动画对象的动画结束时淡出,试试下面的链接,它会有所帮助..
于 2014-04-05T23:46:27.257 回答
0
我正在寻找类似问题的解决方案(TextView 淡入/等待/淡出)并想出了这个(事实上,官方文档也指出了这一点)。您显然可以通过添加更多参数来改善这一点。
public void showFadingText(String text){
txtView.setText(text);
Runnable endAction;
txtView.animate().alpha(1f).setDuration(1000).setStartDelay(0).withEndAction(
endAction = new Runnable() {
public void run() {
txtView.animate().alpha(0f).setDuration(1000).setStartDelay(2000);
}
}
);
}
前提是您在其他地方声明了 txtView,alpha 从零开始。
于 2020-03-24T06:51:25.703 回答