帧动画:FrameAnimation
多张图片快速切换,形成动画效果
帧动画使用xml定义.
创建一个Folder在res下,然后定义一个xml文件,根节点是animation——list.
将素材复制到drawable_hdpi文件夹下作为资源id.
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true"> // oneshot(只启动一次) 为true 表示只播放一次,false为循环播放。
<item android:drawable="@drawable/g1" android:duration="200" />
<item android:drawable="@drawable/g2" android:duration="200" /> //资源文drawable图片, 持续时间。
</animation-list>
xml定义好之后,要将文件显示在ImageView中。
步骤: 定义一个ImageView组件通过findViewById找到。
2,设置imageview的背景资源 iv.setBackgroundResource(R.drawable.定义的xml文件)
3,然后在获取background强转成animationdrawable; AnimationDrawable ad = (AnimationDrawable) iv.getBackground();
4,开始帧动画的动作。 ad.start();
dmeo:
package com.zh.frameanimation;
import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView iv = (ImageView) findViewById(R.id.iv);
iv.setBackgroundResource(R.drawable.frameanimation);
AnimationDrawable ad = (AnimationDrawable) iv.getBackground();
ad.start();
}
}
II补间动画:
组件由原始状态向终极状态转变时,为了让过渡更自然,而自动生成的动画。
有平移 (translate),缩放(scale),透明(alpha),和旋转(roatate).
平移:(此动画的播放位置从初始位置(10,20)开始的)可以设置为(0,0)原点播放。
TranslateAnimation ta = new TranslateAnimation(10, 100, 20, 200);
参数的意义:
10:表示的x坐标起始位置
* iv(显示动画的对象)的真实 x + 10
100: 表示x坐标的结束位置
iv的真实位置是x+100;
20:表示y轴的起始位置;
*iv的真实位置是y+20;
200:表示y轴的结束位置:
iv的真实位置是y+200;
ta.setDuration(2000); 设置持续时间是2秒;
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
TranslateAnimation ta = new TranslateAnimation(fromXType, fromXValue, toXType, toXValue,
fromYType, fromYValue, toYType, toYValue);
fromXtype;
eg.TranslateAnimation ta = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 1, Animation.RELATIVE_TO_SELF, 5 Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 2);
Animation.RELATIVE_TO_SELF:类型是相对于自己。
Animation.RELATIVE_TO_SELF, 1 X的起始位置是;
iv的真实位置是iv的真实x+1*iv的宽。(X+一倍自己的宽度iv.getWidth)
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 2);
y轴方向;y轴的起始位置是 iv 的y轴的真实位置是:y+0.5倍的iv的高度;
结束位置是: 2倍iv的高度+y轴的位置。
(x,y可以为负数从相反的方向开始)。
设置重复的模式:相反的Reverse
ta.setRepeatMode(Animation.REVERSE);
//RELATIVE_TO_PARENT 这个是相对于父元素来说。
demo:
public void translate(View v) {
//
// TranslateAnimation ta = new TranslateAnimation(0, 100, 0, 100);
TranslateAnimation ta = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, -1, Animation.RELATIVE_TO_PARENT,
3, Animation.RELATIVE_TO_PARENT, -0.5f, Animation.RELATIVE_TO_PARENT, 2);
// 设置持续的时间。
ta.setDuration(2000);
// 设置重复的次数
ta.setRepeatCount(2);
ta.setRepeatMode(Animation.REVERSE); //相反的方向。
iv.startAnimation(ta);// 设置动画开始。animation(动画)
}
缩放:scale
//获得缩放动画对象。(默认不写缩放中心的话是左上角)
ScaleAnimation sa = new ScaleAnimation(0.5f, 2, 0.1f, 3, iv.getWidth() / 2, iv.getHeight() / 2); //缩放的开始位置和结束位置,还有缩放的
x坐标的开始位置; x轴方向: x的真实起始位置是 X+0.5倍的iv的宽度,
2:表示x坐标缩放的结束位置
* 2 * iv宽
iv.getWidth() / 2:表示缩放点的x坐标
* iv的真实x + iv.getWidth() / 2
3、设置缩放还有一个特性;
sa.setFillAfter(true); //设置缩放的填充结束(也就是设置保持缩放结束后的最后的位置)。
public void scale1(View v){
ScaleAnimation sa = new ScaleAnimation(0.5f,2,0.1f,3, iv.getWidth()/2, iv.getHeight()/2);
sa.setDuration(2000);
sa.setRepeatCount(2);
sa.setRepeatMode(Animation.REVERSE);
//设置动画充满前的位置
sa.setFillBefore(true); //默认的就是填充动画结束前的位置。
iv.startAnimation(sa);
}
缩放相对于自己的:
ScaleAnimation sa = new ScaleAnimation(0.5f, 2, 0.1f, 3,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
Animation.RELATIVE_TO_SELF, 0.5f:表示缩放点的x坐标
* iv的真实x + 0.5 * iv宽
设置透明度:alpha;
AlphaAnimation al = new AlphaAnimation(fromAlpha, toAlpha) (透明度动画)transparent :全透明的。
0:全透明; 1:完全不透明。
public void alpha(View v){
AlphaAnimation al = new AlphaAnimation(0, 1); //从透明到完全不透明。
al.setDuration(2000);
iv.startAnimation(al);
}
旋转动画:Rotate;
RotateAnimation ra = new RotateAnimation(fromDegrees, toDegrees, pivotX, pivotY) 从哪个中心点旋转的角度范围。
public void rotate(View v){
// RotateAnimation ra = new RotateAnimation(0,180);
// RotateAnimation ra = new RotateAnimation(20, 90, iv.getWidth()/2, iv.getHeight()/2);
RotateAnimation ra = new RotateAnimation(20, 180, Animation.RELATIVE_TO_SELF, 1,
Animation.RELATIVE_TO_SELF, 1); //旋转的位置从自己的右下角开始(1,1 ) 从自己的中心位置是 (0.5f , 0.5f)
ra.setDuration(2000);
ra.setRepeatCount(2);
ra.setFillAfter(true);
ra.setRepeatMode(Animation.REVERSE);
iv.startAnimation(ra);
}
可以将平移,缩放,alpha透明度,已经旋转动画一起播放。如果在AnimationSet集合中设置的播放的 shareInterpolator校对器为false意思是按动画各自own的方式播放。(播放这些动画之前选、要将这些动画单独播放一遍否则报状态异常)
public void fly(View v) {
AnimationSet as = new AnimationSet(false);
as.addAnimation(ra);
as.addAnimation(al);
as.addAnimation(sa2);
as.addAnimation(ta);
iv.startAnimation(as);
}