浅谈Android动画(一) view动画

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" //取值范围 -11
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);
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值