现在是下午,我还在上班,工作都完成了,正在测试,突然感到很迷惘,工作一年了,仍然还是老样子,想到这些不由得倒吸一口冷汗。所以抓紧时间来看看我的博客,更新一下内容,有时候不逼自己一把,永远都不知道自己的极限是什么。
今天就来说说很基础很基础的知识:动画。动画主要分为四种。
1.缩放动画(ScaleAnimation);
2.平移动画(TranslateAnimation);
3.旋转动画(RotateAnimation);
4.透明度(AlphaAnimation);
其实还有一个,叫动画集合,现在这里先放一放。
接下来,我先讲讲在java代码里面怎么去实现动画的效果。
首先看到缩放动画:
private void suoFang(ImageView iv) {
ScaleAnimation animation;
animation = new ScaleAnimation(0,2,0,2,Animation.RELATIVE_TO_SELF,
0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
animation.setDuration(500);
animation.setFillAfter(true);
iv.startAnimation(animation);
}
看到代码里面,首先这是一个私有的方法,传了一个ImageView对象,所以很明显,这个是实现图片的缩放效果的。重点来看ScaleAnimation的三个构造方法:
1.ScaleAnimation(fromX, toX, fromY, toY);
2.ScaleAnimation(fromX, toX, fromY, toY, pivotX, pivotY);
3.ScaleAnimation(fromX, toX, fromY, toY, pivotXType, pivotXValue, pivotYType, pivotYValue)
第一个其实很明显,分别是从水平缩放和垂直缩放的角度,默认的原点是当前ImageView控件的左上角。
第二个比一个多了两个参数,这两个参数就是可以让我们定义原点的。
第三个好像更丰富了,从单词上也不难理解。前四个都类似,重点看看后面的四个,首先是 pivotXType,这个是指原点相对x的类型,常用的是Animation.RELATIVE_TO_SELF,pivotXValue是指原点的值,一般的,0.5就是指原点了,后面的两个参数依次类推。
所以,一个缩放动画就搞定了。
接下来,再来看看平移动画:
private void pingYiAmin(ImageView iv) {
TranslateAnimation animation;
animation = new TranslateAnimation(0, 180, Animation.RELATIVE_TO_SELF,
Animation.RELATIVE_TO_SELF);
animation.setDuration(500);
animation.setFillAfter(true);
iv.startAnimation(animation);
}
同样的,我们来看看它的构造方法。
1.TranslateAnimation(fromXDelta, toXDelta, fromYDelta, toYDelta);
2.TranslateAnimation(fromXType, fromXValue, toXType, toXValue, fromYType, fromYValue, toYType, toYValue);
我们来一一分析一下这个参数的具体意义:
float fromXDelta:这个参数表示动画开始的点离当前View X坐标上的差值;
float toXDelta, 这个参数表示动画结束的点离当前View X坐标上的差值;
float toXDelta, 这个参数表示动画结束的点离当前View X坐标上的差值;
float toYDelta)这个参数表示动画开始的点离当前View Y坐标上的差值;
如果view在A(x,y)点 那么动画就是从B点(x+fromXDelta, y+fromYDelta)点移动到C 点(x+toXDelta,y+toYDelta)点.
第二个构造方法
fromXType:第一个参数是x轴方向的值的参照(Animation.ABSOLUTE,Animation.RELATIVE_TO_SELF,or Animation.RELATIVE_TO_PARENT);
fromXValue:第二个参数是第一个参数类型的起始值;
toXType,toXValue:第三个参数与第四个参数是x轴方向的终点参照与对应值;
后面四个参数就不用解释了。如果全部选择Animation.ABSOLUTE,其实就是第二个构造函数。
以x轴为例介绍参照与对应值的关系:
如果选择参照为Animation.ABSOLUTE,那么对应的值应该是具体的坐标值,比如100到300,指绝对的屏幕像素单位
如果选择参照为Animation.RELATIVE_TO_SELF或者 Animation.RELATIVE_TO_PARENT指的是相对于自身或父控件,对应值应该理解为相对于自身或者父控件的几倍或百分之多少。多试参数就明白了。
我们再来看看旋转动画:
private void xuanZhuanAmin(ImageView iv) {
RotateAnimation animation;
animation = new RotateAnimation(0, 180, Animation.RELATIVE_TO_SELF,
0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
animation.setDuration(500);
animation.setFillAfter(true);
iv.startAnimation(animation);
}
首先来分析一下它的构造方法:
1.RotateAnimation(fromDegrees, toDegrees);
2.RotateAnimation(fromDegrees, toDegrees, pivotX, pivotY);
3.RotateAnimation(fromDegrees, toDegrees, pivotXType, pivotXValue, pivotYType, pivotYValue)。
这里面:
fromDegrees是指从什么角度开始,toDegrees是指在什么角度结束。第一个参数的原点是控件的左上角。
剩下的上面的缩放动画已经涉及过,就不在赘诉了。
最后看看透明度动画:
private void danRuDanChu(ImageView iv) {
AlphaAnimation animation;
animation = new AlphaAnimation(0, 1);
animation.setDuration(500);
animation.setFillAfter(true);
iv.startAnimation(animation);
}
这一个比较简单,只有一个重要的构造方法。
AlphaAnimation(fromAlpha, toAlpha);
这里也很明显,就是从什么状态到什么状态,最小的是-1最大的是1
好了,截止目前,这里java代码实现控件动画的效果就到此结束了,下一次我们聊聊在xml里面怎么设置动画,并且在java代码里怎么引用这些动画。