我想在LinearLayout中为TextViews设置动画。我想让它们每隔几秒钟上升一次。如果它们向上移动,则最后一个项目应保留一段时间,然后从顶部显示第一个项目。我将列出其中的所有单词。
private void startAnimation() {
float end;
try {
end = linearLayout.getTranslationY() - getResources().getDimensionPixelSize(R.dimen.distance);
} catch (NullPointerException e) {
e.printStackTrace();
end = - getResources().getDimensionPixelSize((R.dimen.distance));
}
ObjectAnimator animation1 = ObjectAnimator.ofFloat(linearLayout,
"translationY",
end);
animation1.setDuration(2000);
animation1.start();
animation1.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
}
@Override
public void onAnimationEnd(Animator animator) {
}
@Override
public void onAnimationCancel(Animator animator) {
}
@Override
public void onAnimationRepeat(Animator animator) {
}
});
}
我认为解决方案在onAnimationEnd方法内部。我创建了这个(我的线性布局的父级是框架布局):
@Override
public void onAnimationEnd(Animator animator) {
translationsLayout.removeView(translatedWord1);
translationsLayout.addView(translatedWord1);
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(getResources().getDimensionPixelSize(R.dimen.marginLeft),
getResources().getDimensionPixelSize(R.dimen.marginTop),
0,
0);
translationsLayout.setLayoutParams(layoutParams);
}
不幸的是,它没有给我我期望的结果。 TextViews超出线性布局并消失。我以为,如果我使用方法.removeView(View v)
删除LinearLayout的第一个元素,然后再使用.addView(View v)
,结果将是Linear Layout的第一个元素将在底部添加一个项目。但是,似乎第一个元素即使不可见,也仍然存在于Linear Layout中,如果我删除第一个元素并添加,它只会与布局中的最后一个元素切换。