在RelativeLayout中,我添加了一个在LayoutParams中设置了一些边距的ImageView:
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。我应该如何实现滑动视图的目标?
答案 0 :(得分:0)
TranslateAnimation的参数是增量而不是位置,所以你只需要:
slide = new TranslateAnimation(0, displacement, 0, 0)
。
如果您不需要支持Android< 3.0,那么请使用属性动画而不是视图动画 - 有关更多详细信息,请参阅Android docs。