魔乐科技安卓开发教程----李兴华----10动画

1.渐变动画TweenAnimation

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.创建透明度变化

1、主布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imgshow"
        android:src="@drawable/logo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

2、activity文件

public class MainActivity extends AppCompatActivity {
    private ImageView imgshow=null;

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

        imgshow=findViewById(R.id.imgshow);
        imgshow.setOnClickListener(new OnclickListenerImpl());
    }

    private class OnclickListenerImpl implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            AnimationSet set=new AnimationSet(true);
            AlphaAnimation alphaAnimation=new AlphaAnimation(1,0);//从完全显示到完全透明
            alphaAnimation.setDuration(2000);//2秒内完成
            set.addAnimation(alphaAnimation);
           MainActivity.this.imgshow.startAnimation(set);

        }
    }
}

结果:完成透明过度

3.创建缩放变化

以上例为基础,修改onClick事件代码

AnimationSet set=new AnimationSet(true);
            ScaleAnimation scaleAnimation=new ScaleAnimation(1,0.0f,1,0.0f,
                    AnimationSet.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
            scaleAnimation.setDuration(2000);//2秒内完成
            set.addAnimation(scaleAnimation);
            MainActivity.this.imgshow.startAnimation(set);

结果:
完成缩放

4.平移的变化

以上例为基础,修改onClick事件代码


```java
private class OnclickListenerImpl implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            AnimationSet set=new AnimationSet(true);
            TranslateAnimation translateAnimation=new TranslateAnimation(Animation.RELATIVE_TO_SELF,0.0f,
                    Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.0f,Animation.RELATIVE_TO_SELF,1.5f);
            translateAnimation.setDuration(2000);//2秒内完成
            set.addAnimation(translateAnimation);
            imgshow.startAnimation(set);
        }
    }

结果:
完成移动

4.旋转的变化
private class OnclickListenerImpl implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            AnimationSet set=new AnimationSet(true);
            RotateAnimation translateAnimation=new RotateAnimation(0,360,
                    Animation.RELATIVE_TO_SELF,0.5f,
                    Animation.RELATIVE_TO_SELF,0.0f);
            translateAnimation.setDuration(2000);//2秒内完成
            set.addAnimation(translateAnimation);
            imgshow.startAnimation(set);
        }
    }

结果:
完成旋转

5.旋转加缩放的变化
 private class OnclickListenerImpl implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            AnimationSet set=new AnimationSet(true);
            RotateAnimation translateAnimation=new RotateAnimation(0,360,
                    Animation.RELATIVE_TO_SELF,0.5f,
                    Animation.RELATIVE_TO_SELF,0.0f);
            ScaleAnimation scaleAnimation=new ScaleAnimation(1,0.0f,1,0.0f,
                    AnimationSet.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
            set.setDuration(2000);//2秒内完成
            set.addAnimation(translateAnimation);
            set.setRepeatCount(3);//重复三次
            set.addAnimation(scaleAnimation);
            imgshow.startAnimation(set);
        }
    }

结果:
完成旋转和缩放的叠加,但重复未实现

6.interpolator定义动画速率

其实就是加减速的问题,只需要在设置动画集合的时候设置即可
在这里插入图片描述

7.interpolator设置加速度
private class OnclickListenerImpl implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            AnimationSet set=new AnimationSet(true);
            RotateAnimation translateAnimation=new RotateAnimation(0,360,
                    Animation.RELATIVE_TO_SELF,0.5f,
                    Animation.RELATIVE_TO_SELF,0.0f);
            ScaleAnimation scaleAnimation=new ScaleAnimation(1,0.0f,1,0.0f,
                    AnimationSet.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
            set.setRepeatCount(3);//重复三次
            set.setDuration(5000);//5秒内完成
            set.addAnimation(translateAnimation);//增加动画
            set.addAnimation(scaleAnimation);
            set.setInterpolator(new AccelerateInterpolator());//设置动画速率为加速度

            imgshow.startAnimation(set);
        }
    }

结果:
完成旋转和缩放的加速度先慢后快

8.动画监听器:AnimationListener

在这里插入图片描述
1、布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/group"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imgshow"
        android:src="@drawable/logo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

2、activity文件

public class MainActivity extends AppCompatActivity {
    private ImageView imgshow=null;
    private ViewGroup group=null;

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

        imgshow=findViewById(R.id.imgshow);
        group=findViewById(R.id.group);

        AnimationSet set=new AnimationSet(true);
        RotateAnimation translateAnimation=new RotateAnimation(0,360,
                Animation.RELATIVE_TO_SELF,0.5f,
                Animation.RELATIVE_TO_SELF,0.0f);
        set.setDuration(3000);//3秒内完成
        set.addAnimation(translateAnimation);//增加动画
        set.setAnimationListener(new AnimationListenrImpl());//这个是在set动画对象上调用的而不是在图像统建上调用
        imgshow.startAnimation(set);

    }

    private class AnimationListenrImpl implements Animation.AnimationListener {//实现的事动画监听接口
        @Override
        public void onAnimationStart(Animation animation) {
            if (animation instanceof AnimationSet){
                AnimationSet set= (AnimationSet) animation;
                AlphaAnimation alphaAnimation=new AlphaAnimation(1,0);
                alphaAnimation.setDuration(3000);
                set.addAnimation(alphaAnimation);
            }
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            group.removeView(imgshow);
        }

        @Override
        public void onAnimationRepeat(Animation animation) {

        }
    }
}

结果是:实现动画,并在动画结束后移除动画

9.通过XML设置动画(必然是首选)

在这里插入图片描述
在这里插入图片描述

10.通过XML设置alpha动画

1、在xml中配置动画各种属性
创建alpha.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.0"
        android:duration="3000"/>
</set>

2、创建布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/group"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imgshow"
        android:src="@drawable/logo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

3、使用AnimationUtil类读取动画配置

public class MainActivity extends AppCompatActivity {
    private ImageView imgshow=null;

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

        imgshow=findViewById(R.id.imgshow);
        imgshow.setOnClickListener(new OnclickListenerImpl());
    }

    private class OnclickListenerImpl implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            Animation animation= AnimationUtils.loadAnimation(MainActivity.this,R.anim.alpha);
            imgshow.startAnimation(animation);

        }
    }
}

结果:实现动画效果

11.通过XML设置scale动画

1、创建scale.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:fromXScale="1.0"
        android:toXScale="0.0"
        android:fromYScale="1.0"
        android:toYScale="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:startOffset="100"
        android:repeatCount="3"
        android:duration="3000"/>
</set>

2、activity文件

public class MainActivity extends AppCompatActivity {
    private ImageView imgshow=null;

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

        imgshow=findViewById(R.id.imgshow);
        imgshow.setOnClickListener(new OnclickListenerImpl());
    }

    private class OnclickListenerImpl implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            Animation animation= AnimationUtils.loadAnimation(MainActivity.this,R.anim.scale);
            imgshow.startAnimation(animation);

        }
    }
}
12.通过XML设置tanslate动画

1、创建translate.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
    android:fromXDelta="0.0"
    android:toXDelta="50%"
    android:fromYDelta="0.0"
    android:toYDelta="150%"
    android:duration="3000"/>
</set>

2、activity文件

public class MainActivity extends AppCompatActivity {
    private ImageView imgshow=null;

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

        imgshow=findViewById(R.id.imgshow);
        imgshow.setOnClickListener(new OnclickListenerImpl());
    }

    private class OnclickListenerImpl implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            Animation animation= AnimationUtils.loadAnimation(MainActivity.this,R.anim.scale);
            imgshow.startAnimation(animation);

        }
    }
}

结果:
实现动画效果

13.通过XML设置rotate动画

1、创建rotate.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
    android:fromXDelta="0.0"
    android:toXDelta="50%"
    android:fromYDelta="0.0"
    android:toYDelta="150%"
    android:duration="3000"/>
</set>

2、activity文件

public class MainActivity extends AppCompatActivity {
    private ImageView imgshow=null;

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

        imgshow=findViewById(R.id.imgshow);
        imgshow.setOnClickListener(new OnclickListenerImpl());
    }

    private class OnclickListenerImpl implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            Animation animation= AnimationUtils.loadAnimation(MainActivity.this,R.anim.rotate);
            imgshow.startAnimation(animation);

        }
    }
}

结果:
实现动画效果

13.通过XML设置动画叠加(旋转加位移)

实际上就是在set节点上添加多个动画效果

1、创建all.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <rotate
        android:fromDegrees="0.0"
        android:toDegrees="360"
        android:pivotX="50%p"
        android:pivotY="0"
        android:duration="3000"/>
    <translate
        android:fromXDelta="0.0"
        android:toXDelta="50%"
        android:fromYDelta="0.0"
        android:toYDelta="150%"
        android:duration="3000"/>
</set>

2、activity文件

public class MainActivity extends AppCompatActivity {
    private ImageView imgshow=null;

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

        imgshow=findViewById(R.id.imgshow);
        imgshow.setOnClickListener(new OnclickListenerImpl());
    }

    private class OnclickListenerImpl implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            Animation animation= AnimationUtils.loadAnimation(MainActivity.this,R.anim.all);
            imgshow.startAnimation(animation);

        }
    }
}

结果:
实现动画效果

14.通过XML设置动画速率(针对全部动画)

1、创建all.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"
	android:interpolator="acclerate_interprolator"
    android:shareInterpolator="true" >
    <rotate
        android:fromDegrees="0.0"
        android:toDegrees="360"
        android:pivotX="50%p"
        android:pivotY="0"
        android:duration="3000"/>
    <translate
        android:fromXDelta="0.0"
        android:toXDelta="50%"
        android:fromYDelta="0.0"
        android:toYDelta="150%"
        android:duration="3000"/>
</set>

2、activity文件

public class MainActivity extends AppCompatActivity {
    private ImageView imgshow=null;

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

        imgshow=findViewById(R.id.imgshow);
        imgshow.setOnClickListener(new OnclickListenerImpl());
    }

    private class OnclickListenerImpl implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            Animation animation= AnimationUtils.loadAnimation(MainActivity.this,R.anim.all);
            imgshow.startAnimation(animation);

        }
    }
}

结果:
实现动画效果

15.FrameAnimation帧动画

在这里插入图片描述

1、定义动画的配置文件,放在drawable文件夹下,里面有15张图片

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true">
    <item android:drawable="@drawable/banana01" android:duration="100"/>
    <item android:drawable="@drawable/banana02" android:duration="100"/>
    <item android:drawable="@drawable/banana03" android:duration="100"/>
    <item android:drawable="@drawable/banana04" android:duration="100"/>
    <item android:drawable="@drawable/banana05" android:duration="100"/>
    <item android:drawable="@drawable/banana06" android:duration="100"/>
    <item android:drawable="@drawable/banana07" android:duration="100"/>
    <item android:drawable="@drawable/banana08" android:duration="100"/>
    <item android:drawable="@drawable/banana09" android:duration="100"/>
    <item android:drawable="@drawable/banana10" android:duration="100"/>
    <item android:drawable="@drawable/banana11" android:duration="100"/>
    <item android:drawable="@drawable/banana12" android:duration="100"/>
    <item android:drawable="@drawable/banana13" android:duration="100"/>
    <item android:drawable="@drawable/banana14" android:duration="100"/>
    <item android:drawable="@drawable/banana15" android:duration="100"/>
</animation-list>

2、定义布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/group"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/face"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <Button
        android:id="@+id/start"
        android:text="start animation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

3、activity文件

public class MainActivity extends AppCompatActivity {
    private ImageView face=null;
    private Button startAnimation=null;
    private AnimationDrawable animationDrawable = null;

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

        face=findViewById(R.id.face);
        startAnimation=findViewById(R.id.start);
        startAnimation.setOnClickListener(new OnclickListenerImpl());
    }

    private class OnclickListenerImpl implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            face.setBackgroundResource(R.drawable.allface);
            animationDrawable= (AnimationDrawable) face.getBackground();
            animationDrawable.setOneShot(false);//是否只播1次
            animationDrawable.start();
        }
    }
}

结果:
实现15张图依次播放效果

16.组件上使用动画(LayoutAnimationController组件)

在这里插入图片描述
不看了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值