1

ListViewユーザーがアイテムに触れたときにアイテムをアニメーション化し、タッチが終了したときにアニメーションを逆方向に実行したいと思います。

リスト項目をオーバーライドして試してみましたonTouchEventが、イベントを処理するときに true を返すOnItemClickListenerと、タッチ イベントを消費したため、もう呼び出しを受けません。false を返すと、コールバックを受け取りません。ユーザーがビューに触れるのをやめます。

    listView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            //handle onclick
        }
    });

@Override
public boolean onTouchEvent(MotionEvent event) {
    Log.v(TAG, event.getActionMasked() + "");
    if(event.getActionMasked() == MotionEvent.ACTION_DOWN) {
        Animation animation = createColorAnimation(false);
        animation.setDuration(500);
        startAnimation(animation);
        return true;
    } else if(event.getActionMasked() == MotionEvent.ACTION_UP || event.getActionMasked() == MotionEvent.ACTION_CANCEL) {
        Animation animation = createColorAnimation(true);
        animation.setDuration(500);
        startAnimation(animation);
        return true;
    }
    return super.onTouchEvent(event);
}

イベントとコールを受信ACTION_UPしたいのですが、どうすればこれを達成できますか?ACTION_CANCELonTouchEventOnItemClickListener

4

1 に答える 1

2

ビューを返す前にメソッド getView() のリスト アダプターで v.setBackgroundDrawable をカスタム Drawable で呼び出します。この Drawable はステートフル (isStatefull が true を返す) である必要があり、onStateChanged を上書きし、StateSet.dump(stateSet) をログに記録する必要があります。あとは、各状態で何をするかはあなた次第です。

于 2013-06-08T13:31:32.110 に答える