我有一个自定义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;
}
}
答案 0 :(得分:0)
当用户开始滚动时,您应该获得ACTION_CANCEL。抓住它并改回颜色。
答案 1 :(得分:0)
您可以实现onListItemClick(与触摸时相同),而不是触摸实现,然后在该方法上,您可以编写代码来更改触摸/单击的列表项的颜色。