ViewPager & Fragment & HorizontalScrollView & ListView···

3 篇文章 0 订阅
1 篇文章 0 订阅

最近做Android项目中常见的ViewPager布局,感觉有几个小坑,我就想着写下来,考虑多所不周,以后有新的想法,再做补充。

1、ViewPager遇到网络异步加载时的优化问题:

1.1、有时候我通过ViewPager.setOffscreenPageLimit(width)来解决,width指的是当前Pager的两侧可以拓展的宽度。这种方法适合比较体量较小的UI元素,保证用户使用的连贯性。若用于存放类似大量图片的话,内存可能受不了。

1.2、虽然安卓手机的内存使用很局促,但是可以把网络异步加载的内容,写入外部cache,这个容量相对于内存很可观。这样当二次加载的时候,从cache里加载比网络还是快很多了。

2、ViewPager和标题栏互动的问题

2.1、通常我们滑动ViewPager的时候,希望相应的标题栏也获得响应(选定和居中)。对于自动居中,需要屏幕宽度高度数据,为此有以下几种等效方法:

方法一:

1
2
3
WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
int width = wm.getDefaultDisplay().getWidth();
int height = wm.getDefaultDisplay().getHeight();

方法二:

1
2
3
WindowManager wm1 = this.getWindowManager();
int width1 = wm1.getDefaultDisplay().getWidth();
int height1 = wm1.getDefaultDisplay().getHeight();

方法一与方法二获取屏幕宽度的方法类似,只是获取WindowManager 对象时的途径不同。

方法三:

1
2
3
4
5
DisplayMetrics outMetrics =  new   DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
int width2 = outMetrics.widthPixels;
int height2 = outMetrics.heightPixels;

方法四:

1
2
3
4
5
DisplayMetrics dm =  this .getResources() getDisplayMetrics();
float density1 = dm.density;
int width3 = dm.widthPixels;
int height3 = dm.heightPixels;

方法三与方法四类似。

接下来对于标题栏的操作一般是Title.SmoothScrollTo(int x, int y),其中x,y是相对当前位置的偏移量

(比如从0移动到100,偏移量是0-100=-100);

3、警惕异步加载

为什么我说要警惕异步加载,因为在Android里面,耗时操作不允许放在主线程里,所有的耗时操作都要求放

在子线程里进行,如果我们在主线程里操作子线程返回的结果,我们经常会想当然的认为子线程结果已经返回,

所以这个时候我们很容易遇到空指针异常,所以在操作子线程的时候,你应该好好想想会对主线程有什么影响。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值