转: http://www.maxiaoguo.com/shipin/360.html
在项目中用listtview 上边加了一个gallery listview 外边还加了viewpage , 总的来说能让ontouch 事件搞死。。。
listview gallery 跟viewpage的冲突解决方法见
http://blog.youkuaiyun.com/codywangziham01/article/details/7732909
现在就直插主题,怎样模拟onclick 事件
@Override
public boolean onTouchEvent(MotionEvent event) {
super.onTouchEvent(event);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
downTime = System.currentTimeMillis();
float x = event.getX();
downX = x;
Rect rect = new Rect();
this.getHitRect(rect);
if(x<(rect.right-rect.left)/2){
left = true;
}else{
left = false;
}
return true;
case MotionEvent.ACTION_MOVE:
curX = event.getX();
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
if(event.getX()!=0){
curX = event.getX();
}
if(downTime!=0&&Math.abs(curX-downX)<10){
long del = System.currentTimeMillis()-downTime;
if(del<300){
View view;
LinearLayout item = (LinearLayout) this.getSelectedView();
if(left){
RelativeLayout relativeLayout = (RelativeLayout) item.getChildAt(0);
view = relativeLayout.getChildAt(0);
}else{
RelativeLayout relativeLayout = (RelativeLayout) item.getChildAt(1);
view = relativeLayout.getChildAt(0);
}
if(view!=null){
view.performClick(); /// 这句话是整个的核心啊,,这是拿到view 之后把onclcik 事件传递下去
}
}
}
downTime = 0;
curX = 0;
downX = 0;
break;
default:
break;
}
return true;
}
这是gallery中的的ontouch 事件,大体是根据时间来算的, <300就是点击事件
注意:。。。。gallery中的items的onclick事件一定要写。。。只是把onclick事件传递下去。
设置完之后再设置clickable为false
viewHolder.lImageView.setClickable(false);