0

リスト項目ごとListViewに設定したカスタムがあります。OnTouchListenerユーザーがアイテムに触れると、アイテムTransitionDrawableの背景色を変更し、 中MotionEvent.ACTION_DOWNに元に戻すために使用しMotionEvent.ACTION_UPます。

このリストをスクロールすると、スクロール アクションの開始時に触れたアイテムの背景色が変わります。この行為は避けたいです。そのため、スクロール中に背景色の変更を無効にしたいと考えています。これを行う方法はありますか?以下のコードを参照してください。

public class ListItemOnTouchListener implements OnTouchListener {

    @Override
    public boolean onTouch(View v, MotionEvent event) {

        Context mContext = getActivity().getApplicationContext();
        Resources res = mContext.getResources();
        switch (event.getAction()) {

        case MotionEvent.ACTION_DOWN:
            TransitionDrawable transitionDown = (TransitionDrawable) res
                .getDrawable(R.drawable.row_background_transition_down);
            v.setBackgroundDrawable(transitionDown);
            transitionDown.startTransition(350);
            Log.d(TAG, "ACTION_DOWN");
            return true;

        case MotionEvent.ACTION_UP:
            TransitionDrawable transitionUp = (TransitionDrawable) res
                    .getDrawable(R.drawable.row_background_transition_up);
            v.setBackgroundDrawable(transitionUp);
            transitionUp.startTransition(1000);
            // Get list view
            ListView listView = getListView();
            int position = listView.getPositionForView((LinearLayout) v.getParent());
            listView.performItemClick(v, position, 0);
            Log.d(TAG, "ACTION_UP");
            return true;

        case MotionEvent.ACTION_MOVE:
            Log.d(TAG, "ACTION_MOVE");
            break;

        case MotionEvent.ACTION_CANCEL:
            Log.d(TAG, "ACTION_CANCEL");
            v.setBackgroundResource(R.drawable.row_background_normal);
            break;
        }
        return false;
    }
}
4

2 に答える 2

0

タッチで実装する代わりに、onListItemClickを実装して(タッチと同じように機能します)、そのメソッドで、タッチ/クリックしたリストアイテムの色を変更するコードを記述できます。

于 2013-03-14T14:53:03.897 に答える
0

ユーザーがスクロールを開始すると、ACTION_CANCEL が返されます。これをキャッチして、色を元に戻します。

于 2013-03-14T14:42:22.130 に答える