1

在我的应用程序中,我想为按钮和其他充当按钮的视图添加一个简单的动画。

为此,我为所有视图设置了一个自定义 onTouchListener 并在它们上调用 startAnimation。

我的 onTouch 方法如下所示:

public boolean onTouch(View v, MotionEvent event) {

    // Only show animation when enabled.
    if (v.isEnabled()) {
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            v.startAnimation(shrink);
            break;
        case MotionEvent.ACTION_UP:
            v.startAnimation(grow);
            break;
        }
    }
    return v.onTouchEvent(event);
}

这可以正常工作,因为当用户按下按钮时视图被调整为较小的尺寸,并在用户松开手指时返回到原始尺寸。

然而,由于某种原因,位于触摸按钮附近的其他按钮也会获得 UP 事件,因此它们也会获得一个小的动画闪烁。

为什么会这样,更重要的是,我该如何防止这种恼人的行为?

编辑:只是为了清楚。邻居视图也注册到同一个侦听器实例,但我的手指没有触摸它们。

4

2 回答 2

0

问题是在多个视图上使用相同的动画实例。为每个视图创建单独的实例解决了这个问题。

于 2012-06-27T06:37:37.203 回答
0

然后,您已注册侦听器的视图应该只收到通知,然后也使用以下方法。

您可以明确检查 View 的 id 是什么,然后只启动动画。

public boolean onTouch(View v, MotionEvent event) {

    if (v.getId() == R.id.desired_view_id) {
        // Only show animation when enabled.
        if (v.isEnabled()) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                v.startAnimation(shrink);
                break;
            case MotionEvent.ACTION_UP:
                v.startAnimation(grow);
                break;
            }
        }
    }
    return v.onTouchEvent(event);
}
于 2012-06-26T14:56:54.410 回答