在 RelativeLayout 中,我添加了一个 ImageView,并在 LayoutParams 中设置了一些边距:
RelativeLayout.LayoutParams rlLayoutParams = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
rlLayoutParams.topMargin = (int) convertDpToPixel(kMARGIN_HEADER);
rlLayoutParams.leftMargin = (int) myMAGIC_MARGIN;
现在这个 ImageView 在屏幕中间的某个地方。我想让它向右滑动几百像素,并保持在那里,所以我应用了以下 TranslateAnimation:
private TranslateAnimation getAnimation(ImageView view, int displacement, int duration) {
int[] view_pos = new int[2];
view.getLocationOnScreen(view_pos);
TranslateAnimation slide = new TranslateAnimation(
view_pos[0],
view_pos[0] + displacement,
view_pos[1],
view_pos[1]);
slide.setFillAfter(true);
slide.setDuration(duration);
return slide;
}
应用此动画后,整个视图立即消失。我在调试模式下检查了 view_pos[] 的值,它们很好(不是全为零)。如果我将其setFillAfter
设为 false,则视图将在动画持续时间后返回(原因很明显)。那么它去哪儿了?
我还尝试了以下方法:
TranslateAnimation slide = new TranslateAnimation(
view_pos[0],
view_pos[0], // don't do the + displacement,
view_pos[1],
view_pos[1]);
我原以为景色会停留在原地。但是不,它也消失了,之后有机会回来,取决于 的价值setFillAfter
。
我开始认为如果视图由 LayoutParams 放置在 RelativeLayout 中,我将无法应用 TranslateAnimation。我应该如何实现滑动视图的目标?