Alv*_*nte 17 android android-viewpager android-pageradapter
我有一个带有自定义PagerAdapter的ViewPager,它覆盖方法getPageWidth返回0.3f,所以我可以在屏幕上显示多个页面,如下面的博客所示:
http://commonsware.com/blog/2012/08/20/multiple-view-viewpager-options.html
在这种情况下,ViewPager开始为空,用户开始按要求填充页面(图像).图像从左到右填充.一切正常,页面是动态创建的,当有多个图像时,很容易在它们之间滑动.
但是,实例化的页面少于三页时会出现问题.从右侧(无内容)到左侧的滑动手势会产生闪烁,页面从左向右交替移动,就像ViewPager试图将第一页向右移动但稍后转向其原始位置一样.这在整个手势期间发生,并在离开手势时停止.正如我所说,当有足够的页面覆盖整个屏幕宽度并且需要真正的滚动时,这不会发生.
有任何想法吗?
Rah*_*ani 12
I know this is an old question, but I was just looking for a solution and came across this link (which oddly references this question). Anyway, I was able to figure out a solution based on their comments. The basic idea is to allow touch events based on the state of a boolean flag which you set.
在覆盖onInterceptTouchEvent和onTouchEvent时扩展ViewPager,只有在设置了标志时才调用super.我的班级看起来像这样:
public class MyViewPager extends ViewPager {
private boolean isPagingEnabled = false;
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyViewPager(Context context) {
super(context);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (isPagingEnabled) {
return super.onInterceptTouchEvent(event);
}
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (isPagingEnabled) {
return super.onTouchEvent(event);
}
return false;
}
public void setPagingEnabled(boolean pagingEnabled) {
isPagingEnabled = pagingEnabled;
}
}
Run Code Online (Sandbox Code Playgroud)在你的布局xml中,用com.yourpackage.MyViewPager元素替换你的com.android.support.v4.ViewPager元素.
由于您在寻呼机适配器中从getPageWidth()返回0.3f,因此您希望在添加第四个项目时启用滚动.当你定义你的寻呼机适配器,并在适配器支持列表中添加或删除任何对象时,棘手的部分是在任何地方都有这行代码.
mPager.setPagingEnabled(items.size() > 3);
Run Code Online (Sandbox Code Playgroud)bar*_*cha 12
Rahuls解决方案有效,但如果您想根据内容自动启用分页,您可以像这样修改ViewPager:
public class MyViewPager extends ViewPager {
public MyViewPager(Context context,
AttributeSet attrs) {
super(context, attrs);
}
public MyViewPager(Context context) {
super(context);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (canScrollHorizontally(1)||canScrollHorizontally(-1)) {
return super.onInterceptTouchEvent(event);
}
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (canScrollHorizontally(1)||canScrollHorizontally(-1)) {
return super.onTouchEvent(event);
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
}
现在,如果ViewPager是可滚动的,它将允许触摸,否则禁用.
归档时间: |
|
查看次数: |
4189 次 |
最近记录: |