问题描述:
问题1、使用viewPager+fragment+RadioGroup实现首页的Tab点击切换效果,应项目需求不需要滑动切换界面,解决步骤1;
问题2、跳转到viewPager指定页面,这个时候需要使用ViewPager.setCurrentItem(index)方法。但是在使用这个方法的时候有这样一个问题,页面在跳转的时候有滑动效果,这个用户体验不是很好,看到的是直接跳转过来的的解决方法2,去掉滑屏速度。
解决方法:
1.禁止滑动翻页的ViewPager
/**
* <p>可以禁止滑动翻页的ViewPager </p>
* @name NoScrollViewPager
*/
public class NoScrollViewPager extends ViewPager {
private boolean noScroll = true;
public NoScrollViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
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) {
if (noScroll)
return false;
else
return super.onTouchEvent(arg0);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent arg0) {
if (noScroll)
return false;
else
return super.onInterceptTouchEvent(arg0);
}
@Override
public void setCurrentItem(int item, boolean smoothScroll) {
super.setCurrentItem(item, smoothScroll);
}
@Override
public void setCurrentItem(int item) {
super.setCurrentItem(item);
}
@Override
public void setSystemUiVisibility(int visibility) {
super.setSystemUiVisibility(visibility);
}
}
使用方法:
<com.crazyfitting.commons.NoScrollViewPager
android:id="@+id/container_pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
app:viewPagerAdapter="@{viewPaAdapter}" />
2.设置Viewpager的滑动速度i
public class FixedSpeedScroller extends Scroller {
private int mDuration = 0;//滑屏速度
/**
* 设置滑屏速度
*
* @param mDuration 速度
*/
public void setmDuration(int mDuration) {
this.mDuration = mDuration;
}
public FixedSpeedScroller(Context context) {
super(context);
}
public FixedSpeedScroller(Context context, Interpolator interpolator) {
super(context, interpolator);
}
public FixedSpeedScroller(Context context, Interpolator interpolator, boolean flywheel) {
super(context, interpolator, flywheel);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy) {
super.startScroll(startX, startY, dx, dy, mDuration);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
super.startScroll(startX, startY, dx, dy, mDuration);
}
public void initViewPagerScroll(ViewPager viewPager) {
try {
Field mScroller = ViewPager.class.getDeclaredField("mScroller");
mScroller.setAccessible(true);
mScroller.set(viewPager, this);
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用方法:
viewPager.setCurrentItem(position);
FixedSpeedScroller mScroller = new FixedSpeedScroller(this);
mScroller.initViewPagerScroll(binding.containerPager);
网友评论