view动画
第一次写博客,就当做笔记啦,有不对的地方请大家提出来~
view动画又称之为补间动画,对于补间动画而言,我们不用想帧动画那样去定义每一帧,只要定义动画开始、结束的关键帧,并指定动画的持续时间就可以了。
view动画中四种动画共有的属性:
android:duration = “3000”//动画的持续事时间,单位是毫秒,设置了这个属性动画才有效
android:startOffset = “1000”//动画延迟的时间
android:fillBefore = “true”//动画是否停留在最初的状态,默认值 true
android:fillEnabled = “false”//动画是否停留在结束后的状态,默认为false
android:repeatMode = “restart”//动画的重复模式,restart代表正序重放,reverse表示倒序重放
android:repeatCount = “1”//动画的重复次数
1.作用的对象
视图控件view,比如textview,button等,对这些view控件的属性不起作用,比如颜色,长度等。
2.分类
根据不同的动画效果,补间动画分为4种动画:
平移动画(Translate)—– 对应TranslateAnimation类,位移变化动画
缩放动画(scale)—– 对应ScaleAnimation类,大小缩放动画
旋转动画(rotate)—– 对应RotateAnimation类,旋转动画
透明度动画(alpha)—– 对应AlphaAnimation类,透明度变化的动画
他有两种实现方法,下面来具体说明
3.使用方法
使用java代码的方式设置/在xml中设置
(1)平移动画
方法一:在xml中设置
第一步:在res/anim的文件夹里创建动画效果.xml文件
第二步:在translate_animation.xml中定义动画效果
<?xml version="1.0" encoding="utf-8"?>
<translate xmls:android="http://schemas.android.com/apk/res/android"
android:duration="2000"//动画的持续时间为两秒,这个设置了动画才有效 android:startOffset="1000"//动画的延迟时间
android: repeatCount="2"//动画重复播放两次
//平移动画特有属性
android:fromXDelta="0"//沿X轴水平方向的平移的初始值
android:toXDelta="500"//沿X轴水平方向平移结束时的位置
android:fromYDelta="0"//沿Y轴方向平移的初始值
android:toYDelta="500"//沿Y轴方向平移的结束位置>
第三步:在使用在xml中定义的动画
public class TranslateAnimationActivity extends AppCompatActivity implements View.OnClickListener {
private Button start_translate_btn;
private ImageView translate_imageview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
start_translate_btn = findViewById(R.id.start_translate_btn);
translate_imageview = findViewById(R.id.translate_imageview);
start_translate_btn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
//创建animation对象,传入在xml中定义的对象
Animation translateAnimation = AnimationUtils.loadAnimation(this, R.anim.translate_animation);
translate_imageview.startAnimation(translateAnimation);//开始动画
}
}
方法二:用Java代码实现
public class TranslateAnimationActivity extends AppCompatActivity {
private View mTargetView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_anim);
init();
}
private void init() {
mTargetView = findViewById(R.id.view_target);
}
//平移动画
public void clickToTranslate(View view) {
javaTranslateAnim();
}
private void javaTranslateAnim() {
TranslateAnimation translateAnimation = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0,//相对于自身位置,从0开始
Animation.RELATIVE_TO_SELF, 1,//相对于自身位置,平移到1结束
Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF, 1);
translateAnimation.setDuration(2000);
mTargetView.startAnimation(translateAnimation);
}
}
}
TranslateAnimation的参数说明:
TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
Delta,表示的是差值,即后一个和前一个的差值。XDelta即表示在X方向上的差值,YDelta表示在Y方向的差值。若XDelta>0,则说明控件向右侧发生移动,否则向左侧移动,Y轴方向同理。
(2)旋转动画
方法一:在xml中设置
rotate_anim.xml
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fromDegrees="0" //旋转开始的角度
android:toDegrees="270"//结束的角度
android:pivotX="50%"// 旋转轴点的x坐标,即在view控件在x轴上的50%处开始旋转
android:pivotY="0"
/>
在Java文件中的使用方式同上。
方法二:用Java代码实现
public class ViewAnimActivity extends AppCompatActivity {
private View mTargetView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_anim);
init();
}
private void init() {
mTargetView = findViewById(R.id.view_target);
}
//旋转动画
public void clickToRotate(View view) {
javaRotateAnim();
}
private void javaRotateAnim() {
RotateAnimation rotateAnimation = new RotateAnimation(0, 360,
Animation.RELATIVE_TO_SELF, 0.5f,//相对于自身中心旋转,
Animation.RELATIVE_TO_SELF, 0.5f);//相对于自身中心旋转
rotateAnimation.setDuration(2000);
mTargetView.startAnimation(rotateAnimation);
}
}
(3)缩放动画
方法一:用xml方式实现
view_animation.xml
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fromXScale="0.0"// 动画在水平方向X的起始缩放倍数
android:toXScale="2" //动画在水平方向X的结束缩放倍数
android:fromYScale="0.0" //动画开始前在竖直方向Y的起始缩放倍数
android:toYScale="2" //动画在竖直方向Y的结束缩放倍数
android:pivotX="50%" // 缩放轴点的x坐标
android:pivotY="50%" // 缩放轴点的y坐标
/>
在Java文件中的使用方式同上
方法二:用Java代码实现
public class ViewAnimActivity extends AppCompatActivity {
private View mTargetView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_anim);
init();
}
private void init() {
mTargetView = findViewById(R.id.view_target);
}
//缩放动画
public void clickToScale(View view) {
javaScaleAnim();
}
private void javaScaleAnim() {
ScaleAnimation scaleAnimation = new ScaleAnimation(
1, 0.5f,
1, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
scaleAnimation.setDuration(2000);
mTargetView.startAnimation(scaleAnimation);
}
}
ScaleAnimation的参数说明:
android:fromXScale:动画开始前在X坐标的大小。
android:toXScale:动画结束后在X坐标的大小。
android:fromYScale:动画开始前在Y坐标的大小。
android:toYScale:动画结束后在Y坐标的大小。
android:pivotX:缩放中心点的X坐标。
android:pivotY:缩放中心点的Y坐标。
(4)渐变动画
方法一:用xml方式实现
下面是 view_anim_alpha.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:fromAlpha="1.0" //取值范围 -1~1
android:toAlpha="0">//取值范围 -1~1
<!--透明度从0到一-->
</alpha>
方法二:用Java代码实现
Button mButton = (Button) findViewById(R.id.Button);
// 参数说明:
// 1. fromAlpha:动画开始时视图的透明度(取值范围: -1 ~ 1)
// 2. toAlpha:动画结束时视图的透明度(取值范围: -1 ~ 1)
Animation alphaAnimation = new AlphaAnimation(1,0);
alphaAnimation.setDuration(3000);
mButton.startAnimation(alphaAnimation);