一.三种安卓动画
成都创新互联始终致力于在企业网站建设领域发展。秉承“创新、求实、诚信、拼搏”的企业精神,致力为企业提供全面的网络宣传与技术应用整体策划方案,为企业提供包括“网站建设、成都响应式网站建设、手机网站建设、微信网站建设、微信平台小程序开发、商城网站开发、平台网站建设秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。1. Tween Animation(补间动画、视图动画):通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生的动画效果,即是一种渐变动画。
2. Frame Animation(帧动画):顺序播放事先做好的图像,是一种画面转换动画。
3. Property Animation:属性动画,通过动态地改变对象的属性从而达到动画效果,属性动画为API 11新特性。
二.属性动画的优点
1.属性动画是通过阈值器来调整的,可以高效完成简单的动画效果,从而节约内存空间。
2.对比帧动画,是通过图片的切换来实现动画效果的,可以实现复杂的动画效果但是非常耗内存。
3.属性动画多用于控件的状态变化,而帧动画用于展现复杂且连续的图片,比如短视频等。
三.属性动画实例
1.效果展示
2.关键代码
.xml布局文件,采用线性布局,四个button和一个image
MainActive代码
(1)moveView方法,修改view的位置,后续可调用该方法设置起始坐标及宽高
private void moveView(View view, int rawX, int rawY) { int left = rawX - view.getWidth() / 2; int top = rawY - view.getHeight(); int weight = left + view.getWidth(); int height = top + view.getHeight(); view.layout(left, top, weight, height); }
(2)动画的实现
按钮1,直线移动代码实现
@Override public void onClick(View view) { //获取总布局的宽和高 int width = ly_root.getWidth(); int height = ly_root.getHeight(); ValueAnimator va = ValueAnimator.ofInt(height, 0, height / 4, height / 2, height / 4 * 3, height); va.setDuration(3000l); va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { int x = width / 2; int y = (int) va.getAnimatedValue(); moveView(img_babi, x, y); } }); va.setInterpolator(new LinearInterpolator()); va.start(); }
按钮二,缩放
@Override public void onClick(View view) { final float scale = 0.5f; AnimatorSet scaleSet = new AnimatorSet(); ValueAnimator vaSmall = ValueAnimator.ofFloat(1.0f, scale); vaSmall.setDuration(500); ValueAnimator vaLarge = ValueAnimator.ofFloat(scale, 1.0f); vaLarge.setDuration(500); vaSmall.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { float scale = (float) valueAnimator.getAnimatedValue(); img_babi.setScaleX(scale); img_babi.setScaleY(scale); } }); vaLarge.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { float scale = (float) valueAnimator.getAnimatedValue(); img_babi.setScaleX(scale); img_babi.setScaleY(scale); } }); scaleSet.play(vaLarge).after(vaSmall); scaleSet.start(); }
按钮三,旋转
@Override public void onClick(View view) { int width = ly_root.getWidth(); int height = ly_root.getHeight(); final int R = width / 4; ValueAnimator va = ValueAnimator.ofFloat(0, (float) (2.0f * Math.PI)); va.setDuration(1000); va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { float t = (float) valueAnimator.getAnimatedValue(); int x = (int) (R * Math.sin(t) + width / 2); int y = (int) (R * Math.cos(t) + height / 2); moveView(img_babi, x, y); } }); va.setInterpolator(new DecelerateInterpolator()); va.start(); }
按钮四,圆形旋转
@Override public void onClick(View view) { ValueAnimator va = ValueAnimator.ofInt(0, 360); va.setDuration(1000l); va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { int rotate = (Integer) valueAnimator.getAnimatedValue(); img_babi.setRotation(rotate); float fractionValue = valueAnimator.getAnimatedFraction(); img_babi.setAlpha(fractionValue); } }); va.setInterpolator(new DecelerateInterpolator()); va.start(); }
3.代码功能总结
ofFloat,ofInt方法用来创建ValueAnimator实例
set...方法可以用来设置动画持续时间等
start()方法可以开启动画
原文链接:
guoguoguoyaonuli
http://t.csdn.cn/vzwEj
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧