浅谈View动画及Activity的华丽转场

概要:

  • view动画的使用(通过xml定义、Java直接使用)
  • overridePendingTransition必须位于startActivity 或者 finish的后面,否则动画效果将不起作用
  • Activity两种转场方式

View动画的使用

View动画的作用对象是View,它支持4种动画效果:

  • 平移动画 translate
  • 缩放动画 scanle
  • 旋转动画 roteate
  • 透明度动画 alpha

Animation对应的四个子类:

  • TranslateAnimation
  • ScanleAnimation
  • RoteateAnimation
  • AlphaAnimateion

一、通过xml使用View动画

1、资源文件


<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/linear_interpolator"
    android:fillAfter="true"
    android:repeatCount="1"
    android:shareInterpolator="true"
    >
    <translate
        android:duration="3000"
        android:fromXDelta="0"
        android:toXDelta="100"
        android:fromYDelta="0"
        android:toYDelta="100"
        />

    <rotate
        android:duration="3000"
        android:fromDegrees="0"
        android:toDegrees="360"
        />
set>

2、资源文件的使用
AnimationUtils.loadAnimation()加载动画资源

helloTv = (TextView) findViewById(R.id.tv_hello);
Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim_text);
helloTv.startAnimation(animation);

二、在java中使用View动画

TranslateAnimation animation = new TranslateAnimation(0, 100, 0, 100);
animation.setDuration(3000);
helloTv.startAnimation(animation);


View动画的使用场景

  • 覆盖大多数动画使用场景
  • ViewGroup中控制子元素的出场效果
  • Activity的切换效果

Activity的切换效果

方式一:通过overridePendingTransition(enterAnim, exitAnim)

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
MainActivity.this.startActivity(intent);
overridePendingTransition(R.anim.right_in_plugin, R.anim.left_out_plugin);

or
浅谈View动画及Activity的华丽转场_第1张图片
注意:overridePendingTransition必须位于startActivity 或者 finish的后面,否则动画效果将不起作用

可是很少见这种跳转方式啊,下面来说说Activity转场的另一种方式

方式二:通过 Style 来指定

    <style name="PluginTheme" parent="@android:style/Theme">
        <item name="android:windowNoTitle">trueitem>
        <item name="android:windowContentOverlay">@null
        "android:windowAnimationStyle">@style/PluginAnimationActivity
    style>

    <style name="PluginAnimationActivity" mce_bogus="0" parent="@android:style/Animation.Activity">
        <item name="android:activityOpenEnterAnimation">@anim/right_in_plugin
        "android:activityOpenExitAnimation">@anim/left_out_plugin
        "android:activityCloseEnterAnimation">@anim/left_in_plugin
        "android:activityCloseExitAnimation">@anim/right_out_plugin
    style>

重要的四个属性:

  • android:activityOpenEnterAnimation
  • android:activityOpenExitAnimation
  • android:activityCloseEnterAnimation
  • android:activityCloseExitAnimation

我们来看看其中的一个anim:

 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/decelerate_interpolator"  >     
    <translate 
        android:fromXDelta="100%" 
        android:toXDelta="0%" 
        android:fromYDelta="0%" 
        android:toYDelta="0%"
        android:duration="500" /> 
set>

100%、-100%、0%是什么gui?
下面给出一张形象的图助于理解:
浅谈View动画及Activity的华丽转场_第2张图片

View动画的缺陷

  1. 只能对View进行动画操作
  2. 只支持移动、缩放、旋转和淡入淡出操作
  3. 致命的缺陷,就是它只是改变了View的显示效果而已,而不会真正去改变View的属性(只是视觉动画效果,事件响应位置还在原处)

你可能感兴趣的:(Android动画)