我有一个包含以下项目的网格:
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
没有被调用。只有在点击图像下方的文本时才会调用它。我怎样才能让它调用?
我尝试了一些解决方案,但没有成功:
总是返回 false
onTouch
。但在这种情况下,没有其他触摸动作继续进行,没有播放动画。将附加参数传递给
setItemTouchAnimation
并调用adapterView.performItemClick(view, position, id)
而不是view.performClick()
. 但是在这种情况下,我遇到了奇怪的混乱:引发事件的项目 ID 与单击的项目 ID 不匹配。我还是不明白,为什么会这样。
还有其他想法吗?