【问题标题】:Detecting which View was tapped, after animating its position在动画其位置后检测哪个视图被点击
【发布时间】: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


【解决方案1】:

根据您正在开发的 android 版本,您的动画可能会产生意想不到的结果。请参阅此问题和回复here。请特别注意 Chet Haase 的 cmets。

【讨论】:

  • 我实际上已经阅读过这篇文章,但认为它并没有应用,因为我的 ViewGroup 的明显(可见)位置是我动画它的位置,它只是 viewgroup 的触摸处理部分的位置是没有移动。无论如何,我不确定如何手动定位我的 ViewGroup。据我所知,没有 setTop() 方法或类似方法?
猜你喜欢
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多