作者:浪迹天涯沃热尔_441 | 来源:互联网 | 2023-09-05 14:50
viewpager 是一个好用,又华丽丽的控件。
1. 禁止viewpager 左右滑动,但不影响viewpager 每个paer上的事件
public class MainView extends ViewPager{
private boolean isScrollable;
public MainView(Context context) {
super(context);
}
public MainView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (isScrollable == false) {
return false;
} else {
return super.onTouchEvent(ev);
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (isScrollable == false) {
return false;
} else {
return super.onInterceptTouchEvent(ev);
}
}
public boolean isScrollable() {
return isScrollable;
}
public void setScrollable(boolean isScrollable) {
this.isScrollable = isScrollable;
}
}
2.在别的控件嵌套了viewpager后,可能会拦截viewpager的滑动事件(这个在仿网易的1个样式中有用到)。
public class MyViewPager extends ViewPager {
int mLastMotionY;
int mLastMotionX;
public MyViewPager(Context context) {
super(context);
}
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
getParent().requestDisallowInterceptTouchEvent(true); //只需这句话,让父类不拦截触摸事件就可以了。
return super.dispatchTouchEvent(ev);
}
}
3.viewpager 嵌套viewpager 或者 是需要动态改变 viewpager 是否需要被父view拦截事件的时候(这个就需要进行判断然后动态的返回 true 或 false)
这个是被嵌套的 viewpager的代码,
public class TopViewPager extends ViewPager{
//后在onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent里面告诉父View,也就是ViewPager不要拦截该控件上的触摸事件。
//
public TopViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public TopViewPager(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
float curX = 0f;
float downX = 0f; @Override
public boolean onTouchEvent(MotionEvent arg0) {
// TODO Auto-generated method stub
// switch (arg0.getAction()) {
// case value:
//
// break;
//
// default:
// break;
// }
curX = arg0.getX();
if(arg0.getAction() == MotionEvent.ACTION_DOWN){
downX = curX;
}
int curIndex = getCurrentItem();
if(curIndex == 0){
System.out.println("00");
if(downX getParent().requestDisallowInterceptTouchEvent(false);
}else{
//downX >= curX (=)原来放在上面发现会有手势 滑动不成功的时候,放下来后解决了。
getParent().requestDisallowInterceptTouchEvent(true);
}
}else if(curIndex == getAdapter().getCount()-1){
if(downX >= curX){
getParent().requestDisallowInterceptTouchEvent(true);
}else{
getParent().requestDisallowInterceptTouchEvent(true);
}
}else{
getParent().requestDisallowInterceptTouchEvent(true);
}
return super.onTouchEvent(arg0);
}
}