Android应用层(View体系)二
来源:互联网 发布:apache官网下载 编辑:程序博客网 时间:2024/05/30 23:06
1.Android属性动画
Animator框架中使用最多的就是AnimatorSet和ObjectAnimator配合,使用ObjectAnimator进行更精细化的控制,控制一个对象和一个属性值,而使用多个ObjectAnimator组合到AnimatorSet形成一个动画,
属性动画通过调用属性get,set方法来真实地控制了一个View的属性值,因此强大的属性动画框架,基本可以实现所有的动画效果
## ObjectAnimator
- 创建一个ObjectAnimator只需通过他的静态工厂类直接返还一个ObjectAnimator对象。
- 参数包括一个对象和对象的属性名字,但这个属性必须有get和set函数,内部会通过java反射机制来调用set函数修改对象的属性值。
#### Step 1 : 实现平移的属性动画
“`
ObjectAnimator mObjectAnimator=ObjectAnimator.ofFloat(view,”translationX”,200);
mObjectAnimator.setDuration(300);
mObjectAnimator.start();
- 第一个对象是要**操作的View**- 第二个参数则是要**操纵的属性**- 最后一个参数是一个**可变的数组参数**,需要传进去一个该属性变化的一个取值的过程###### 常见的属性动画的属性值- translationX和translationY:这两个属性作为增量控制View对象从他的布局容器的左上角开始位置。- rotation、rotationX、rotationY:这三个属性控制View对象围绕它的支点进行2D和3D旋转。- PrivotX和PrivotY:控制View对象的支点位置,围绕这个支点进行旋转和缩放变换处理。默认该支点位置就是View对象的中心点。- alpha:透明度,默认是1(不透明),0代表完全透明。- x和y:描述View对象在它容器中的最终位置,它是最初的做上角坐标和translationX,translationY值的累计的和。#### Step add : 也可以通过自定义一个属性类或包装类间接的增加get和set方法1. 自定义的属性类
private static class MyView{
private View mTarget;
private MyView(View mTarget){
this.mTarget=mTarget;
}
public int getWidth(){
return mTarget.getLayoutParams().width;
}
public void setWidth(int width){
mTarget.getLayoutParams().width=width;
mTarget.requestLayout();
}
}
2. 使用
MyView mMyView=new MyView(mButton);
ObjectAnimator.ofInt(mMyView,”width”,500).setDuration(500).start();
## ValueAnimator> ValueAnimator不提供任何动画效果,它更像一个数值发生器,用来产生一定规律数字,从而让调用者来控制动画的实现过程。#### Step 1 : 在ValueAnimator的AnimatorUpdateListener中监听数值的变化,从而完成动画的变换:
ValueAnimator mValueAnimator=ValueAnimator.ofFloat(0,100);
mValueAnimator.setTarget(view);
mValueAnimator.setDuration(1000).start();
mValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
Float mFloat=(Float)animation.getAnimatedValue();
}
});
}
### 动画监听完整的动画具有start,Repeat,End,Cancel四个过程:
ObjectAnimator animator=ObjectAnimator.ofFloat(view,”alpha”,1.5f);
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
}
大部分时候我们只关心onAnimationEnd事件,android也提供了AnimatorListenterAdaper来让我门选择必要的事件进行监听:
ObjectAnimator animator=ObjectAnimator.ofFloat(view,”alpha”,1.5f);
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
}
});
## 组合动画-AnimatorSet向这个方法中传入一个Animator对象(ValueAnimator或ObjectAnimator)将会返回一个AnimatorSet.Builder的实例,AnimatorSet.Builder中包括以下四个方法:- after(Animator anim) 将现有动画插入到传入的动画之后执行- after(long delay) 将现有动画延迟指定毫秒后执行- before(Animator anim) 将现有动画插入到传入的动画之前执行- with(Animator anim) 将现有动画和传入的动画同时执行
ObjectAnimator animator1 = ObjectAnimator.ofFloat(mCustomView, “translationX”, 0.0f, 200.0f, 0f);
ObjectAnimator animator2 = ObjectAnimator.ofFloat(mCustomView, “scaleX”, 1.0f, 2.0f);
ObjectAnimator animator3 = ObjectAnimator.ofFloat(mCustomView, “rotationX”, 0.0f, 90.0f, 0.0F);
AnimatorSet set=new AnimatorSet();
set.setDuration(1000);
set.play(animator1).with(animator2).after(animator3);
set.start();
## xml中使用属性动画和视图动画一样,属性动画也可以直接写在xml中:在res文件中新建animator文件,在里面新建一个scale.xml,里面的内容如下:
程序中引用xml定义的属性动画:
Animator animator=AnimatorInflater.loadAnimator(this,R.animator.scale);
animator.setTarget(view);
animator.start();
“`
- Android应用层(View体系)二
- Android应用层(View体系)一
- Android应用层(View体系)三
- Android View 体系完全解析,从应用层到framework层
- View事件体系(二)
- Android View体系(九)自定义View
- Android View体系(九)自定义View
- Android View体系(九)自定义View
- Android View体系(二)实现View滑动的六种方法
- Android View体系(二)实现View滑动的六种方法
- Android——View的事件体系(二)View的事件分发机制
- Android开发艺术探索(连载)之View的事件体系(二)View的滑动
- 读书笔记--View的事件体系(二)
- View的事件体系(二)
- Android应用层View绘制流程
- Android应用层View绘制流程
- View事件体系(二)View的滑动
- 《View的事件体系》(二)View的滑动实现
- [cs231n之第一课]Introduction
- 优化网页性能方法汇总
- bzoj2654 tree(二分+kruskal)
- 无偏估计
- 2017年Java开发岗位面试题归类
- Android应用层(View体系)二
- 协同过滤算法在JavaEE项目中应用
- 打开eclipse时出现Failed to load the JNI shared library jvm.dll
- 三步搞定Eclipse离线安装svn插件
- 第8章 空间解析几何与向量代数
- Java_面向对象02 this关键字
- Android应用层(View体系)三
- docker测试环境目录满,迁移
- [caioj 1479,利用矩阵乘法解决的经典题目一]点的变换