【转载】Android Metro风格的Launcher开发系列第二篇
前言:
Launcher主体框架实现:
- 滑动速度控制:
这个是通过获取ViewPager的Scroller,对Scroller重新设置一些参数就可以了,具体实现的代码如下:
- Field Scroller = ViewPager.class.getDeclaredField("mScroller");
- Scroller.setAccessible(true);
- Interpolator interpolator = new LinearInterpolator();//设置加速器
- ViewPagerScroller scroller = new ViewPagerScroller(context,interpolator);//重新设置ViewPager的Scroller
- Scroller.set(this, scroller);
在上面的代码中用到了ViewPagerScroller.java,在ViewPagerScroller中的设置如下,其中的mDuration变量是自定义的动画时间,这个你可以根据自己的动画效果来设置时间长度,我这定义的是500毫秒。
- @Override
- public void startScroll(int startX, int startY, int dx, int dy) {
- // Ignore received duration, use fixed one instead
- super.startScroll(startX, startY, dx, dy, mDuration);
- }
- @Override
- public void startScroll(int startX, int startY, int dx, int dy, int duration) {
- // Ignore received duration, use fixed one instead
- super.startScroll(startX, startY, dx, dy, mDuration);
- }
- Page之间切换效果实现: 每一屏page之间的切换是通过实现ViewPager.PageTransformer接口来实现的,具体这个接口的讲解我这里就不介绍了,大家可以参考google官方文档:Using ViewPager for Screen Slides。我的实现如下所示:
- class LauncherPageTransformer implements ViewPager.PageTransformer {
- private static float DEFAULT_SCALE = 1.0f;
- private static float SCALE_FACTOR = 0.30f;// 缩放因子 0.50f
- private static float ROTATION_FACTOR = 20f;// 旋转因子
- private static float ALPHA_FACTOR = 0.8f;
- @Override
- public void transformPage(View view, float position) {
- if (position <= 1) { // [-1,1]
- // Modify the default slide transition to shrink the page as well
- if (position < 0) {
- // view.setRotationY(position * ROTATION_FACTOR);
- view.setScaleX(SCALE_FACTOR * position + DEFAULT_SCALE);
- view.setScaleY(SCALE_FACTOR * position + DEFAULT_SCALE);
- // view.setAlpha(ALPHA_FACTOR * position + 1.0f);
- } else {
- // view.setRotationY(position * ROTATION_FACTOR);
- view.setScaleX(SCALE_FACTOR * -position + DEFAULT_SCALE);
- view.setScaleY(SCALE_FACTOR * -position + DEFAULT_SCALE);
- // view.setAlpha(ALPHA_FACTOR * -position + 1.0f);
- }
- }
- }
- }
具体效果可以通过修改旋转和缩放实现。
- 左右两侧page悬浮实现:
主屏幕page两侧page部分显示可以通过设置ViewPager的setPageMargin(int margin)方法实现,具体代码如下:
- public class LauncherViewPager extends ViewPager {
- public static final int PAGE_LIMIT = 3;
- public LauncherViewPager(Context context) {
- this(context, null);
- }
- public LauncherViewPager(Context context, AttributeSet attrs) {
- super(context, attrs);
- init(context);
- }
- private void init(Context context) {
- this.setPageMargin(-getResources().getInteger(R.integer.portal_viewpager_margin));
- this.setOffscreenPageLimit(PAGE_LIMIT);
- this.setPageTransformer(true, new LauncherPageTransformer());
- try {
- Field Scroller = ViewPager.class.getDeclaredField("mScroller");
- Scroller.setAccessible(true);
- Interpolator interpolator = new LinearInterpolator();
- ViewPagerScroller scroller = new ViewPagerScroller(context,
- interpolator);
- Scroller.set(this, scroller);
- } catch (NoSuchFieldException e) {
- } catch (IllegalArgumentException e) {
- } catch (IllegalAccessException e) {
- }
- }
- }
- 总结:
以上就是Launcher主体框架使用ViewPager实现左右滑动和缩放效果讲解,写的不好的地方还请大家指出并批评指正,“三人行必有我师”,任何给我的批评和建议我一定会有回复和交流,可以加我的微信号,更快的交流。 下一篇博客我将会讲解屏幕中每一格CellView实现,有焦点放大效果,实现每一个Focus的CellView悬浮效果和在xml文件中灵活配置关联链接等。
第一时间获得博客更新提醒,以及更多技术信息分享,欢迎关注个人微信公众平台:程序员互动联盟(coder_online),扫一扫下方二维码或搜索微信号coder_online即可关注,我们可以在线交流。
【转载】Android Metro风格的Launcher开发系列第二篇的更多相关文章
- [转载] Android Metro风格的Launcher开发系列第一篇
前言:从毕业到现在已经三年多了,回忆一下这三年基本上没有写过博客,总是觉得忙,没时间写,也觉得写博客没什么大用.但是看到很多大牛们都在写博客,分享自己的东西,所以嘛本着向大牛看齐,分享第一,记录第二的 ...
- Android Metro风格的Launcher开发系列第二篇
前言: 各位小伙伴们请原谅我隔了这么久才开始写这一系列的第二篇博客,没办法忙新产品发布,好了废话不说了,先回顾一下:在我的上一篇博客http://www.cnblogs.com/2010wuhao/p ...
- Android Metro风格的Launcher开发系列第一篇
前言:从毕业到现在已经三年多了,回忆一下这三年基本上没有写过博客,总是觉得忙,没时间写,也觉得写博客没什么大用.但是看到很多大牛们都在写博客,分享自己的东西,所以嘛本着向大牛看齐,分享第一,记录第二的 ...
- Android Metro风格的Launcher开发系列第三篇
前言: 各位小伙伴,又到了每周更新文章了时候了,本来是周日能发出来呢,这不是赶上清明节吗,女王大人发话了,清明节前两天半陪她玩,只留给我周一下午半天时间写博客,哪里有女王哪里就有压迫呀有木有!好了闲话 ...
- chromium浏览器开发系列第二篇:如何编译最新chromium源码
说一下为什么这么晚才发第二篇,上周和这周department的工作太多了,晚上都是十点半从公司出发,回家以后实在没有多余的精力去摸键盘了.所以请大家包涵! 上期回顾: chromium源码下载: 1. ...
- chromium浏览器开发系列第二篇:如何编译最新chromium
说一下为什么这么晚才发第二篇,上周和这周department的工作太多了,晚上都是十点半从公司出发,回家以后实在没有多余的精力去摸键盘了.所以请大家包涵! 上期回顾: chromium源码下载: 1. ...
- Android设计和开发系列第二篇:Action Bar(Develop—API Guides)
Action Bar IN THIS DOCUMENT Adding the Action Bar Removing the action bar Using a logo instead of an ...
- Android设计和开发系列第二篇:Navigation Drawer(Develop)
Creating a Navigation Drawer THIS LESSON TEACHES YOU TO: Create a Drawer Layout Initialize the Drawe ...
- Android设计和开发系列第二篇:Action Bar(Develop—Training)
Adding the Action Bar GET STARTED DEPENDENCIES AND PREREQUISITES Android 2.1 or higher YOU SHOULD AL ...
随机推荐
- 如何订阅Form的自定义事件
Window Form类有很多的属性/方法和事件,其中事件属于一种发布订阅模式 .订阅发布模式定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主体对象.这个主体对象在自身状态变化时,会通知所 ...
- FancySelect – 更好用的 jQuery 下拉选择框插件
FancySelect 这款插件是 Web 开发中下拉框功能的一个更好的选择.FancySelect 使用方便,只要绑定页面上的任何 Select 元素,并调用就 .fancySelect() 就可以 ...
- [deviceone开发]-拼图小游戏
一.简介 九宫格小游戏,可从本地图库载入一张图片,填充到9个ImageView,另涉及Timer计时.图库控件. 每个格子都是相同的控件,动态添加到首页中的,在初始化后,响应touch事件,之后通过多 ...
- ruby(&gem) koala安装
1.ruby下载安装 下载地址:http://railsinstaller.org/en 选择合适版本 2.gem(安装ruby时自带gem) 删除原镜像:gem sources --remove h ...
- ionic + cordova 使用 cordova-plugin-crosswalk-webview 中的一些个坑
1) 在使用Web Audio API 时,无法使用 AudioContext.decodeAudioData() 对MP3文件进行解码 2)使用Cordova-plugin-weibosdk 插件时 ...
- ABAP--关于ABAP流程处理的一些命令的说明(stop,exit,return,check,reject)
Stop 命令 使用该命令的程序位置 INITIALIZATION, AT SELECTION-SCREEN, START-OF-SELECTION和GET 事件中 处理说明 1. 当在INITIAL ...
- SharePoint 2013 和卷影复制服务(VSS)概述
对备份供应商而言,卷影复制服务 (VSS) 使用集中式 API 简化了 Microsoft 服务器解决方案的备份.Microsoft SharePoint Foundation 包括一个参考 VSS ...
- 原创:phoenix4.6.0连接hbase1.1.2(不使用phoenix-4.6.0-HBase-1.1-client.jar)
官网上面的例子是在phoenix-4.6.0-HBase-1.1-client.jar完成的,这个jar包含了phoenix4.6连接hbase1.1.2所有的依赖,真是包罗万象(里面竟然还包括了se ...
- 使用Autodesk OAuth服务在用户认证的示例
大家知道以Autodesk 360为核心的Autodesk 云服务已经陆续发布,ReCap API.InfraWorks API和PLM 360 REST API已经开始的Pilot项目供第三方开发者 ...
- mac安装Aws cli失败
OS X EI 10.11 报错信息如下: Found existing installation: six 1.4.1 DEPRECATION: Uninstalling a distutils i ...