在AdapterView中触摸动画和OnItemClick

时间:2013-04-17 09:43:30

标签: android animation ontouchlistener onitemclicklistener android-adapterview

我有一个包含这样的项目的网格:

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));

但结果并不完全是我想要的。 触摸时动画正在工作。但是没有调用Grid的onItemClick。仅在点击图像下方的文本时才会调用它。我该如何打电话?

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

  1. 始终在onTouch中返回false。但在那种情况下没有 其他触摸动作继续进行,动画不播放。

  2. 将其他参数传递给setItemTouchAnimation并致电 adapterView.performItemClick(view, position, id)代替 view.performClick()。但在这种情况下,我得到了奇怪的混乱:提出 event的商品ID与点击的商品ID不匹配。我还没有 明白,为什么会这样。

  3. 还有其他想法吗?

1 个答案:

答案 0 :(得分:1)

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