记录一下Android开发艺术探索中第10章 Android的消息机制的笔记
more >>最近工作中需要做一个曲线的动画,记录下学习的过程。
贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线。一般的矢量图形软件通过它来精确画出曲线,贝兹曲线由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋,我们在绘图工具上看到的钢笔工具就是来做这种矢量曲线的。贝塞尔曲线是计算机图形学中相当重要的参数曲线,在一些比较成熟的位图软件中也有贝塞尔曲线工具,如PhotoShop等。在Flash4中还没有完整的曲线工具,而在Flash5里面已经提供出贝塞尔曲线工具。
more >> 记录一下平时工作时遇到的比较奇怪的问题。
|
|
将PopupWindow添加上述属性即可。
在一个Activity中,有5个自定义的ViewPager,由于在自定义布局中的ViewPager的ID是相同的,因此导致只有第一个ViewPager的Fragment会初始化。
导致以上问题的原因就在于FragmentPagerAdapter中的instantiateItem函数中FragmentManager以container的id加fragment的position为标记。导致第一个ViewPager的position初始化后进了缓存,第二个ViewPager的position1就直接从缓存中获取数据:
|
|
以上container.getId()就是fragment父控件的ID
所以解决的方法有两种
在此次遇到的问题中,由于ViewPager的数量比较少,因此采用了第二种方法,给每个ViewPager在代码中setId,解决了问题。
在项目中涉及到了对ViewPager的更新,但是在调用NotifyDataSetChanged方法之后,发现无效,经过各方查找,发现问题原因如下:
没有重载getItemPosition()函数
首先来看一下notifyDataSetChanged()的作用:
在数据集发生变化的时候,一般 Activity 会调用 PagerAdapter.notifyDataSetChanged(),以通知 PagerAdapter,而 PagerAdapter 则会通知在自己这里注册过的所有 DataSetObserver。其中之一就是在 ViewPager.setAdapter() 中注册过的 PageObserver。PageObserver 则进而调用 ViewPager.dataSetChanged(),从而导致 ViewPager 开始触发更新其内含 View 的操作。
再来看getItemPosition()函数:
该函数默认直接返回 POSITION_UNCHANGED,从而导致ViewPager.dataSetChanged()被调用时,认为不必触发PagerAdapter.instantiateItem(),因此导致调用了notifyDataSetChanged后什么都没有发生。
所以解决办法就是
|
|
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
|
|
More info: Writing
|
|
More info: Server
|
|
More info: Generating
|
|
More info: Deployment