最近做Android项目中常见的ViewPager布局,感觉有几个小坑,我就想着写下来,考虑多所不周,以后有新的想法,再做补充。
1、ViewPager遇到网络异步加载时的优化问题:
1.1、有时候我通过ViewPager.setOffscreenPageLimit(width)来解决,width指的是当前Pager的两侧可以拓展的宽度。这种方法适合比较体量较小的UI元素,保证用户使用的连贯性。若用于存放类似大量图片的话,内存可能受不了。
1.2、虽然安卓手机的内存使用很局促,但是可以把网络异步加载的内容,写入外部cache,这个容量相对于内存很可观。这样当二次加载的时候,从cache里加载比网络还是快很多了。
2、ViewPager和标题栏互动的问题
2.1、通常我们滑动ViewPager的时候,希望相应的标题栏也获得响应(选定和居中)。对于自动居中,需要屏幕宽度高度数据,为此有以下几种等效方法:
方法一:
123WindowManager wm = (WindowManager)this.getSystemService(Context.WINDOW_SERVICE);intwidth = wm.getDefaultDisplay().getWidth();intheight = wm.getDefaultDisplay().getHeight();
方法二:
123WindowManager wm1 =this.getWindowManager();intwidth1 = wm1.getDefaultDisplay().getWidth();intheight1 = wm1.getDefaultDisplay().getHeight();
方法一与方法二获取屏幕宽度的方法类似,只是获取WindowManager 对象时的途径不同。
方法三:
12345DisplayMetrics outMetrics =newDisplayMetrics();this.getWindowManager().getDefaultDisplay().getMetrics(outMetrics);intwidth2 = outMetrics.widthPixels;intheight2 = outMetrics.heightPixels;
方法四:
12345 DisplayMetrics dm =this.getResources()getDisplayMetrics();floatdensity1 = dm.density;intwidth3 = dm.widthPixels;intheight3 = dm.heightPixels;
方法三与方法四类似。
接下来对于标题栏的操作一般是Title.SmoothScrollTo(int x, int y),其中x,y是相对当前位置的偏移量
(比如从0移动到100,偏移量是0-100=-100);
3、警惕异步加载
为什么我说要警惕异步加载,因为在Android里面,耗时操作不允许放在主线程里,所有的耗时操作都要求放
在子线程里进行,如果我们在主线程里操作子线程返回的结果,我们经常会想当然的认为子线程结果已经返回,
所以这个时候我们很容易遇到空指针异常,所以在操作子线程的时候,你应该好好想想会对主线程有什么影响。

本文针对Android开发中的ViewPager组件,探讨了网络异步加载时的优化策略及与标题栏的互动实现方式。介绍了如何通过设置离屏页面限制和利用外部缓存优化加载效率,并提供了获取屏幕尺寸的具体方法。
628

被折叠的 条评论
为什么被折叠?



