Launcher3动态切换桌面排列和解锁动画
2015-12-06 15:20
369 查看
切换图标排列和大小
桌面图标的排列数目和大小代码在DynamicGrid和DeviceProfile中,在Launcher.java的onCreate()中可以看到:
grid = app.initDynamicGrid(this);
app是LauncherAppState的对象,这句代码就是创建一个grid对象然后供桌面的布局使用,看一下initDynamicGrid方法的代码:
DeviceProfile initDynamicGrid(Context context) { mDynamicGrid = createDynamicGrid(context, mDynamicGrid); mDynamicGrid.getDeviceProfile().addCallback(this); return mDynamicGrid.getDeviceProfile(); }
createDynamicGrid(Context context, DynamicGrid dynamicGrid)方法中传入一个DynamicGrid对象mDynamicGrid,如果mDynamicGrid为null,将调用DynamicGrid的构造方法重新创建一个,这里出现了两种DeviceProfile构造函数。第一种构建了几种常规分辨率屏幕的DeviceProfile列表,第二个构造函数中根据规则选择了与当前屏幕参数最接近的DeviceProfile,onCreate()中用的就是这个DeviceProfile。
如果修改桌面时,想要修改桌面的排列的行列数或图标大小可以从这里入手,可以修改DeviceProfile的列表中的DeviceProfile,或者直接修改上面说的第二个构造函数中相关信息。如果想要动态的切换两种甚至几种排列情况,可以使用SharedPreferences来保存数据,根据数据变化来修改对应的值:使用resetLoadedState和startLoader方法重新载入数据,然后更新桌面布局的DeviceProfile对象,根据上文所说的在onCreate()的initDynamicGrid方法中,将mDynamicGrid置为null,这样将会使用新数据构造一个DeviceProfile对象。
DeviceProfile initDynamicGrid(Context context, boolean reInit) { if (reInit == ture){ mDynamicGrid = null; } mDynamicGrid = createDynamicGrid(context, mDynamicGrid); mDynamicGrid.getDeviceProfile().addCallback(this); return mDynamicGrid.getDeviceProfile(); }
有一点要注意的是如果时动态修改要注意修改前后Workspace页数和桌面具体图标的排列情况。Workspace行列改变了,Launcher数据库保存的数据也要根据需求进行修改。
解锁动画
Android提供了解锁的监听Action:Intent.ACTION_USER_PRESENT,解锁后只需当前页执行动画效果即可,mWorkspace.getCurrentPage()可以获得Launcher3当前显示的页面序号。Workspace.getPageAt(int)可得到当前页面的CellLayout对象。再调用CellLayout的方法getChildAt(int, int)即可得到相对应的桌面元素对应View对象。即然可以得到对象,便可以方便地设计解锁时的动画效果。相关文章推荐
- c++类---隐式的类型转换
- Java和C++区别
- iOS-Swift-递归计算Cell高度
- Linux多线程网络编程(一)
- 直接插入排序
- 升级Windows10后Apache服务器启动失败的解决方法
- LeetCode Populating Next Right Pointers in Each Node I and II
- linux 分区 物理卷 逻辑卷
- 数据结构实验之查找七:线性之哈希表
- 抓狂的指针
- Android与Linux中从uid到用户名的映射
- 用Windows API 编写的简单贪吃蛇游戏
- 年轻人,别动不动就想搞个“大社交”,工具型社交才是正路子
- C++:string转char*
- Apache Prefork、Worker和Event三种MPM工作模式分析
- 404错误的处理方式及对SEO的影响
- OnInitDialog不执行
- HTML5 Canvas画标准的五星红旗(中国国旗)
- linux 下shell
- 冒泡排序