android - onTouchListener 的热点不沿 TranslationAnimation 移动

标签 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 的旧位置而不是图像视觉上的新位置,则会触发 onTouch()。如何使触敏热点与 ImageView 本身一起移动?我还尝试了 invalidate(),似乎没有帮助。

最佳答案

动画实际上并不移动 View 。平移动画只是在其坐标上添加一个偏移量。

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

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

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

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

关于android - onTouchListener 的热点不沿 TranslationAnimation 移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16226218/

相关文章:

android - Admob 插页式预加载

android - 使用数据库中的数据填充微调器

java - Android 单播 UDP 有效但广播无效

android - 如何根据设备屏幕尺寸使用RecyclerView?

java - 调用 Camera.release() 后相机正在被使用

安卓工作室 : Horizontal Scroll View Freezes While Testing On Emulator

java - 具有任意深度嵌套项目的 Recyclerview

android - 用多个按钮或 View 填充 RelativeLayout

android - ActionBar 颜色不变

android - GridView 行重叠 : how to make row height fit the tallest item?