动画期间点击视图没有反应

时间:2017-07-20 03:57:26

标签: android animation android-animation android-view objectanimator

我有一个简单的动画:

<rotate android:fromDegrees="0"
    android:toDegrees="180"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="4"
    android:repeatMode="reverse"
    android:duration="1000"
    android:interpolator="@android:anim/linear_interpolator" />

<translate
    android:duration="2000"
    android:fromXDelta="10%p"
    android:toXDelta="90%p"
    android:repeatCount="1"
    android:repeatMode="reverse"
    android:fillAfter="true"/>

我在ImageView上运行它。我在ImageView上设置了onclick事件:

    imgCorrect1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        Log.d(TAG, "explode ");
        }
    });

以下是我开始制作动画的方法:

Animation anim = AnimationUtils.loadAnimation(this, R.anim.rottrans);
imgCorrect1.startAnimation(Anim1);

问题在于,当动画正在运行时,如果我在动画播放时点击图像,则动画运行时不会调用onclick。

我试图在这个问题上进行搜索,但这些帖子都是为ImageView - 动画制作动画 - 调用onclick,而不是相反。

我希望我在描述中已经清楚了。我试图提供所有相关代码来解释这个问题。

1 个答案:

答案 0 :(得分:1)

您正在使用Animation API,它会为视图的矩阵设置动画。因此,您会看到原始视图的 ghost 已设置动画,而视图仍位于原始位置。

相反,请使用Animator API。以下是它的外观:


        ImageView imageView = ...;

        ObjectAnimator rotate = ObjectAnimator.ofFloat(imageView, View.ROTATION, 0, 180);
        rotate.setRepeatCount(4);
        rotate.setRepeatMode(ValueAnimator.REVERSE);
        rotate.setDuration(1000);
        rotate.setInterpolator(new LinearInterpolator());

        ObjectAnimator translate = ObjectAnimator.ofFloat(imageView, View.TRANSLATION_X, 0, 100);
        translate.setRepeatCount(1);
        translate.setRepeatMode(ValueAnimator.REVERSE);
        translate.setDuration(2000);

        AnimatorSet set = new AnimatorSet();

        // Play either sequentially or together
        set.playSequentially(rotate, translate);
        // set.playTogether(rotate, translate);

        set.start();