aRa*_*nol 2 android listview ontouchlistener
我的情况是我有ViewPager包含3个ListFragments.每个ListFragment当然都包含ListView.我有项目的自定义布局.我想要实现的是当我按住项目时,新片段以当前动画之上的动画开始.我想在用户发布项目后立即停止动画(删除片段).我已将其实现为onTouchListner(下面的代码).麻烦的是,当我按下项目时,我能够滚动ListView.我想阻止这一点.
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
touchDownTime = event.getDownTime();
mDownX = event.getX();
mDownY = event.getY();
isOnClick = true;
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
if (isOnClick
&& fragment
.isAnimation()) {
if (!fragment.isReleased()) {
fragment
.cancelAnimation();
} else {
fragment
.startReleaseAnimation();
}
}
break;
case MotionEvent.ACTION_MOVE:
if (isOnClick
&& !fragment
.isAnimation()
&& (Math.abs(mDownX - event.getX()) > SCROLL_THRESHOLD || Math
.abs(mDownY - event.getY()) > SCROLL_THRESHOLD)) {
isOnClick = false;
} else if (event.getEventTime() - touchDownTime > 150
&& !fragment
.isAnimation()) {
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction
.add(R.id.container,
fragment)
.addToBackStack(null).commit();
}
break;
default:
break;
}
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
您应该尝试requestDisallowInterceptTouchEvent
这样可以防止拦截触摸事件
试试这个
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
getParent().requestDisallowInterceptTouchEvent(true);
// Your code
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
getParent().requestDisallowInterceptTouchEvent(false);
// Your code
break;
default:
break;
}
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1348 次 |
| 最近记录: |