次のようなアイテムを含むグリッドがあります。
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'sonItemClick
は呼び出されません。画像の下のテキストをタップしたときにのみ呼び出されます。どうすれば呼び出せますか?
いくつかの解決策を試しましたが、成功しませんでした:
では常に false を返します
onTouch
。しかしその場合、他のタッチ操作が進行せず、アウトアニメーションは再生されません。追加のパラメータを に渡し、の代わりに
setItemTouchAnimation
呼び出し ます。しかし、この場合、奇妙な混乱が発生しました。発生したイベントのアイテム ID が、クリックされたアイテム ID と一致しませんでした。私はまだ理解していませんでした。adapterView.performItemClick(view, position, id)
view.performClick()
他のアイデアはありますか?