android中tween动画自定义
2016-03-22 15:30
337 查看
由TranslateAnimation来看自定义动画:
构造函数中对移动信息做了初始化;
下面方法是根据interpolateTime,来计算出变换矩阵;
interpolatedTime获得方式: 可以自定义插值器来 控制动画速度;
实现 Interpolator 接口;
/** * Constructor to use when building a TranslateAnimation from code * * @param fromXDelta Change in X coordinate to apply at the start of the * animation * @param toXDelta Change in X coordinate to apply at the end of the * animation * @param fromYDelta Change in Y coordinate to apply at the start of the * animation * @param toYDelta Change in Y coordinate to apply at the end of the * animation */ public TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta) { mFromXValue = fromXDelta; mToXValue = toXDelta; mFromYValue = fromYDelta; mToYValue = toYDelta; mFromXType = ABSOLUTE; mToXType = ABSOLUTE; mFromYType = ABSOLUTE; mToYType = ABSOLUTE; }
构造函数中对移动信息做了初始化;
下面方法是根据interpolateTime,来计算出变换矩阵;
@Override protected void applyTransformation(float interpolatedTime, Transformation t) { float dx = mFromXDelta; float dy = mFromYDelta; if (mFromXDelta != mToXDelta) { dx = mFromXDelta + ((mToXDelta - mFromXDelta) * interpolatedTime); } if (mFromYDelta != mToYDelta) { dy = mFromYDelta + ((mToYDelta - mFromYDelta) * interpolatedTime); } t.getMatrix().setTranslate(dx, dy); }
重写的方法: @Override public void initialize(int width, int height, int parentWidth, int parentHeight) { super.initialize(width, height, parentWidth, parentHeight); mFromXDelta = resolveSize(mFromXType, mFromXValue, width, parentWidth); mToXDelta = resolveSize(mToXType, mToXValue, width, parentWidth); mFromYDelta = resolveSize(mFromYType, mFromYValue, height, parentHeight); mToYDelta = resolveSize(mToYType, mToYValue, height, parentHeight); }initialize方法是在View的下面方法中调用:
/** * Utility function, called by draw(canvas, parent, drawingTime) to handle the less common * case of an active Animation being run on the view. */ private boolean applyLegacyAnimation(ViewGroup parent, long drawingTime, Animation a, boolean scalingRequired) { Transformation invalidationTransform; final int flags = parent.mGroupFlags; final boolean initialized = a.isInitialized(); if (!initialized) { a.initialize(mRight - mLeft, mBottom - mTop, parent.getWidth(), parent.getHeight()); a.initializeInvalidateRegion(0, 0, mRight - mLeft, mBottom - mTop); if (mAttachInfo != null) a.setListenerHandler(mAttachInfo.mHandler); onAnimationStart(); } ................................................ }
interpolatedTime获得方式: 可以自定义插值器来 控制动画速度;
实现 Interpolator 接口;
相关文章推荐
- Android Notification通知专题
- Android自定义刮刮乐控件
- Android 百度地图 SDK v3.0.0
- 【Android进阶】如何给gridview的单元格加上分割线
- Android中的Handler的post方法
- android数据持久化存储(1)
- Android-->Rxjava与Retrofit2的结合实战
- Android 之 ExpandableListView 的使用
- 详解Android中的Context抽象类
- 【Android inflate 参数 完全诠释】
- Android中MVC、MVP、MVVM详解
- Android 状态栏、标题栏、屏幕高度、全屏
- [android|ViewPager]关于ViewPager如何阻止其滑动和一次切换多页闪烁的问题
- Android之字符串的拆分-split
- Android Studio的使用——引入库如:引入PullToRefresh的library
- (转)Android Volley完全解析(一),初识Volley的基本用法
- Android 简单实现ListView顶部悬浮效果
- Android数据库ORM框架用法、源码和性能比较分析
- Android_Class_Activity
- android Animation 动画