您的位置:首页 > 其它

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对象。即然可以得到对象,便可以方便地设计解锁时的动画效果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: