onTouchListener的热点不会沿TranslationAnimation移动

时间:2013-04-25 23:09:49

标签: android android-layout

在运行时,我添加了一个新的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的OLD位置,则会触发onTouch(),但不会触摸图像可视的新位置。如何使触敏热点与ImageView本身一起移动?我也试过invalidate(),似乎没有帮助。

1 个答案:

答案 0 :(得分:1)

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

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

您需要存储翻译的目的地,例如dest_x, dest_y,并在动画完成后执行:

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

这样,图像视图的位置不会改变,但实际视图会移动,因此可移动的区域也会移动。