为什么我的onTouchListener要求邻居视图?

时间:2012-06-26 14:45:36

标签: java android events touch

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

为此,我将自定义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事件,因此它们也会获得小动画闪烁。

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

编辑:要清楚。邻居视图也注册到同一个侦听器实例,但我的手指不会触及它们。

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

问题是在多个视图上使用相同的Animation实例。为每个视图创建单独的实例可以解决问题。