How to Animate the Up-Button to Hamburger like in Gmail
2016-08-15 18:43
369 查看
在使用Drawerlayout时,Toolbar左上角的汉堡图标可以呼出侧栏菜单,当google推荐侧栏显示延伸到状态栏下面时,曾经的酷炫的汉堡变箭头动画就被盖住了,这么酷的动画似乎没有存在的必要。
gmail首页中,点击列表任意item都会进入邮件详情页面,这个过程Toolbar左上角的汉堡图标会变换成箭头图标。如下:
这样的话,当点击汉堡图标呼出侧栏菜单时,动画就可以去掉了。而且,在进入邮件详情时,如果想快速进入其它主菜单,可以直接在左侧屏幕边缘右滑呼出侧栏菜单,不用点返回再去呼出侧栏菜单,减少了操作层次。
接下来,可以尝试去实现这个效果。
在普通的DrawerLayout中,汉堡变箭头动画是随着DrawerLayout呼出而变化的。从源码ActionBarDrawerArrowToggle中可以找到,控制汉堡变箭头动画是由方法setProgress();控制的:
onDrawerSlide是DrawerListener的回调方法,也就是但侧栏滑动过程时调用。mSlider是继承DrawerArrowDrawable的DrawerArrowDrawableToggle内部类对象,DrawerArrowDrawable则就是主要这个动画的实现类,实现方法就是setProgress()。
实现这个动画主要是调用mSlider.setPosition(some_float_between_0_and_1);所以可以这样实现:
1,由于mSlider是私有变量,我们可以通过反射取到这个私有变量,然后调用setPosition(some_float_between_0_and_1);由于是要实现动画,所以传递的参数可以用ValueAnimator.ofFloat(float... values)实现。
2,另外,可以稍微封装起来,这样可以不用反射,增加适用性。效果如下:
在stackoverflow上找到了另外一种方法,但是实际效果却不怎么好http://stackoverflow.com/questions/36631288/how-to-animate-the-up-button-to-hamburger-like-in-gmail第一个回答。
github地址:https://github.com/XYScience/DrawerToggleLikeGmail
gmail首页中,点击列表任意item都会进入邮件详情页面,这个过程Toolbar左上角的汉堡图标会变换成箭头图标。如下:
这样的话,当点击汉堡图标呼出侧栏菜单时,动画就可以去掉了。而且,在进入邮件详情时,如果想快速进入其它主菜单,可以直接在左侧屏幕边缘右滑呼出侧栏菜单,不用点返回再去呼出侧栏菜单,减少了操作层次。
接下来,可以尝试去实现这个效果。
在普通的DrawerLayout中,汉堡变箭头动画是随着DrawerLayout呼出而变化的。从源码ActionBarDrawerArrowToggle中可以找到,控制汉堡变箭头动画是由方法setProgress();控制的:
@Override public void onDrawerSlide(View drawerView, float slideOffset) { mSlider.setPosition(Math.min(1f, Math.max(0, slideOffset))); }
public void setPosition(float position) { if (position == 1f) { setVerticalMirror(true); } else if (position == 0f) { setVerticalMirror(false); } setProgress(position); }
onDrawerSlide是DrawerListener的回调方法,也就是但侧栏滑动过程时调用。mSlider是继承DrawerArrowDrawable的DrawerArrowDrawableToggle内部类对象,DrawerArrowDrawable则就是主要这个动画的实现类,实现方法就是setProgress()。
实现这个动画主要是调用mSlider.setPosition(some_float_between_0_and_1);所以可以这样实现:
1,由于mSlider是私有变量,我们可以通过反射取到这个私有变量,然后调用setPosition(some_float_between_0_and_1);由于是要实现动画,所以传递的参数可以用ValueAnimator.ofFloat(float... values)实现。
2,另外,可以稍微封装起来,这样可以不用反射,增加适用性。效果如下:
在stackoverflow上找到了另外一种方法,但是实际效果却不怎么好http://stackoverflow.com/questions/36631288/how-to-animate-the-up-button-to-hamburger-like-in-gmail第一个回答。
github地址:https://github.com/XYScience/DrawerToggleLikeGmail
相关文章推荐
- How To Turn Up Logging on the Siebel Web Server Extension in Siebel Versions 7.x and 8.x? [ID 477185
- [Android 問題] How to Add a Button in ListView, and Make the Event of onClick and onItemClick Coexist?
- How to set up OpenERP for various timezone kindly follow the following steps to select timezone in OpenERP
- How to hide the OK button in the dialog in .Net Compact Framework application?
- How to hide the create button dynamical tree view in openerp ?
- How to alignment the center position of the button in Android?
- How to avoid the "enumeral mismatch" error in eikmenup.h
- How to get files to show up in the Process Monitor/Report Repository
- How to build a nice Hamburger Button transition in Swift
- How to Keep Your Skills Up-to-Date in the New Year(如何提升测试技能)
- How to handle the MouseLeftButtonDown and MouseLeftButtonUp events of the Button control?
- [WP7] How to press the mouse on a control, and detect MouseLeftButtonUp on another
- How to add a button in the seletions "More"
- [转载]How to hide the OK button in the dialog in .Net Compact Framework application?
- How to Set Up SQL Server 2008 FileStream In the Cluster
- How to set the DefaultButton in a Page Based on ASP.NET Master Page
- how to put the text on the left of a radio button in android
- How to get the IIS root path in other application.
- How to check the MSOLAP Provider used in connection string
- How to remove ^M in the file