Android View 动画

View 动画框架

使用 View 动画框架可以在 View 上执行补间动画。
补间动画是指,只要指定动画的开始与结束的“关键帧”,而动画变化的“中间帧”由系统计算并补齐。
动画并没有改变 View 的实际位置,仅是改变了 View 的显示位置。

FILE LOCATION:
    res/anim/filename.xml
    The filename will be used as the resource ID.
COMPILED RESOURCE DATATYPE:
    Resource pointer to an Animation.
RESOURCE REFERENCE:
    In Java: R.anim.filename
    In XML: @[package:]anim/filename
	
文件位置:
	res /anim/ filename.xml
	文件名将用作资源ID。
编制资源数据类型:
	指向动画的资源指针。
资源引用:
	在Java: R.anim.filename
	在XML: @包:anim/文件名
	
// XML使用	
// res /anim/ anim_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
    android:animation="@anim/anim_file"
    android:animationOrder="normal"
    android:delay="0.5">

    <!--android:delay="0.5" 子View动画显示的延迟时间比例-->
    <!--比如动画执行时间是300ms,延迟比例是0.5,那么延迟时间就是150ms-->

    <!--android:animationOrder="normal" 表示动画执行的顺序类型,共有三种-->
    <!--normal表示子View按顺序显示,reverse表示子View按逆序显示,random表示子View随机先后显示。-->

</layoutAnimation>

// res /layout/ activity_main.xml
<ListView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layoutAnimation="@anim/anim_layout"
    android:divider="#f1f1f1"
    android:dividerHeight="1dp">

</ListView>

语法:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@[package:]anim/interpolator_resource"
    android:shareInterpolator=["true" | "false"] >
	
    <!--<set>标签表示补间动画的集合,对应于AnimationSet类。-->
	
    <!--android:interpolator-->
    <!--Interpolator resource. 设置动画集合所采用的插值器,默认值为@android:anim/accelerate_decelerate_interpolator-->

    <!--android:shareInterpolator-->
    <!--Boolean. 表示集合中的动画是否共享集合的插值器。当值为true且集合没有设置插值器,-->
    <!--此时集合中的动画就会使用默认的插值器@android:anim/accelerate_decelerate_interpolator,-->
    <!--但也可以为集合中的动画单独指定所需的插值器。-->
	
    <--透明度动画-->
    <alpha
        android:fromAlpha="float"      // 透明度初始值。其中,0.0是完全透明,1.0是完全不透明。
        android:toAlpha="float"        // 透明度结束值。其中,0.0是完全透明,1.0是完全不透明。
	/>
    
    <--缩放动画-->	
    <scale
        android:fromXScale="float"     // 水平方向缩放比例的初始值,其中1.0是没有任何变化。
        android:toXScale="float"       // 水平方向缩放比例的结束值,其中1.0是没有任何变化。
        android:fromYScale="float"     // 竖直方向缩放比例的初始值,其中1.0是没有任何变化。
        android:toYScale="float"       // 竖直方向缩放比例的结束值,其中1.0是没有任何变化。
        android:pivotX="float"         // 缩放中心点的x坐标
        android:pivotY="float"         // 缩放中心点的y坐标
	/>
		
    <--平移动画-->
    <translate
        android:fromXDelta="float or percentage"  
	// 移动起始点的x坐标,表现形式有三种;
        // 1.相对于自己的左边界的距离,单位像素值。(例如 "5")
        // 2.相对于自己的左边界的距离与自身宽度的百分比。(例如  "5%")
        // 3.相对于父View的左边界的距离与父View宽度的百分比。(例如 "5%p")
        android:toXDelta="float or percentage"    
	// 移动结束点的x坐标,表现形式同上;
        android:fromYDelta="float or percentage"  
	// 移动起始点的y坐标,表现形式有三种;
	// 1.相对于自己的上边界的距离,单位像素值。(例如 "5")
        // 2.相对于自己的上边界的距离与自身高度的百分比。(例如  "5%")
        // 3.相对于父View的上边界的距离与父View高度的百分比。(例如 "5%p")
        android:toYDelta="float or percentage"   
	// 移动结束点的y坐标,表现形式同上; 
	/>
		
    <--旋转动画-->
    <rotate
        android:fromDegrees="float"  // 旋转初始的角度
        android:toDegrees="float"    // 旋转结束的角度
        android:pivotX="float or percentage"     
	// 旋转中心点x坐标,表示形式有三种:
        // 1.相对于自己的左边界的距离,单位像素值。(例如 "5")
        // 2.相对于自己的左边界的距离与自身宽度的百分比。(例如 "5%")
        // 3.相对于父View的左边界的距离与父View宽度的百分比。(例如 "5%p")
        android:pivotY="float or percentage" 
	// 旋转中心点y坐标,表示形式有三种:
        // 1.相对于自己的上边界的距离,单位像素值。(例如 "5")
        // 2.相对于自己的上边界的距离与自身宽度的百分比。(例如 "5%")
        // 3.相对于父View的上边界的距离与父View高度的百分比。(例如 "5%p")
	/>
		
    <set>
        ...
    </set>
	
</set>

四种动画示例

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
   

    private Animation animation;

    private TextView tvAlpha,tvScale,tvTranslate,tvRotate;
    private ImageView iv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
    }
    private void initData() {
   
        // animation = AnimationUtils.loadAnimation(this,R.anim.anim_alpha);
        // 因为有动画链的原因,假定有一个移动的动画紧跟一个淡出的动画,
        // 如果不把移动的动画的setFillAfter置为true,那么移动动画结束后,View会回到原来的位置淡出,
        // 就像重置了一样,动画执行完,回到初始样式。
        // 如果setFillAfter置为true, 就会在移动动画结束的位置淡出
        // 也就是动画执行完,会保持动画执行后的样式。
        // animation.setFillAfter(true);
        // iv.startAnimation(animation);

    }

    private void initView() {
   
        iv=findViewById(R.id.iv_main_anim);
        tvAlpha=findViewById(R.id.tv_main_alpha);
        tvScale=findViewById(R.id.tv_main_scale);
        tvTranslate=findViewById(R.id.tv_main_translate);
        tvRotate=findViewById(R.id.tv_main_rotate);

        tvAlpha.setOnClickListener(this);
        tvScale.setOnClickListener(this);
        tvTranslate.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值