如何在动态图像视图上设置 setOnClickListener

How to make setOnClickListener on a dynamic imageview

在 Android Studio 中工作,我需要在我的应用程序中添加一个点击侦听器,在我的 imageview 上有一个特定的动画。这是我在 MainActivity 中的代码:

myImage.startAnimation(myAnimation);
myImage.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        //DO SOMETHING
    } 
});

myAnimation 来自 anim 文件夹中的 XML,它执行平移动画:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
    android:interpolator="@android:anim/accelerate_interpolator"
    android:repeatCount="infinite"
    android:repeatMode="reverse"
    android:fromYDelta="0%p"
    android:toYDelta="40%p"
    android:duration="1000"/>
</set>

尽管此点击侦听器设置在布局上有图像 (activity_main.xml) 的 space 上并且不跟随图像中插入的动画,但效果很好。如果我点击属于布局中图像的 space,即使图像由于动画不存在,点击侦听器也会启动。

有没有一种方法可以将点击侦听器附加到运动中的图像视图?

谢谢

发生这种情况是因为您正在使用的 xml Translate 动画并没有真正为视图 属性 设置动画,它只是移动屏幕上的像素,因此它看起来只是改变了位置,这就是为什么 OnClickListener 在 View 的原始位置上仍然处于活动状态,因为 Android 认为 View 从未真正移动过。 简单的解决方案使用 ObjectAnimator or even better ViewPropertyAnimator。两者都会为视图的 属性 设置动画,因此 OnClicklistener 也会随之改变它的位置。