Animator --- 属性动画
来源:互联网 发布:sql 多列分组求和汇总 编辑:程序博客网 时间:2024/05/29 12:15
针对对象的某个属性做不断的改变 ( 刷新 ) 产生的效果,就是属性动画
1、要操作的属性必须有 get 和 set 方法,如果没有那么需要去添加2、可以使用一个类来封装原始的对象,间接的提供 get 个 set 方法来改变它属性class ViewHolder{ //原始的视图对象 View view; private LinearLayout.LayoutParams lp; public ViewHolder(View view){ this.view = view; lp = (LinearLayout.LayoutParams) view.getLayoutParams(); } public void setWidth(int width){ lp.width= width; view.requestLayout(); } public int getWidth(){ return lp.width; } public void setHeight(int height){ lp.height= height; view.requestLayout(); } public int getHeight(){ return lp.height; } }// 使用属性动画ViewHolder holder = new ViewHolder(view);// 对宽属性产生 int 类型的值,改变宽度//( 对象 , 属性名称 , 变化的数值 可以多个 )ObjectAnimator.ofInt(holder,"width",view.getMeasuredWidth(),500) .setDuration(2000).start();
使用动画速率
ViewHolder holder = new ViewHolder(view);ObjectAnimator animator = ObjectAnimator.ofInt(holder, "width", view.getMeasuredWidth(), 500);// 设置动画速率animator.setInterpolator(new AccelerateDecelerateInterpolator());// 设置动画时间,启动动画animator.setDuration(2000).start();
动画速率中的 PathInterpolator 是 api21(android5.0) 才加上来的,低版本使用的话可以用 v4 包的 PathInterpolatorCompat 来代替
//透明度case R.id.btn_view_alpha: ObjectAnimator alphAnim = ObjectAnimator.ofFloat(view,View.ALPHA,1,0.5f); alphAnim.setDuration(2000).start(); break;//平移case R.id.btn_view_tran: //x方向 ObjectAnimator tranAnim = ObjectAnimator.ofFloat(view,View.TRANSLATION_X,100); tranAnim.setDuration(2000).start(); //y方向 ObjectAnimator.ofFloat(view,View.TRANSLATION_Y,300).setDuration(1000).start(); break;//缩放case R.id.btn_view_scale: //宽方向 ObjectAnimator.ofFloat(view,View.SCALE_X,1,1.5f).setDuration(1000).start(); //高方向 ObjectAnimator.ofFloat(view,View.SCALE_Y,1,1.5f).setDuration(2000).start(); break;//旋转case R.id.btn_view_rotate: // 沿着X轴旋转(上下翻转) ObjectAnimator.ofFloat(view,View.ROTATION_X,45).setDuration(1000).start(); // 沿着 Y 轴旋转 ( 左右翻转 ) ObjectAnimator.ofFloat(view,View.ROTATION_Y,45).setDuration(1000).start(); // 沿着 Z 轴旋转 ( 平面旋转 ) ObjectAnimator.ofFloat(view,View.ROTATION,45).setDuration(1000).start(); break;
ValueAnimator
描述的时值变化过程的类,是 ObjectAnimator 的父类,一般要结合 AnimatorUpdateListener 一起使用监听值的变化
private void startValueAnimator(final int startWidth, final int endWidth) { // 整数的因子计算对象 final IntEvaluator mEvaluator = new IntEvaluator(); // 值变化对象 ( 起始值 , 结束值 ) ValueAnimator anim = ValueAnimator.ofInt(1, 100); anim.setDuration(2000); anim.setInterpolator(new LinearInterpolator()); // 监听数值变化 anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { // 获取当前产生的数值 int currentValue = (Integer) animation.getAnimatedValue(); float fraction = currentValue / 100f; int w = mEvaluator.evaluate(fraction,startWidth,endWidth); // Log.e("m_tag", "value:" + currentValue); // 新的宽度 // int w = orginWidth + currentValue; view.getLayoutParams().width = w; view.requestLayout(); } }); anim.start();}
阅读全文
0 0
- 属性动画Animator
- 属性动画Animator学习
- android属性动画animator
- Animator属性动画
- animator属性动画
- 【Property Animator 属性动画】
- Android属性动画(Animator)
- Animator --属性动画
- 属性动画Animator
- Animator --- 属性动画
- Unity动画 Animator的属性
- Android之属性动画Animator
- Android Animator属性动画总结
- Animator 属性动画简单使用
- 属性动画Animator工具类
- Animator参考(属性动画)
- Android之Animator属性动画
- Android 动画之属性动画(Animator)
- 【C语言】常量和变量
- 分组背包思路
- MFC简单自学图形绘制2
- redis 主从备份以及bgsave的问题 ~~~急急急急急急急急急~~~~~
- A
- Animator --- 属性动画
- 深入Struts2学习(一)
- 获得绿色版JDK
- Building Shops HDU
- 关于机器视觉的备忘
- XSSFSheet对象的格式设置
- 【NOIP2017提高A组集训10.21】Dark
- 我的2018校招
- unity机器学习之unity和python环境搭建