使用动画和fragment改善Android表单
来源:互联网 发布:人工智能人才培养 编辑:程序博客网 时间:2024/06/06 13:09
下图是captain train的搜索页面的效果图,这篇文章我就来分析一下如何实现一个类似的效果。
分析Android中的动画效果,最好是从一个放慢的动画效果图来分析,可以通过Android系统中的开发者选项里面设置动画的时长。下图是10倍动画时长的效果
整个界面主要由两部分构成,正常模式显示的表单以及当某一个表单获取焦点的时候,需要显示出来的编辑面板(比如点击日期表单的时候,含有日期控件的编辑面板会显示出来),编辑面板可以使用fragment,这样也便于代码的模块化。
仔细观察,可以发现整个效果其实是由多个同时发生的子动画组成的。子动画主要有一下几个:
1.移动获取焦点的控件,以及这个控件上面的所有控件,最终的结果就是获取焦点的控件移动到actionbar下面。
2.获取焦点的控件下面的控件的淡出效果。主要就是隐藏在编辑模式下不需要的控件。
3.编辑面板(比如日期控件)的渐入效果。
4.附着(stick to)动画,主要是一些控件需要始终位于获取焦点的控件下方,这些控件会随着获取焦点的控件一起移动。
下面就是每个动画对应的代码实现:
layout很简单,主要容器就是一个scrollview,具体代码可以参考github代码。
1. 移动获取焦点的控件
如果获取焦点的控件是容器的直接子控件,通过getTop()方法就可以得到需要移动的距离,如果不是的话,就需要使用View#getDrawingRect(Rect)和容器的ViewGroup#offsetDescendantRectToMyCoords(View, Rect)方法。
private final Rect mTmpRect = new Rect();private void focusOn(View v, View movableView, boolean animated) { v.getDrawingRect(mTmpRect); mMainContainer.offsetDescendantRectToMyCoords(v, mTmpRect); movableView.animate(). translationY(-mTmpRect.top). setDuration(animated ? ANIMATION_DURATION : 0). setInterpolator(ANIMATION_INTERPOLATOR). start();}
2.获取焦点的控件下的控件的淡出效果
控件会在向下移动容器高度的一半后完全淡出。这里要通过容器的OnLayoutChangeListener来获取容器的高度。
private void fadeOutToBottom(View v, boolean animated) { v.animate(). translationYBy(mHalfHeight). alpha(0). setDuration(animated ? ANIMATION_DURATION : 0). setInterpolator(ANIMATION_INTERPOLATOR). start();}
3.编辑面板(比如日期控件)的渐入效果
编辑模式要现实的控件会放到一个容器中,这个容器默认是不可见的,进入编辑模式之后,设置容器可见,并且将容器的y坐标设置为0。为了避免遮挡住获取焦点的控件,可以给容器设置一个比较大的padding。
private void slideInToTop(View v, boolean animated) { v.animate(). translationY(0). alpha(1). setDuration(animated ? ANIMATION_DURATION : 0). setInterpolator(ANIMATION_INTERPOLATOR);}
4.附着动画
这里就是让一个灰色的view始终保持在获取焦点的控件下面。
private void stickTo(View v, View viewToStickTo, boolean animated) { v.getDrawingRect(mTmpRect); mMainContainer.offsetDescendantRectToMyCoords(v, mTmpRect); v.animate(). translationY(viewToStickTo.getHeight() - mTmpRect.top). setDuration(animated ? ANIMATION_DURATION : 0). setInterpolator(ANIMATION_INTERPOLATOR). start();}
github地址
参考:
http://cyrilmottier.com/2014/05/20/custom-animations-with-fragments/
https://git.mika-dev.com/public
- 使用动画和fragment改善Android表单
- Android Activity和Fragment的转场动画
- Android Activity和Fragment的转场动画
- Android Activity和Fragment的转场动画
- Android Activity和Fragment的转场动画
- Android应用开发:动画和Fragment
- Android Activity和Fragment的转场动画
- Android Activity和Fragment的转场动画
- Android Activity和Fragment的转场动画
- Android Activity和Fragment的转场动画
- Android Activity和Fragment的转场动画
- Android Activity和Fragment的转场动画
- Android Fragment使用和学习
- 【Android】创建和使用fragment
- Android Fragment切换动画
- Android视频学习(十):Fragment和动画
- 如何使用动画和精灵表单 Cocos2d-x 2.1.4
- 如何使用动画和精灵表单 Cocos2d-x 2.1.4
- setContentView( )的简单用法
- 设置屏幕颜色
- [SC-07]qt语言翻译家linguist的使用
- UVA - 10004 Bicoloring
- 关于python文件操作
- 使用动画和fragment改善Android表单
- 点分十进制子网掩码和CIDR的相互转换
- java.系统自动生成一个1-100之间的整数,请猜出这个数
- SpringMVC框架搭建
- matlab 声卡 信号源
- 重构之3.Replace Type Code with Subclasses(以子类取代类型码)
- 判断一个IP是否在指定的网络中
- Spring3.x--SpringMVC
- ThoughtWorks开源了Go持续交付平台