0

我有一个包含以下项目的网格:

http://petromi.com/get/ba4a24f852.png

当用户触摸它时,我想播放专辑封面的动画。为此,我创建了一个类:

class TouchAnimationHelper {
    ...

    public void setItemTouchAnimation(final View view) {
        view.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int action = event.getAction();
                Log.d("Touch action: [%s]", action);

                if (action == MotionEvent.ACTION_DOWN) {
                    view.startAnimation(sDecAnimation);
                    return true;

                } else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
                    if (action == MotionEvent.ACTION_UP) {
                        sIncAnimation.setAnimationListener(new Animation.AnimationListener() {
                            @Override
                            public void onAnimationStart(Animation animation) {
                            }

                            @Override
                            public void onAnimationEnd(Animation animation) {
                                sIncAnimation.setAnimationListener(null);
                                view.performClick();
                            }

                            @Override
                            public void onAnimationRepeat(Animation animation) {
                            }
                        });
                    }
                    view.startAnimation(sIncAnimation);
                    return true;
                }

                return false;
            }
        });
    }
}

在适配器的getView方法中,我调用:

mTouchAnimationHelper.setItemTouchAnimation(view.findViewById(R.id.album_cover));

但结果并不完全是我想要的。触摸时动画正在工作。但是 GridonItemClick没有被调用。只有在点击图像下方的文本时才会调用它。我怎样才能让它调用?

我尝试了一些解决方案,但没有成功:

  1. 总是返回 false onTouch。但在这种情况下,没有其他触摸动作继续进行,没有播放动画。

  2. 将附加参数传递给setItemTouchAnimation并调用 adapterView.performItemClick(view, position, id)而不是 view.performClick(). 但是在这种情况下,我遇到了奇怪的混乱:引发事件的项目 ID 与单击的项目 ID 不匹配。我还是不明白,为什么会这样。

还有其他想法吗?

4

1 回答 1

1

getview() 中的 OnTouch 事件返回 false 而不是 true。它适用于我的情况。希望它适用于你..

于 2013-04-17T10:23:42.707 回答