
我使用的是VIEwPager的变体,它不是在水平方向上滚动,而是在垂直方向上滚动.
VerticalVIEwPager:
https://android.googlesource.com/platform/packages/apps/DeskClock/+/master/src/com/android/deskclock/VerticalViewPager.java
androID.support.v4.app.FragmentStatePagerAdapter用于设置VerticalVIEwPager中的内容.
每次调用FragmentStatePagerAdapter的getItem()时,我都会从FragmentStatePagerAdapter创建并返回一个新的androID.support.v4.app.Fragment实例,如下所示:
@H_403_11@@OverrIDepublic Fragment getItem(int position) { return PrevIEwFragment.getNewFragmentInstance(position);}PrevIEwFragment呈现可能不适合屏幕的内容.
为了显示不适合屏幕的所有内容,androID.support.v4.Widget.nestedScrollVIEw用作PrevIEwFragment布局的父元素.
问题:
PrevIEwFragment的内容按预期滚动到位置0.
但是,为了切换到下一页,必须多次执行甩动或滑动 *** 作,因此向位置1的页面滑动是非常困难的.
此外,投掷或滑回到位置0非常困难或几乎不可能.
需要:
Fling或滑动或切换到PrevIEwFragment的下一个实例应该是平滑的.
换句话说,滚动内容应该是平滑的,同时请记住,滑动到下一页也应该顺利工作.
Link to the sample project as mentioned above
解决方法 我查看了你的 Github代码.我让它适合你.我也发了拉请求.问题是onIntercepttouchEvent如果返回true则使VIEwPager滚动,如果我们返回false,则禁用VIEwPager touch并使nestedScrollVIEw滚动.所以我在这里检查是否需要滚动nestedScrollVIEw然后如果nestedScrollVIEw位于顶部或底部我返回false,我将其返回true.我在这里发布代码.您可以修改它并使其更干净.Github link – https://github.com/karanatwal/vertical-viewpager-nestedscrollview
以下是VerticalVIEwPager代码 –
@H_403_11@@OverrIDepublic boolean onIntercepttouchEvent(MotionEvent ev) { boolean toIntercept = super.onIntercepttouchEvent(flipXY(ev)); // Return MotionEvent to normal float x = ev.getX(); flipXY(ev); int direction=1; switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: mStartDragX = x; break; case MotionEvent.ACTION_MOVE: if (mStartDragX < x ) { direction=-1; } else if (mStartDragX > x) { direction=1; } MainActivity.MyPagerAdapter adapter = (MainActivity.MyPagerAdapter)this.getAdapter(); if (adapter.getCurrentFragment() instanceof FragmentVIEwPager){ FragmentVIEwPager fragmentVIEwPager = (FragmentVIEwPager)adapter.getCurrentFragment(); toIntercept = !fragmentVIEwPager.getnestedScrollVIEw().canScrollVertically(direction); int range = fragmentVIEwPager.getnestedScrollVIEw().computeVerticalScrollRange(); int offset = fragmentVIEwPager.getnestedScrollVIEw().computeVerticalScrollOffset(); int extent = fragmentVIEwPager.getnestedScrollVIEw().computeVerticalScrollExtent(); int percentage = (int)(100.0 * offset / (float)(range - extent)); System.out.println(" range: "+range); System.out.print(" offset: "+offset); System.out.print(" extent: "+extent); System.out.print(" percentage: "+percentage); System.out.print(" direction: "+direction); if (fragmentVIEwPager.getnestedScrollVIEw().computeVerticalScrollOffset()==0 && direction==-1){ //top return true; } else if (percentage>99 && direction==1){ //bottom return true; }else { //scroll nestedscrollvIEw return false; } } break; } return toIntercept;}你的MyPagerAdapter –
@H_403_11@public class MyPagerAdapter extends FragmentStatePagerAdapter { public MyPagerAdapter(FragmentManager fm) { super(fm); } private Fragment mCurrentFragment; public Fragment getCurrentFragment() { return mCurrentFragment; } //... @OverrIDe public voID setPrimaryItem(VIEwGroup container,int position,Object object) { if (getCurrentFragment() != object) { mCurrentFragment = ((Fragment) object); } super.setPrimaryItem(container,position,object); } @OverrIDe public androID.support.v4.app.Fragment getItem(int pos) { switch (pos) { case 0: return FragmentVIEwPager.newInstance("Title Start",R.drawable.ic_launcher_background); case 1: return FragmentVIEwPager.newInstance("Rock",R.drawable.rock); case 2: return FragmentVIEwPager.newInstance("Paper",R.drawable.paper); case 3: return FragmentVIEwPager.newInstance("Scissors",R.drawable.scissors); case 4: return FragmentVIEwPager.newInstance("Title End",R.drawable.ic_launcher_background); default: return FragmentVIEwPager.newInstance("Default Title",R.drawable.rock); } } @OverrIDe public int getCount() { return 5; }}为了避免受限制的API方法 – 使用以下逻辑作为替代
@H_403_11@//offset,range and extent int scrollY = scrollVIEw.getScrollY(); int scrollContentHeight = scrollVIEw.getChildAt(0).getHeight(); int screenHeight = Utility.getScreenHeight(context); int statusbarHeight = Utility.getStatusbarHeight(context); double percent = ((((float) scrollY) / ((float) (scrollContentHeight - screenHeight + statusbarHeight))));您只需要滚动百分比和滑动方向.在SO上找到滚动百分比和滑动方向有很多问题,如this和this.你应该为它做一点R& D.
总结以上是内存溢出为你收集整理的android – 使用NestedScrollView处理VerticalViewPager的滚动全部内容,希望文章能够帮你解决android – 使用NestedScrollView处理VerticalViewPager的滚动所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)