现在大部分的APP都都大致分为好几个模块,这就用到了viewpager+fragment来实现这样的效果,下面咱们就一起来实现一下这样的效果;
第一种(无BUG)
1、在项目里面添加工具类:
public class CustomViewPager extends ViewPager {
private boolean isCanScroll = true;
public ScrollableViewPager(Context context) {
super(context);
}
public ScrollableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* 设置其是否能滑动换页
* @param isCanScroll false 不能换页, true 可以滑动换页
*/
public void setScanScroll(boolean isCanScroll) {
this.isCanScroll = isCanScroll;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return isCanScroll && super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
return isCanScroll && super.onTouchEvent(ev);
}
@Override
public void scrollTo(int x, int y) {
super.scrollTo(x, y);
}
}
2、在布局里面将viewpager控件替换成工具类的类路径名
布局里面拿类的类名,其实想拿类路径名也简单,右键想要拿类路径名的类
获取路径名
就是这个,点击之后就已经复制了类路径名
3、最后一步就是在用到的类里面添加一行代码实现fragment的滑动禁止
设置禁止滑动就这么简单,添加一个工具类加一行代码完成
这个实现之后会发现确实不能滑动了,但是当点击按钮切换页面的时候还是会有滑动的效果,如何去掉这种滑动的效果呢?换另外一个工具类
/**
- 禁止viewpager页面的滑动的效果
* Created by Administrator on 2017/6/1.
*/
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
/**
* 手动控制viewpager是否可以左右滑动
* 去除滑动动画
* setNoScroll(boolean noScroll)
*
* @author ex-panyong
*/
public class NoScrollViewPager extends ViewPager {
private boolean noScroll = false;
public NoScrollViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public NoScrollViewPager(Context context) {
super(context);
}
public void setNoScroll(boolean noScroll) {
this.noScroll = noScroll;
}
@Override
public void scrollTo(int x, int y) {
super.scrollTo(x, y);
}
@Override
public boolean onTouchEvent(MotionEvent arg0) {
/* return false;//super.onTouchEvent(arg0); */
switch(arg0.getAction()){
}
return !noScroll && super.onTouchEvent(arg0);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent arg0) {
return !noScroll && super.onInterceptTouchEvent(arg0);
}
@Override
public void setCurrentItem(int item, boolean smoothScroll) {
super.setCurrentItem(item, smoothScroll);
}
@Override
public void setCurrentItem(int item) {
//false 去除滚动效果
super.setCurrentItem(item,false);
}
}
调用这个工具类之后不仅页面不能滑动,而且当点击按钮切换页面的时候也没有滑动的效果,按需求选择到底使用哪个工具类就行了
第二种(有时候不好用)
mVp .setOnTouchListener( new View.OnTouchListener ()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
return true; //修改为true
}
});
网友评论