Viewpager+Fragment+GridView 滑动切换时卡顿解决..
2017-03-01 10:36
507 查看
使用viewpager切换fragment时,发现有卡顿现象
在fragment onCreateView 设置log打印
发现onCreateView 重复调用
..加了判断 if(view ==null)重新加载0.0
/**
* 初始化模块
*/
@Override
public View onCreateView(final LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (view == null) {
view = inflater.inflate(R.layout.car_serve_activity, null);
adapter = new IconAdapter(getActivity());
mRedpassApp = (RedpassApp) getActivity().getApplication();
ensureUi();
}
Log.e("fragment", "car_createview");
// setTopBar();
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
if (view != null) {
((ViewGroup) view.getParent()).removeView(view);
}
}
再次测试..
发现onCreateView 依旧重复调用..卡顿减小了一丝丝..
检查onCreateView中是否执行了耗时操作..
so GridView 里耗时操作?
检查xml layout 发现 gridview <GridView
android:id="@+id/car_serve_gridView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"
android:layout_marginTop="10dip"
android:gravity="center"
android:horizontalSpacing="3dp"
android:listSelector="@android:color/transparent"
android:numColumns="3"
android:stretchMode="columnWidth"
android:verticalSpacing="3dp" >
</GridView>
是否因为 onCreateView 执行了耗时操作 ontMeasure()
改成match_parent;
唔...效果好些好了一点。
然道是滑动的阻尼系数导致滑动切换时的卡顿?
还是ViewPage 触摸事件分发GridView ?
最后问题定位到ViewPager的嵌套上,因为在ViewPager所包含的view中包含了GridView组件,因此在滑动的时候有一定几率touch事件会被GridView处理掉,从而导致不灵敏。
根源还是touch事件的传递就处理流程上,解决方案是集成ViewPager然后在onInterceptTouchEvent中加入如下代码:
即判断如果移动距离超过一定数值则认为滑屏操作,ViewPager就直接进行截取处理,不再传递到子view去。
OK,再次测试,发现卡顿基本消失了..流畅如飞啊~
可是这个onCreateView Log还是打印了出来0.0啥子问题?
继续翻阅资料..
查看API文档,只需要设置ViewPage缓存页面数即可。
mPager.setOffscreenPageLimit(3);
再次测试..Log 没有再跳出来了
值得注意的是..缓存页面 int 不要弄太多0.0占用资源..
在fragment onCreateView 设置log打印
发现onCreateView 重复调用
..加了判断 if(view ==null)重新加载0.0
/**
* 初始化模块
*/
@Override
public View onCreateView(final LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (view == null) {
view = inflater.inflate(R.layout.car_serve_activity, null);
adapter = new IconAdapter(getActivity());
mRedpassApp = (RedpassApp) getActivity().getApplication();
ensureUi();
}
Log.e("fragment", "car_createview");
// setTopBar();
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
if (view != null) {
((ViewGroup) view.getParent()).removeView(view);
}
}
再次测试..
发现onCreateView 依旧重复调用..卡顿减小了一丝丝..
检查onCreateView中是否执行了耗时操作..
so GridView 里耗时操作?
检查xml layout 发现 gridview <GridView
android:id="@+id/car_serve_gridView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"
android:layout_marginTop="10dip"
android:gravity="center"
android:horizontalSpacing="3dp"
android:listSelector="@android:color/transparent"
android:numColumns="3"
android:stretchMode="columnWidth"
android:verticalSpacing="3dp" >
</GridView>
android:layout_width="wrap_content"
是否因为 onCreateView 执行了耗时操作 ontMeasure()
改成match_parent;
唔...效果好些好了一点。
然道是滑动的阻尼系数导致滑动切换时的卡顿?
还是ViewPage 触摸事件分发GridView ?
最后问题定位到ViewPager的嵌套上,因为在ViewPager所包含的view中包含了GridView组件,因此在滑动的时候有一定几率touch事件会被GridView处理掉,从而导致不灵敏。
根源还是touch事件的传递就处理流程上,解决方案是集成ViewPager然后在onInterceptTouchEvent中加入如下代码:
@Override public boolean onInterceptTouchEvent(MotionEvent event) { boolean res = super.onInterceptTouchEvent(event); if(event.getAction() == MotionEvent.ACTION_DOWN) { preX = event 4000 .getX(); } else { if( Math.abs(event.getX() - preX)> 4 ) { return true; } else { preX = event.getX(); } } return res; }
即判断如果移动距离超过一定数值则认为滑屏操作,ViewPager就直接进行截取处理,不再传递到子view去。
OK,再次测试,发现卡顿基本消失了..流畅如飞啊~
可是这个onCreateView Log还是打印了出来0.0啥子问题?
继续翻阅资料..
查看API文档,只需要设置ViewPage缓存页面数即可。
mPager.setOffscreenPageLimit(3);
再次测试..Log 没有再跳出来了
值得注意的是..缓存页面 int 不要弄太多0.0占用资源..
相关文章推荐
- 顶部动态列表GridView+底部viewpager+fragment切换滑动
- viewpager、fragment滑动切换卡顿问题
- viewpager+fragment滑动切换卡顿问题
- 切换fragment回来的时候如果有类似viewpager的控件,会自动的被隐藏了,自动滑动了最上方的问题解决
- android 解决fragment+viewpager+fragment滑动卡顿的问题
- android viewpager fragment切换时界面卡顿解决办法
- tab切换fragment时,会出现滑动viewpager卡顿迟缓问题
- viewpager+fragment+slidingmenu滑动卡顿解决方法
- 解决 viewpager fragment 切换 Fragment被销毁的问题
- 修改ViewPager调用setCurrentItem时,滑屏的速度 ,解决滑动之间切换动画难看
- Android之ViewPager+Fragment实现页面点击切换和手势滑动
- Viewpager+Fragment+RecyclerView 在隔页点击切换数数据为空白的解决方法
- Android开发中如何解决Fragment +Viewpager滑动页面重复加载的问题
- 解决Android百度地图MapView在ViewPager中Fragment切换黑屏问题
- 使用TabLayout、ViewPager和Fragment实现顶部菜单可滑动切换
- Android 使用ViewPager和RadioGroup配合Fragment实现标签页,可点击按钮切换、滑动切换。
- 使用TabLayout、ViewPager和Fragment实现顶部菜单可滑动切换
- viewpager+fragment来回滑动fragment重新加载的简单解决办法
- ViewPager+Fragment实现页面点击切换和手势滑动
- ViewPager+DialogFragment实现弹窗左右滑动切换