Android动画效果学习
16lz
2022-06-15
1、透明动画效果
方法一:代码实现
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){View rootView = inflater.inflate(R.layout.fragment_main, container, false);rootView.findViewById(R.id.btnAnimMe).setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){AlphaAnimation aa = new AlphaAnimation(0, 1);aa.setDuration(1000);v.startAnimation(aa);}});return rootView;}
方法二,用配置文件的形式
第一步,新建一个aa.xml
<?xml version="1.0" encoding="utf-8"?><alpha android:fromAlpha="0" android:toAlpha="1" android:duration="1000" xmlns:android="http://schemas.android.com/apk/res/android"> </alpha>
第二步,代码调用
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){View rootView = inflater.inflate(R.layout.fragment_main, container, false);rootView.findViewById(R.id.btnAnimMe).setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){v.startAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.aa));}});return rootView;
2、旋转动画效果
第一种实现方式:代码
private RotateAnimation ra;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ra = new RotateAnimation(0, 360, 100, 50);ra = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);ra.setDuration(1000);findViewById(R.id.btnRotateme).setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){v.startAnimation(ra);}});
第二种实现方式:配置文件
<?xml version="1.0" encoding="utf-8"?><rotate android:fromDegrees="0" android:toDegrees="360" android:duration="1000" android:pivotX="50%" android:pivotY="50%" xmlns:android="http://schemas.android.com/apk/res/android"> <!-- pivotY写数值当像素解析,写百分比,就是相对自身的百分比 --> </rotate>
代码部分:
protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.btnRotateme).setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.ra));}});}
3、移动动画效果
第一种:代码实现方式
private TranslateAnimation ta;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ta = new TranslateAnimation(0, 200, 0, 200);//是增量的概念, 相对自身当前来说,向右移动200像素,向下移动200像素ta.setDuration(1000);findViewById(R.id.btnTranslateMe).setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){v.startAnimation(ta);}});}
第二种配置文件方式
<?xml version="1.0" encoding="utf-8"?><translate android:fromXDelta="0" android:toXDelta="200" android:fromYDelta="0" android:toYDelta="200" android:duration="1000" xmlns:android="http://schemas.android.com/apk/res/android"> </translate>
protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.btnTranslateMe).setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.ta));}});}
4、缩放动画效果
第一种代码实现:
private ScaleAnimation sa;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//sa = new ScaleAnimation(0, 1, 0, 1); ////sa = new ScaleAnimation(0, 1, 0, 1, 100, 50);sa = new ScaleAnimation(0, 1, 0, 1, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);//相对自己的中心点来绽放sa.setDuration(1000);findViewById(R.id.btnScaleMe).setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){v.startAnimation(sa);}});}
第二种配置文件:
<?xml version="1.0" encoding="utf-8"?><scale android:fromXScale="0" android:toXScale="1" android:fromYScale="0" android:toYScale="1" android:duration="1000" android:pivotX="50%" android:pivotY="50%" xmlns:android="http://schemas.android.com/apk/res/android"> </scale>
代码部分:
protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.btnScaleMe).setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.sa));;}});
5、混合动画效果
第一种代码实现
private AnimationSet as;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);as = new AnimationSet(true);//是否共用动画补间,动画执行的过程,匀速,加速,减速执行,这个为动画补间as.setDuration(1000);AlphaAnimation aa = new AlphaAnimation(0, 1);aa.setDuration(1000);as.addAnimation(aa);TranslateAnimation ta = new TranslateAnimation(200, 0, 200, 0);ta.setDuration(1000);as.addAnimation(ta);findViewById(R.id.btnAnimMe).setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){v.startAnimation(as);}});}
第二种配置文件方式:
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="1000" android:shareInterpolator="true" > <alpha android:fromAlpha="0" android:toAlpha="1" /> <translate android:fromXDelta="200" android:fromYDelta="200" android:toXDelta="0" android:toYDelta="0" /></set>
代码部分:
protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.btnAnimMe).setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim));;}});}
6、动画侦听
protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.btnAnimMe).setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim);animation.setAnimationListener(new Animation.AnimationListener(){@Overridepublic void onAnimationStart(Animation animation){Toast.makeText(MainActivity.this, "Animation start", Toast.LENGTH_SHORT).show();}@Overridepublic void onAnimationRepeat(Animation animation){Toast.makeText(MainActivity.this, "Animation repeat", Toast.LENGTH_SHORT).show();}@Overridepublic void onAnimationEnd(Animation animation){Toast.makeText(MainActivity.this, "Animation End", Toast.LENGTH_SHORT).show();}});v.startAnimation(animation);;}});}
7、自定义动画效果,比如单击按钮后,让按钮摇摆
第一步自定义一个类,继承自Animation
package com.michael.lcustomanimation;import android.view.animation.Animation;import android.view.animation.Transformation;public class CustomAnim extends Animation{@Overridepublic void initialize(int width, int height, int parentWidth, int parentHeight){System.out.println("init");super.initialize(width, height, parentWidth, parentHeight);}@Overrideprotected void applyTransformation(float interpolatedTime, Transformation t){//interpolatedTime 从0-1 System.out.println(interpolatedTime);//t.setAlpha(interpolatedTime);//t.getMatrix().setTranslate(200, 200);//这个会直接跳过去,不是我们想要的移动的效果,分别剩上一个补间就可以了,我们可以随意自定义动画 //t.getMatrix().setTranslate(200*interpolatedTime, 200*interpolatedTime);//比如在登录窗口,密码错了,我们给他一个这样的效果t.getMatrix().setTranslate((float) (Math.sin(interpolatedTime*10)*50), 0);//需要周期性的运动,数学里面有很多这样的函数,比如sin super.applyTransformation(interpolatedTime, t);}}
代码调用
private CustomAnim ca;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ca = new CustomAnim();ca.setDuration(1000);findViewById(R.id.btnAnimMe).setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){v.startAnimation(ca);}});}
更多相关文章
- Eclipse 开发 Android, Hello, DatePicker (学习7)
- 解决com.google.code.findbugs:jsr305依赖库冲突问题
- android获取当前Canvas位图代码
- Android(安卓)代码获取手机ip地址(个人笔记)
- Android(安卓)Studio 添加百分比布局库的依赖报错 第一行代码
- android 判断当前application 是在前台还是在后台
- Android调用百度地图API实现――实时定位代码
- JavaGG android实现uc 和墨迹天气那样的左右拖动效果
- Android切换Activity的动画效果