• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android属性动画

Android属性动画

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了objectanimator,android属性动画旋转,android动画,android 属性动画缩放,android 属性动画平移等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android属性动画


属性动画

属性动画的核心主要是ObjectAnimator,ValueAnimator这几个对象的使用。下面对各个方法的使用进行介绍。

ObjectAnimator的使用:

一.单个动画的使用:

y轴旋转从0度旋转到360度
ObjectAnimator
    .ofFloat(imageView,"rotationY",0,360) 
    .setDuration(1000)
    .start();

这里写图片描述

x轴旋转从0度旋转到360度
ObjectAnimator
    .ofFloat(imageView,"rotationX",0,360) 
    .setDuration(1000)
    .start();

这里写图片描述

宽度从原始长度到1.5倍长度
ObjectAnimator
    .ofFloat(imageView,"scaleX",1f,1.5f) 
    .setDuration(1000)
    .start();

这里写图片描述

高度从原始长度到1.5倍长度
ObjectAnimator
    .ofFloat(imageView,"scaleY",1f,1.5f) 
    .setDuration(1000)
    .start();
沿着x轴正方向从原始位置移动到相对于原始位置100px的位置
ObjectAnimator
    .ofFloat(imageView,"translationX",0,100) 
    .setDuration(1000)
    .start();
沿着y轴正方向从原始位置移动到相对于原始位置100px的位置
ObjectAnimator
    .ofFloat(imageView,"translationY",0,100) 
    .setDuration(1000)
    .start();
透明度从不透明到完全透明
ObjectAnimator
    .ofFloat(imageView,"alpha",1,0) 
    .setDuration(1000)
    .start();
颜色改变动画,需要用到ObjectAnimator.ofArgb()方法(需要在API Level 21及以上的版本使用),如下是改变textView的背景颜色。
int startColor = 0xffff0000;
int endColor = 0xff00ff00;
ObjectAnimator
.ofArgb(textView,"backgroundColor",startColor,endColor)
.setDuration(1000)
.start();

二.混合动画的使用:

针对一个View的混合动画主要使用到了PropertyValuesHolder,如果你想把scaleX和scaleY结合起来使用,那么需要构造两个对应的PropertyValuesHolder对象,最后再调用ObjectAnimator.ofPropertyValuesHolder,如下:
PropertyValuesHolder propertyValuesHolder1 = PropertyValuesHolder.ofFloat( "scaleX", 1f, 1.5f);
PropertyValuesHolder propertyValuesHolder2 = PropertyValuesHolder.ofFloat("scaleY", 1f, 1.5f);
ObjectAnimator.ofPropertyValuesHolder(imageView,propertyValuesHolder1
,propertyValuesHolder2)
.setDuration(3000)
.start();

这里写图片描述

AnimatorSet的使用
ObjectAnimator animator1 = ObjectAnimator.ofFloat(imageView,"scaleX",1f,4f,1f);
ObjectAnimator animator2 = ObjectAnimator.ofFloat(imageView,"scaleY",1f,4f,1f);
AnimatorSet animSet = new AnimatorSet();
//animSet.play(animator1).with(animator2);//一起执行
animSet.play(animator1).after(animator2);//animator1在animator2执行完后执行
//animSet.play(animator1).before(animator2);//animator1在animator2前执行
//animSet.playTogether(animator1,animator2);////一起执行
animSet.setDuration(2000);
animSet.start();

这里写图片描述

两个属性的值随着Path进行变换(需要在API Level 21及以上的版本使用)
Path path = new Path();
//这边是一个矩形路径,前4个值是left,top,right,bottom值,最后一个参数表示动画的方向(CW代表顺时针和CCW代表逆时针)。
path.addRect(10,10,300,300,Path.Direction.CW);          ObjectAnimator.ofFloat(imageView,"translationX","translationY",path).setDuration(3000).start();

三.自定义属性动画:

使用下面的API实现自定义的属性动画
ofFloat(T target, Property property, float... values)

实例:
自定义的CircleView:

public class CircleView extends View {
    private Paint paint;
    private float radius;

    public float getRadius() {
        return radius;
    }
    public void setRadius(float radius) {
        this.radius = radius;

    public CircleView(Context context) {
        super(context);
    }
    public CircleView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CircleView(Context context, AttributeSet attrs, int
       defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }


    @Override
    protected void onDraw(Canvas canvas) {
        if (paint == null) {
            paint = new Paint();
            paint.setColor(getResources().getColor(
            android.R.color.holo_red_light));
        }
        canvas.drawCircle(getWidth()/2, getHeight()/2, radius, 
            paint);
    }
}

动画执行代码:

Property property = new Property(Float.class, "radius") {
    @Override
     public Float get(CircleView object) {
         return object.getRadius();
     }

    @Override
     public void set(CircleView object, Float value) {
                      object.setRadius(value);
     }
};
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(circleView, property, 10f,100f,10f);
objectAnimator.setRepeatCount(10);
objectAnimator.addUpdateListener(new  ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
                  circleView.invalidate();
    }
});
objectAnimator.setDuration(2000);
objectAnimator.start();

xml布局:



    
    

实例效果:
这里写图片描述

ValueAnimator的使用

ValueAnimator类是我们上面说到的ObjectAnimator的父类,阅读源码,我们可以发现ObjectAnimator动画最终是通过ValueAnimation实现的。下面就来说说ValueAnimator的使用。

单个值变化 ,imageView沿着x轴从1移动到100,这边其实把ValueAnimator换成ObjectAnimator也是一样的效果,因为ObjectAnimator是ValueAnimator的子类。
ValueAnimator valueAnimator = ValueAnimator.ofFloat(1,100);
valueAnimator.setDuration(1000);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
     @Override
      public void onAnimationUpdate(ValueAnimator animation) {
          imageView.setTranslationX((Float) animation.getAnimatedValue());
     }
 });
valueAnimator.start();
多个值变化
PropertyValuesHolder property1 = PropertyValuesHolder.ofFloat("value1", 1,100);
Prop



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android属性动画
  • Android属性动画

相关文章

  • 2017-05-26Android开发学习之路--传感器之初体验
  • 2017-05-26Android应用程序(APK)的编译打包过程,androidapk
  • 2017-05-26静态库和动态库的生成和加载详解
  • 2017-05-26记一次Android系统下解决音频UnderRun问题的过程
  • 2017-05-26向量时钟算法简介
  • 2017-05-26在Android中用Kotlin的Anko运行后台任务(KAD 09),kotlinanko
  • 2017-05-26Android 自定义View高级特效,神奇的贝塞尔曲线
  • 2017-05-26ORB_SLAM2在Android上的移植过程
  • 2017-05-26android计算每个目录剩余空间丶总空间以及SD卡剩余空间,androidsd
  • 2017-05-26Android Bitmap占用内存计算公式,androidbitmap

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android开发学习—— Broadcast广播接收者,androidbroadcast
    • Android Studio使用中的异常,AndroidStudio使用
    • Android电池电量跳变,android电池电量
    • Kotlin中变量不同于Java: var 对val(KAD 02),kotlinkad
    • android实现无限轮播,android实现轮播
    • Android线程优先级设置方法技巧,android线程优先级
    • Android疑难杂症之Theme,android疑难杂症
    • android开发之路10(文件的读写),android之路
    • 类似微信朋友圈,点击+号图片,可以加图片,信朋友圈
    • Android中使用ExpandableListView实现微信通讯录界面(完善仿微信APP),expandablelistview

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有