android view动画类型
2016-03-02 23:03
465 查看
android中的view共有以下形式实现动画:
1. 通过view自带的方法scrollBy()和scrollTo()实现滑动;
2. 通过动画给view施加平移效果以实现滑动;
3. 通过改变view的layoutparams,从而改变view的布局实现滑动。
首先,针对第一种,我们看下scrollBy()和scrollTo()的源码:
由此可见,scrollTo()实现了view基于当前位置的绝对滑动,scrollBy()实现了view基于当前位置的相对滑动;而且,使用scrollTo()和scrollBy(),只能将view的内容进行滑动,但不能将view本身进行移动。
适用场景:
只是想让view产生滑动效果,并不会对view注册点击事件。
其次,我们来看下使用动画实现view的平移效果:
在anim文件夹下创建文件move.xml
然后在java文件中调用
上述表示将一个view在100ms内从位置(0,0)平移到位置(100,100).而android 3.0则使用了更简单的属性动画
鉴于现在很多app都要兼容到2.2版本,可以使用nineOldAndroid动画兼容包实现属性动画.
使用场景:
操作简单,使用于没有交互的view,和实现复杂的动画效果。
最后,我们来看下改变view的layoutparams来实现view的滑动:
使用场景:
操作稍显复杂,不仅改变了view的内容,也改变了view本身,适用于有交互的view。
不管android能实现多么炫丽的动画效果,都是基于这三种来的,熟悉android的动画原理,能让我们更加了解android的动画!
1. 通过view自带的方法scrollBy()和scrollTo()实现滑动;
2. 通过动画给view施加平移效果以实现滑动;
3. 通过改变view的layoutparams,从而改变view的布局实现滑动。
首先,针对第一种,我们看下scrollBy()和scrollTo()的源码:
public void scrollTo(int x,int y){ if(mScrollX != x || mScrollY != y ){ int oldX = mScrollX; int oldY = mScrollY; mScrollX = x; mScrollY = y; invalidateParentCaches(); onScrollChanged(mScrollX,mScrollY,oldX,oldY); if(!awakenScrollBars){ postInvalidateOnAnimation(); } } } public void scrollBy(int x, int y){ scrollTo(mScrollX+x,mScrollY+y); }
由此可见,scrollTo()实现了view基于当前位置的绝对滑动,scrollBy()实现了view基于当前位置的相对滑动;而且,使用scrollTo()和scrollBy(),只能将view的内容进行滑动,但不能将view本身进行移动。
适用场景:
只是想让view产生滑动效果,并不会对view注册点击事件。
其次,我们来看下使用动画实现view的平移效果:
在anim文件夹下创建文件move.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="android="http://schemas.android.com/apk/res/android" android:fillAfter="true" android:adjustment="normal"> <translate android:duration="100" android:fromXDelta="0" android:fromYDelta="0" android:interpolator="@android:anim/linear_interpolator" android:toXDelta="100" android:toYDelta="100"/>
然后在java文件中调用
Animation animation = AnimationUtils.loadAnimation(context, R.anim.move); targetView.startAnimation(animation);
上述表示将一个view在100ms内从位置(0,0)平移到位置(100,100).而android 3.0则使用了更简单的属性动画
ObjectAnimation.ofFloat(tartgetView,"translateX",0,100).setDuretion(100).start();
鉴于现在很多app都要兼容到2.2版本,可以使用nineOldAndroid动画兼容包实现属性动画.
使用场景:
操作简单,使用于没有交互的view,和实现复杂的动画效果。
最后,我们来看下改变view的layoutparams来实现view的滑动:
MarginLayoutParams layoutParams = (MarginLayoutParams)targetView.getLayoutParams(); layoutParams.width += 100; layoutParmas.height += 100; targetView.requestLayout(); //等同于 targetView.setLayoutParams(layoutParams);
使用场景:
操作稍显复杂,不仅改变了view的内容,也改变了view本身,适用于有交互的view。
不管android能实现多么炫丽的动画效果,都是基于这三种来的,熟悉android的动画原理,能让我们更加了解android的动画!
相关文章推荐
- 一个帖子学会Android开发四大组件
- Android SwipeRefreshLayout 、RecyclerView冲突下拉冲突的解决方案
- android开发中监听器的三种实现方法(OnClickListener)
- Android布局中的layout_weight和weightSum属性的详解及使用
- Android Studio 出现 cannot resolve symbol R 解决方案
- Android学习之dip、dp、sp、pt和px
- Android开发之Intent跳转到系统应用中的拨号界面、联系人界面、短信界面
- Android围住神经猫的实现
- Android 中的 Searchable 使用,及删除记录
- Android学习之GridLayout与GridView
- 【Android】AndroidStudio开发遇到的大坑以及填坑方法收集
- 转行自学android,Day10-顺畅
- 设计具有背景图的按钮(ImageButton的焦点及事件处理)
- 解读Google官方SwipeRefreshLayout控件源码,带你揭秘Android下拉刷新的实现原理
- 一个特别适合新手练习的Android小项目——每日一妹纸
- Android自动埋点的一种实现
- android 学习adb的使用
- android多击事件
- Android Camera TakePicture過程分析
- Android主线程、子线程通信(Thread+handler)