gallery中的图片没法点击,或者 glallery中的图片不能滑动但是能点击,用ontouch事件模拟onclick 点击事件

转: http://www.maxiaoguo.com/shipin/360.html


在项目中用listtview 上边加了一个gallery   listview 外边还加了viewpage  , 总的来说能让ontouch 事件搞死。。。


listview gallery 跟viewpage的冲突解决方法见

http://blog.csdn.net/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);


你可能感兴趣的:(gallery中的图片没法点击,或者 glallery中的图片不能滑动但是能点击,用ontouch事件模拟onclick 点击事件)