Android遍历API (1) 动画篇——克隆动画AnimationCloningITeye - 亚美娱乐

Android遍历API (1) 动画篇——克隆动画AnimationCloningITeye

2019年02月27日14时20分59秒 | 作者: 新之 | 标签: 动画,设置,参数 | 浏览: 573

从我学Android开端,一向就想做一件事。就是好好把APIDemo看一遍。今日开端会抽时间把Android官方的APIDemo程序悉数过一遍。首要是为了两个意图:榜首,温习曾经学习的API用法。第二,把握Android全体能够运用的API。便利今后做某些功用,知道有哪些API能够直接运用。

这个系列先从动画开端,由于动画是最常用的,并且我对Android的动画也不是很了解,仅仅会用一些简略动画。因而计划从动画API开端看。个人觉得APIDemo这个程序是一个很好的教材,很合适初学和当材料查询。

 

(PS:新建的Q_Q_群,有爱好能够参加一同评论:Android群:322599434)

 

1、文件途径

\ApiDemo\src\com\example\android\apis\animation\AnimationCloning.java

 

2、LinearLayout动态添加View

今日的动画类里边有一个知识点,就是动态给LinearLayout添加一个View,这个在平常开发的进程中是很有用的技巧,特别是在需求自定义View的界面。


//Edited by mythou
//http://www.cnblogs.com/mythou/
//查找XML里边的LinearLayout
LinearLayout container = (LinearLayout) findViewById(R.id.container);
//创立自定义View目标
final MyAnimationView animView = new MyAnimationView(this);
//把自定义View添加到LinearLayout
container.addView(animView);

 

2、创立球形

 
//Edited by mythou
//http://www.cnblogs.com/mythou/
 private ShapeHolder addBall(float x, float y)
 //制作一个椭圆
 OvalShape circle = new OvalShape();
 //设置椭圆高宽
 circle.resize(50f * mDensity, 50f * mDensity);
 //初始化圆形
 ShapeDrawable drawable = new ShapeDrawable(circle);
 ShapeHolder shapeHolder = new ShapeHolder(drawable);
 shapeHolder.setX(x - 25f);
 shapeHolder.setY(y - 25f);
 //发生随机色彩
 int red = (int) (100 + Math.random() * 155);
 int green = (int) (100 + Math.random() * 155);
 int blue = (int) (100 + Math.random() * 155);
 int color = 0xff000000 | red 16 | green 8 | blue;
 Paint paint = drawable.getPaint(); // new
 // Paint(Paint.ANTI_ALIAS_FLAG);
 int darkColor = 0xff000000 | red / 4 16 | green / 4 8 | blue / 4;
 //镜像突变 参数一为突变起先点坐标x方位,参数二为y轴方位,
 //参数三半径规模,参数4、5是代表中心色彩和边际色彩,最终参数为平铺方法
 //Shader.TileMode.CLAMP:运用Shader的鸿沟色彩来填充剩下的空间
 RadialGradient gradient = new RadialGradient(37.5f, 12.5f, 50f,
 color, darkColor, Shader.TileMode.CLAMP);
 paint.setShader(gradient);
 shapeHolder.setPaint(paint);
 balls.add(shapeHolder);
 return shapeHolder;
 }

上面是创立一个球形的进程,里边用到一个ApiDemo里边自己编写的办理图形的类ShapeHolder,这个今后再说。首要是看看上面怎么创立一个球形,这儿运用了OvalShape创立一个椭圆形,不过下面设置了相同的的长宽,最终出来的是一个圆形。上面随机生成一种RGB色彩,所以你每次发动这个程序,得到的球形色彩都不相同。

别的,RadialGradient是一个比较风趣的类,它完成了图形填充的作用,并且能够自定义光影填充,它的参数如下意义

参数一为突变起先点坐标x方位 参数二为y轴方位 参数三半径规模 参数4、5是代表中心色彩和边际色彩 最终参数为平铺方法Shader.TileMode.CLAMP:运用Shader的鸿沟色彩来填充剩下的空间

 你能够比照上面的作用图,作用图的右上角是色彩比较浅,并且有一个向外分散的光影作用。就是由这个类完成的作用。你能够修正代码,调试一下。了解这个类的用法。

 

3、动画作用

 
//Edited by mythou
//http://www.cnblogs.com/mythou/
 private void createAnimation()
 if (animation  null)
 //初始化特点动画
 ObjectAnimator anim1 = ObjectAnimator.ofFloat(balls.get(0),
 "y", 0f, getHeight() - balls.get(0).getHeight())
 .setDuration(500);
 ObjectAnimator anim2 = anim1.clone();
 anim2.setTarget(balls.get(1));
 //添加改写监听器
 anim1.addUpdateListener(this);
 //第三个球体动画
 ShapeHolder ball2 = balls.get(2);
 ObjectAnimator animDown = ObjectAnimator.ofFloat(ball2, "y",
 0f, getHeight() - ball2.getHeight()).setDuration(500);
 //AccelerateInterpolator:在动画开端的当地速率改动比较慢,然后开端加快
 animDown.setInterpolator(new AccelerateInterpolator());
 ObjectAnimator animUp = ObjectAnimator.ofFloat(ball2, "y",
 getHeight() - ball2.getHeight(), 0f).setDuration(500);
 //DecelerateInterpolator在动画开端的当地速率改动比较慢,然后开端减速
 animUp.setInterpolator(new DecelerateInterpolator());
 AnimatorSet s1 = new AnimatorSet();
 //接连履行两种动画
 s1.playSequentially(animDown, animUp);
 animDown.addUpdateListener(this);
 animUp.addUpdateListener(this);
 AnimatorSet s2 = (AnimatorSet) s1.clone();
 s2.setTarget(balls.get(3));
 animation = new AnimatorSet();
 //一起播映前面3个球的动画
 animation.playTogether(anim1, anim2, s1);
 //次序播映后边两个球动画
 animation.playSequentially(s1, s2);
 }

上面就是动画设置的进程。留意,这儿仅仅设置了动画的规矩,跑完这些代码,并不会有任何动画,由于动画发动是别的的接口,这儿仅仅设置了动画履行进程的特点。这儿运用了特点动画,是Android3.0今后才新添加的动画方法。这儿不详细说动画特点概念,仅仅为了会运用。

这儿首要是运用ObjectAnimator来设置动画进程,特点动画会修正目标的特点,并且这种动画也有约束。ofFloat是设置动画流程的接口,这儿是设置了沿着Y坐标从0到View的高度移动。后边几个就是设置动画流程,能够参阅上面代码注释。

playTogether和playSequentially是两种设置接连动画的接口,仅仅一个是悉数动画一起运转,别的一个是一个接着一个运转。

最终着重一点,这儿仅仅设置动画流程,下面的接口调用了,才会发动动画。

 

5、动画运转

//开端履行动画
animation.start();

 

6、动画监听接口

在动画履行进程中,咱们能够重写ValueAnimator.AnimatorUpdateListener接口,来监听运转进程,例如这儿咱们重写了ValueAnimator.AnimatorUpdateListener来改写自定义的View界面。


//Edited by mythou
//http://www.cnblogs.com/mythou/
public void onAnimationUpdate(ValueAnimator animation)
 invalidate();
}

 

 

2013-8-16

Edited by 泡泡糖

Edited by mythou

原创博文,转载请标明出处:http://www.cnblogs.com/mythou/p/3260959.html 

 

 

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表亚美娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章