【转载】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 ...
随机推荐
- 如何理解javascript closure ?
接触过javascript的人应该听过闭包(closure),有一种观点认为是闭包赋予了javascript的强大能力,也赋予了它具备OOP的特征.既然javascript closure如此重要,那 ...
- Hyhyhy – 专业的 HTML5 演示文稿工具
Hyhyhy 是创建好看的 HTML5 演示文档的工具.它具备很多的特点:支持 Markdown,嵌套幻灯片,数学排版,兼容性,语法高亮,使用 Javascript API ,方便的骨架.它支持 Fi ...
- 12款免费的 WordPress 响应式主题下载
最流行的内容管理系统(WordPress)和最流行的网页设计技术(响应式设计)结合会是什么样的呢?下面这个列表收集了12款响应式的 Wordpress 主题,能够带给你不一样的网站体验. 您可能感兴趣 ...
- 让你忘记 Flash 的15款精彩 HTML5 游戏
HTML5 游戏开发是一个热门的话题,开发人员和设计人员最近经常谈论到.虽然不能迅速取代 Flash 的地位,但是 HTML5 凭借它的开放性和强大的编程能力,取代 Flash 是必然的趋势.你会看到 ...
- BFC布局原理
写这篇博客的初衷其实是在解决浮动的时候看到的这个方法,就想着BFC是什么,为什么可以清除浮动.结果不看不知道,一看越看越不明白,潜下心来研究看看,总结一下学习心得. 1.BFC是什么 BFC就是Box ...
- VS 2015打开项目闪退,新建项目提示未将对象引用到实例
因为开发需要,要把开发工具换成visual studio2015,装完之后会有警告“js”安装的问题,打开VS也没有问题, 但是一打开项目就闪退,新建项目也不行,查看应用程序日志,报错提示如下: .N ...
- 8月7号晚7点Autodesk北京办公室,我们来聊聊HTML5/ WebGL 3D 模型浏览技术
Autodesk 发布了一款完全无需插件的三维模型浏览器 Autodesk 360 Viewer,大家有没有兴趣,下班后过来聊聊吧! 8月7号 周四, 19:00~21:00 Autodesk北京 ...
- Android Tips: 在给drawable中添加图片资源时,文件名必须全小写
在给drawable中添加图片资源时,文件名必须全小写
- 使用Autodesk OAuth服务在用户认证的示例
大家知道以Autodesk 360为核心的Autodesk 云服务已经陆续发布,ReCap API.InfraWorks API和PLM 360 REST API已经开始的Pilot项目供第三方开发者 ...
- Tint(着色器)的兼容实现
我们在做控件的时候可以使用tint这个属性给控件上色,这样在很多情况下能减少不同色彩的资源色彩.在MD设计中,控件颜色随着主体改变也是一大要点,今天我们就来看看如何使用它. 使用步骤:1.建立一个控件 ...