TextView 的多种过渡效果 (Android)
Multiple transition effects with TextViews (Android)
我希望按顺序显示 3 个 TextView(第一个,然后是第二个,然后是第三个)。我试过这段代码
tv1.animate().alpha(1f).setDuration(1000);
tv2.animate().alpha(1f).setDuration(1000);
tv3.animate().alpha(1f).setDuration(1000);
但是他们一起出现,所以我试了
tv1.animate().alpha(1f).setDuration(1000);
tv2.animate().alpha(1f).setStartDelay(1000).setDuration(1000);
tv3.animate().alpha(1f).setStartDelay(2000).setDuration(1000);
但是当我打开应用程序时,它们一起出现,但没有动画。我该如何解决这个问题?
添加一个 AnimationListener 并在上一个动画结束时开始下一个动画。
AlphaAnimation alphaAnimation = new AlphaAnimation(1f,0f);
alphaAnimation.setFillAfter(true);
alphaAnimation.setAnimationListener(new AnimationListener() {
public void onAnimationStart(Animation anim)
{
};
public void onAnimationRepeat(Animation anim)
{
};
public void onAnimationEnd(Animation anim)
{
nextPuzzle();
};
});
tv1.startAnimation(alphaAnimation);
有很多方法可以做到。
如果您希望通过使用 alpha 值来实现此目的,则您设置动画的每个视图的开头都必须具有 0.0f alpha 值。然后将它们动画化为 1.0f alpha.
例如:
private void animateViews(final ArrayList<View> viewArrayList, long delay){
for (int i = 0; i < viewArrayList.size(); i++) {
final int position = i;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
viewArrayList.get(position).animate().alpha(1f).setDuration(200);
}
}, i * delay);
}
}
你可以用我写的这个方法
用法:
ArrayList<View> arrayList = new ArrayList<>();
arrayList.add(tv1);
arrayList.add(tv2);
arrayList.add(tv3);
animateViews(arrayList,300);
delay 参数表示,每个动画开始延迟 300 * index 毫秒。
此外,此方法的 alpha 动画持续时间为 200 毫秒。
首先从 0 延迟开始,
第二次以 1 * 300 毫秒延迟开始
第三次以 2 * 300 毫秒延迟开始
...
..
.
更改时间
tv1.animate().alpha(1f).setDuration(1000);
tv2.animate().alpha(1f).setStartDelay(2000).setDuration(1000);
tv3.animate().alpha(1f).setStartDelay(3000).setDuration(1000);
您需要在开始动画之前将 alpha 设置为 0
我希望按顺序显示 3 个 TextView(第一个,然后是第二个,然后是第三个)。我试过这段代码
tv1.animate().alpha(1f).setDuration(1000);
tv2.animate().alpha(1f).setDuration(1000);
tv3.animate().alpha(1f).setDuration(1000);
但是他们一起出现,所以我试了
tv1.animate().alpha(1f).setDuration(1000);
tv2.animate().alpha(1f).setStartDelay(1000).setDuration(1000);
tv3.animate().alpha(1f).setStartDelay(2000).setDuration(1000);
但是当我打开应用程序时,它们一起出现,但没有动画。我该如何解决这个问题?
添加一个 AnimationListener 并在上一个动画结束时开始下一个动画。
AlphaAnimation alphaAnimation = new AlphaAnimation(1f,0f);
alphaAnimation.setFillAfter(true);
alphaAnimation.setAnimationListener(new AnimationListener() {
public void onAnimationStart(Animation anim)
{
};
public void onAnimationRepeat(Animation anim)
{
};
public void onAnimationEnd(Animation anim)
{
nextPuzzle();
};
});
tv1.startAnimation(alphaAnimation);
有很多方法可以做到。
如果您希望通过使用 alpha 值来实现此目的,则您设置动画的每个视图的开头都必须具有 0.0f alpha 值。然后将它们动画化为 1.0f alpha.
例如:
private void animateViews(final ArrayList<View> viewArrayList, long delay){
for (int i = 0; i < viewArrayList.size(); i++) {
final int position = i;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
viewArrayList.get(position).animate().alpha(1f).setDuration(200);
}
}, i * delay);
}
}
你可以用我写的这个方法
用法:
ArrayList<View> arrayList = new ArrayList<>();
arrayList.add(tv1);
arrayList.add(tv2);
arrayList.add(tv3);
animateViews(arrayList,300);
delay 参数表示,每个动画开始延迟 300 * index 毫秒。 此外,此方法的 alpha 动画持续时间为 200 毫秒。
首先从 0 延迟开始,
第二次以 1 * 300 毫秒延迟开始
第三次以 2 * 300 毫秒延迟开始
...
..
.
更改时间
tv1.animate().alpha(1f).setDuration(1000);
tv2.animate().alpha(1f).setStartDelay(2000).setDuration(1000);
tv3.animate().alpha(1f).setStartDelay(3000).setDuration(1000);
您需要在开始动画之前将 alpha 设置为 0