安卓动画学习(较浅显)

41 篇文章 2 订阅
27 篇文章 0 订阅

安卓动画

一、逐帧动画

1.定义:把几张图片进行快速的播放就是逐帧动画

下面演示的demo是触碰图片进行动画的播放

2.添加几张图片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fffY5nI7-1623229374008)(C:\Users\23737\AppData\Roaming\Typora\typora-user-images\image-20210609154726838.png)]

3.在drawable文件下面添加一个frame.xml文件
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/one" android:duration="120"/>
    <item android:drawable="@drawable/two" android:duration="120"/>
    <item android:drawable="@drawable/three" android:duration="120"/>
    <item android:drawable="@drawable/four" android:duration="120"/>
    <item android:drawable="@drawable/five" android:duration="120"/>

</animation-list>
4.把主活动的xml修改了
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/Animation"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/frame"
    tools:context=".AnimationActivity">


</RelativeLayout>

把刚才创建的frame.xml文件当做背景导入主活动

5.在java文件下进行动画的展示
public class AnimationActivity extends AppCompatActivity {

    private boolean flag = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_animation);


        //获得动画的Drawable资源
        RelativeLayout relativeLayout = findViewById(R.id.Animation);
        AnimationDrawable anim = (AnimationDrawable) relativeLayout.getBackground();
        relativeLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (flag) {
                    //启动动画
                    anim.start();
                    flag = false;
                }else {
                    //停止动画
                    anim.stop();
                    flag = true;
                }
            }
        });
    }
}

首先呢需要设置一个标志位,标志图片是否遍历完成

接着就是找到控件,得到背景,设置点击事件,启动动画/结束动画

二、补间动画

补间动画:给动画设置初始值和结束值,设置一个变化时间,安卓系统会自动将动画补全。

分类:

  • alpha:透明度
  • rotate:旋转
  • scale:缩放
  • translate:平移
1.首先先在res文件下创一个anim文件夹
2.在anim文件下创一个xml文件,命名为alpha
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <alpha android:duration="2000"
        android:fromAlpha="0" android:toAlpha="1" />

</set>
3.在主活动的xml文件下进行修改
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".tweenAnimation">

    <ImageView
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/iv"
        android:maxWidth="300dp"
        android:maxHeight="300dp"
        android:adjustViewBounds="true"
        android:src="@drawable/ceshi"/>

  </RelativeLayout>
4.在主活动的java文件下修改代码
public class tweenAnimation extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tween_animation);

        ImageView imageView = findViewById(R.id.iv);

        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //通过加载xml动画设置文件来创建一个Animation对象
                Animation animation = AnimationUtils.loadAnimation(tweenAnimation.this, R.anim.alpha);
                //开启动画
                imageView.startAnimation(animation);
            }
        });
    }
}
通过设置不同的操作类型来实现不同的效果。

例如平移、缩放、旋转等

旋转

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <rotate android:duration="2000"
        android:fromDegrees="0"
        android:toDegrees="360"
        android:pivotX="50%"
        android:pivotY="50%"/>

</set>

平移

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="400"
        android:toYDelta="400"
        android:duration="2000"/>

</set>

缩放

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <scale android:duration = "2000"
        android:fromXScale="1"
        android:fromYScale="1"
        android:toXScale="0.5"
        android:toYScale="0.5"
        android:pivotY="50%"
        android:pivotX="50%"/>

</set>

然后在java文件下修改就好了

public class tweenAnimation extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tween_animation);

        ImageView imageView = findViewById(R.id.iv);

        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //通过加载xml动画设置文件来创建一个Animation对象
                //透明度
//                Animation animation = AnimationUtils.loadAnimation(tweenAnimation.this, R.anim.alpha);
//                imageView.startAnimation(animation);

                //缩放
//                Animation animation = AnimationUtils.loadAnimation(tweenAnimation.this, R.anim.scale);
//                imageView.startAnimation(animation);

                //平移
//                Animation animation = AnimationUtils.loadAnimation(tweenAnimation.this, R.anim.translate);
//                imageView.startAnimation(animation);

                //旋转
                Animation animation = AnimationUtils.loadAnimation(tweenAnimation.this, R.anim.rotate);
                imageView.startAnimation(animation);
            }
        });
    }
}

三、属性动画

1.ValueAnimator
//属性动画

        ValueAnimator valueAnimator = ValueAnimator.ofFloat(0f,1f);
        valueAnimator.setDuration(2000);
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                float value = (float) animation.getAnimatedValue();
            }
        });
        valueAnimator.start();
2.ObjectAnimator
TextView textView = findViewById(R.id.text_animation);
        //ObjectAnimator使得text的透明度由完全透明变成完全不透明
        ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(textView,"alpha",0f,1f);
        objectAnimator.setDuration(4000);
        objectAnimator.start();
3.监听器
//监听器
        objectAnimator.addListener(new Animator.AnimatorListener() {
            @Override
            //动画开始的时候调用
            public void onAnimationStart(Animator animation) {

            }

            @Override
            //动画结束的时候调用
            public void onAnimationEnd(Animator animation) {

            }

            @Override
            //动画被取消的时候调用
            public void onAnimationCancel(Animator animation) {

            }

            @Override
            //动画重复执行的时候调用
            public void onAnimationRepeat(Animator animation) {

            }
        });

全部代码

public class tweenAnimation extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tween_animation);

        //属性动画

        ValueAnimator valueAnimator = ValueAnimator.ofFloat(0f,1f);
        valueAnimator.setDuration(2000);
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                float value = (float) animation.getAnimatedValue();
            }
        });
        valueAnimator.start();


        TextView textView = findViewById(R.id.text_animation);
        //ObjectAnimator使得text的透明度由完全透明变成完全不透明
        ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(textView,"alpha",0f,1f);
        objectAnimator.setDuration(4000);
        objectAnimator.start();

        //监听器
        objectAnimator.addListener(new Animator.AnimatorListener() {
            @Override
            //动画开始的时候调用
            public void onAnimationStart(Animator animation) {

            }

            @Override
            //动画结束的时候调用
            public void onAnimationEnd(Animator animation) {

            }

            @Override
            //动画被取消的时候调用
            public void onAnimationCancel(Animator animation) {

            }

            @Override
            //动画重复执行的时候调用
            public void onAnimationRepeat(Animator animation) {

            }
        });
}

四、拓展:单位和尺寸

一、px和pt的区别
1.px

px: pixels(像素),不同设备的显示效果相同

2.pt

pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单实用

二、dp和sp的作用
1.dp

dp(dip): device independent pixels(设备独立像素),不同的设备会有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA推荐使用这个,不依赖像素。

2.sp

sp:scaled pixels(放大像素),主要用于字体显示best for textsize

三、LayoutParams

LayoutParams相当于是一个Layout的信息包,封装了layout的位置、宽高等信息.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值