【发布时间】:2013-02-26 11:16:38
【问题描述】:
我有一个包含RelativeLayout 的ScrollView。 RelativeLayout 包含一些其他视图组,这些视图组最初都位于同一位置(彼此重叠)。向下滑动手势将这些视图组向下推,以便可以通过使用 TranslateAnimation 看到每个视图组的顶部 150 像素(顶部卡片移动到屏幕底部,下一张卡片向下移动 150 像素,等等)。
我为每个视图组附加了一个触摸监听器,它似乎被触发了,但是它只在我点击视图组的原始位置时触发,而不是它被移动到的位置。并且看到它们最初都在彼此之上,无论如何我只能在 OnTouch 方法中获得顶部视图组。
如何让视图在动画后实际位于新位置?
代码:
private void setViewgroupVerticalPosition(ViewGroup cardViewGroup,
int position) {
// Animates the ViewGroup to the correct vertical position.
TranslateAnimation ta = new TranslateAnimation(0, 0, 0, position);
ta.setDuration(500);
ta.setFillAfter(true);
ta.setAnimationListener(this);
cardViewGroup.startAnimation(ta);
/*
cardViewGroup.layout(cardViewGroup.getLeft(), position, cardViewGroup.getRight(), position + (cardViewGroup.getBottom() - cardViewGroup.getTop()));
cardViewGroup.forceLayout();
cardViewGroup.invalidate();
*/
}
在每个 ViewGroup 上运行后,在原始位置点击是触发 OnTouch 事件的唯一方法...
【问题讨论】:
-
您是否将
fillAfter与您的TranslateAnimation一起使用? -
是的:S - 我会将代码示例放在问题上,看看它是否有任何愚蠢的编码......
-
你能想象没有
fillAfter,而是让AnimationListener在动画结束后设置最终位置吗?我听说使用fillAfter会导致转换出现这个问题。 -
知道如何在 AnimationEnded 处理程序的相对布局中设置我的 ViewGroup 的位置吗? (以及如何获得对正确视图组的引用)
-
听起来好像您只需要引用RelativeLayout 和ViewGroup?我不知道你面临的困难。当您启动动画时,您肯定知道这两个对象。监听器有一个可以设置两个引用的方法怎么样?
标签: android animation touch viewgroup translate-animation