android listview:可通过longclicklistener绘制单元格转换
我有一个带有OnItemClickListener和OnItemLongClickListener的列表视图 在我的listadapter的getView方法中,我设置了一个以TransitionDrawable为背景的视图,接下来我将OnTouchListener应用于该视图,这样当用户按下并按住该视图时,他将看到转换发生 问题是OnTouchListener必须返回true,否则将只捕获ACTION\u DOWN motionevent。但通过返回true,我的OnItemClickListener和OnItemLongClickListener不会被解雇 问题是如何既显示TransitionDrawable的动画,又触发单击事件 阵列适配器的getView(..):android listview:可通过longclicklistener绘制单元格转换,android,listview,transitiondrawable,Android,Listview,Transitiondrawable,我有一个带有OnItemClickListener和OnItemLongClickListener的列表视图 在我的listadapter的getView方法中,我设置了一个以TransitionDrawable为背景的视图,接下来我将OnTouchListener应用于该视图,这样当用户按下并按住该视图时,他将看到转换发生 问题是OnTouchListener必须返回true,否则将只捕获ACTION\u DOWN motionevent。但通过返回true,我的OnItemClickList
@Override
public View getView(int position, View convertView, ViewGroup parent) {
...
convertView.setOnTouchListener(touchListener);
return convertView;
}
OnTouchLIstener:
OnTouchListener touchListener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
TransitionDrawable transition = (TransitionDrawable)v.getBackground();
if(event.getAction() == MotionEvent.ACTION_DOWN) {
transition.startTransition(ViewConfiguration.getLongPressTimeout());
return true;
}
else {
transition.resetTransition();
}
return false;
}
};
我最终为单击和长单击自己创建了一个界面,并在onTouchListener中处理它们:
private class TransitionView implements OnTouchListener {
private Object object;
TransitionDrawable transition;
CountDownTimer timer;
boolean running;
View v;
public TransitionView(Object object) {
this.object = object;
int time = ViewConfiguration.getLongPressTimeout();
timer = new CountDownTimer(time, time) {
@Override
public void onTick(long millisUntilFinished) { }
@Override
public void onFinish() {
running = false;
transition.resetTransition();
longClickListener.onItemLongClick(TransitionView.this.object, v);
}
};
}
@Override
public boolean onTouch(View v, MotionEvent event) {
this.v = v;
transition = (TransitionDrawable)v.getBackground();
if(event.getAction() == MotionEvent.ACTION_DOWN) {
transition.startTransition(ViewConfiguration.getLongPressTimeout());
timer.start();
running = true;
return true;
}
else if(event.getAction() == MotionEvent.ACTION_UP) {
if(running) {
timer.cancel();
running = false;
itemClickListener.onListItemClick(object, v);
}
transition.resetTransition();
}
else if(event.getAction() == MotionEvent.ACTION_CANCEL) {
transition.resetTransition();
}
return false;
}
}