如何在动态图像视图上设置 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 也会随之改变它的位置。
在 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 也会随之改变它的位置。