如何在ValueAnimator动画的任何对象上收听触摸/点击事件

时间:2014-01-20 09:28:56

标签: android android-animation

我正在浏览谷歌提供的"BouncingBalls" api指南。我想知道是否有任何方法可以触摸触摸或点击事件动态创建的球对象。实际上我正在尝试将ValueAnimator类用于需要用户触摸对象的简单游戏。有many objects个不同类型(例如不同半径的球),这些对象可以是可绘制的静态图像,也可以在运行时绘制。
有没有办法检测到球的触摸?
这是我的示例ValueAnimator对象

ValueAnimator simpleAnimation = ObjectAnimator.ofFloat(myObject,"y",startY,endY)
simpleAnimation.setDuration(something)
simpleAnimation.setInterpolator(something)
ValueAnimator startAnim = new AnimatorSet()
startAnim.play(simpleAnimation);

现在,我想在用户触摸myObject时做一些事情。现在,我只知道这是

    simpleAnimation.addListener()

但没有一个参数足以触及事件处理。

1 个答案:

答案 0 :(得分:1)

您可以展开ShapeHolder,添加方法以检查触摸点是否在ShapeHolder内。

class MyShapeHolder extends ShapeHolder {

    public MyShapeHolder(ShapeDrawable s) {
        super(s);
        // TODO Auto-generated constructor stub
    }

    private boolean isTouchInside(final float x, final float y) {
        if (x < getX() + getWidth() / 2 &&
            x > getX() - getWidth() / 2 &&
            y < getY() + getHeight() / 2 &&
            y > getY() - getHeight() / 2) {
            return true;
        }
        return false;
    }

}

然后在onTouchEvent中添加以下代码

    for (int i = 0; i < balls.size(); ++i) {
        MyShapeHolder shapeHolder = balls.get(i);
        if (shapeHolder.isTouchInside(event.getX(), event.getY()))
            Log.d("TEST", "TOUCH ON BALL " + i);
        }
    }

添加您还可以为ShapeHolder创建一个监听器,例如OnShapeTouchListener。这对你来说是个好习惯。 :)