1

在运行时,我添加了一个新的 ImageView 并附加了一个监听器,如下所示:

image = new ImageView(someAppContext());
relativeLayout.addView(image, someLayoutParam);
// add onTouch listener to the image view:
image.setOnTouchListener(new ImageView.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
      makeToast("touched!");
      return false; // tried return true, makes no difference
    }
});

之后,我将 TranslateAnimation 与 一起使用setFillAfter(true),因此 ImageView 将保持在新位置。但是,如果我触摸 ImageView 的旧位置,而不是图像视觉上的新位置,则会触发 onTouch()。如何使触敏热点与 ImageView 本身一起移动?我也试过了invalidate(),好像没用。

4

1 回答 1

1

动画实际上并不移动视图。平移动画只会为其坐标添加偏移量。

我认为最好的解决方法是清除所有动画,并更新布局参数,以便将实际的 ImageView 移动到动画的目的地。

您需要存储翻译的目的地,例如dest_x, dest_y,动画完成后,执行以下操作:

    someLayoutParam.leftMargin = dest_x;
    someLayoutParam.topMargin = dest_y;
    yourImageView.clearAnimation(); // resets its position
    yourRelativeLayout.updateViewLayout(yourImageView, someLayoutParam);

这样,图像视图的位置并没有改变,但是实际的视图移动了,因此可触摸区域也移动了。

于 2013-04-29T20:52:10.360 回答