最好的代码永远是自己写出来的
布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.liuan.animation.MainActivity">
<ScrollView
android:fadeScrollbars="true"
android:layout_width="match_parent"
android:layout_height="250dp">
<LinearLayout
android:id="@+id/ll_amimation"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical">
<Button
android:id="@+id/bt_alpha"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="7dp"
android:text="透明度动画Alpha" />
<Button
android:id="@+id/bt_Rotate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="7dp"
android:text="旋转动画Rotate" />
<Button
android:id="@+id/bt_Translate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="7dp"
android:text="位移动画Translate" />
<Button
android:id="@+id/bt_Scale"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="7dp"
android:text="缩放动画Scale" />
<Button
android:id="@+id/bt_Object"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="7dp"
android:text="属性动画Object" />
<Button
android:id="@+id/bt_Value"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="7dp"
android:text="值动画" />
<Button
android:id="@+id/bt_Set"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="7dp"
android:text="补间/属性动画合集set" />
<Button
android:id="@+id/bt_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="7dp"
android:text="自定义动画TV" />
<Button
android:id="@+id/bt_3d"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="7dp"
android:text="自定义3d动画" />
</LinearLayout>
</ScrollView>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_centerInParent="true"
android:id="@+id/imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher" />
</RelativeLayout>
</LinearLayout>
mainActivity
package com.example.liuan.animation;
import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.LayoutAnimationController;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class MainActivity extends AppCompatActivity {
@Bind(R.id.bt_alpha)
Button btAlpha;
@Bind(R.id.bt_Rotate)
Button btRotate;
@Bind(R.id.bt_Translate)
Button btTranslate;
@Bind(R.id.bt_Scale)
Button btScale;
@Bind(R.id.ll_amimation)
LinearLayout llAmimation;
@Bind(R.id.imageview)
ImageView imageview;
@Bind(R.id.activity_main)
LinearLayout activityMain;
@Bind(R.id.bt_Object)
Button btObject;
@Bind(R.id.bt_Value)
Button btValue;
@Bind(R.id.bt_Set)
Button btSet;
@Bind(R.id.bt_tv)
Button btTv;
@Bind(R.id.bt_3d)
Button bt3d;
private int animationDuration = 2000;
private boolean isViewSet=true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
imageview.setImageResource(R.mipmap.ic_launcher);
//为布局设置动画时间
ScaleAnimation scaleAnimation = new ScaleAnimation(0, 1, 0, 1);
scaleAnimation.setDuration(animationDuration);
//设置布局动画的显示属性
LayoutAnimationController lac = new LayoutAnimationController(scaleAnimation, 0.5f);
//设置View显示的顺序
//匀速ORDER_NORMAL
//随机ORDER_RANDOM
//反顺序
lac.setOrder(LayoutAnimationController.ORDER_REVERSE);
//为ViewGroup设置布局动画
activityMain.setLayoutAnimation(lac);
}
@OnClick({R.id.bt_alpha, R.id.bt_Rotate, R.id.bt_Translate, R.id.bt_Scale, R.id.bt_Object, R.id.bt_Value, R.id.bt_Set, R.id.bt_tv,R.id.bt_3d})
public void onClick(View view) {
switch (view.getId()) {
case R.id.bt_alpha:
// Toast.makeText(MainActivity.this, "getWidth"+imageview.getWidth()+"getHeight"+imageview.getHeight(), Toast.LENGTH_SHORT).show();
AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1);
alphaAnimation.setDuration(animationDuration);
imageview.startAnimation(alphaAnimation);
break;
case R.id.bt_Rotate:
RotateAnimation ra = new RotateAnimation(0, 360, imageview.getX() / 2, imageview.getY() / 2);
ra.setDuration(animationDuration);
imageview.startAnimation(ra);
break;
case R.id.bt_Translate:
TranslateAnimation translateAnimation = new TranslateAnimation(0, 0, imageview.getX(), imageview.getY());
translateAnimation.setDuration(animationDuration);
imageview.startAnimation(translateAnimation);
break;
case R.id.bt_Scale:
ScaleAnimation scaleAnimation = new ScaleAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 360, Animation.RELATIVE_TO_SELF, 0.5F, Animation.RELATIVE_TO_SELF, 0.5F);
scaleAnimation.setDuration(animationDuration);
imageview.startAnimation(scaleAnimation);
break;
case R.id.bt_Object:
//属性动画不会改变实际位置
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(imageview,
"translationX", 300);
objectAnimator.setDuration(animationDuration);
objectAnimator.start();
objectAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(imageview,
"translationX", 0);
objectAnimator2.setDuration(animationDuration);
objectAnimator2.start();
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
break;
case R.id.bt_Value:
ValueAnimator valueAnimator = ValueAnimator.ofInt(0, 10);
valueAnimator.setTarget(imageview);
valueAnimator.setDuration(10 * 1000);
valueAnimator.setInterpolator(new LinearInterpolator());
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
private AlertDialog dialog;
private AlertDialog.Builder builder;
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int animatedValue = (int) animation.getAnimatedValue();
if (builder == null) {
builder = new AlertDialog.Builder(MainActivity.this);
}
if(dialog==null) {
dialog = builder.create();
}
dialog.setTitle("值动画");
dialog.setMessage("" + animatedValue);
if (animatedValue == 10) {
dialog.dismiss();
return;
}
dialog.show();
}
});
valueAnimator.start();
break;
case R.id.bt_Set:
if(isViewSet){
Toast.makeText(this, "这是补间动画的合集", Toast.LENGTH_SHORT).show();
AnimationSet set=new AnimationSet(true);
set.setDuration(animationDuration);
AlphaAnimation alphaAnimation1 = new AlphaAnimation(0, 1);
alphaAnimation1.setDuration(animationDuration);
set.addAnimation(alphaAnimation1);
TranslateAnimation ta = new TranslateAnimation(0, 100, 0, 200);
ta.setDuration(animationDuration);
set.addAnimation(ta);
imageview.startAnimation(set);
}else{
Toast.makeText(this, "这是属性动画的合集", Toast.LENGTH_SHORT).show();
AnimatorSet set=new AnimatorSet();
set.setDuration(animationDuration);
ObjectAnimator oa1=ObjectAnimator.ofFloat(imageview,"translationY",0,300,0);
ObjectAnimator oa2=ObjectAnimator.ofFloat(imageview,"scaleX",1f,0f,1f);
ObjectAnimator oa3=ObjectAnimator.ofFloat(imageview,"scaleY",1f,0f,1f);
set.playTogether(oa1,oa2,oa3);
set.start();
}
isViewSet=!isViewSet;
break;
case R.id.bt_tv:
TvAnimator tvAnimator = new TvAnimator();
tvAnimator.setDuration(animationDuration);
imageview.startAnimation(tvAnimator);
break;
case R.id.bt_3d:
ThereDAnimator tda=new ThereDAnimator();
tda.setDuration(animationDuration);
imageview.startAnimation(tda);
break;
}
}
}
ThereDAnimator
package com.example.liuan.animation;
import android.graphics.Camera;
import android.graphics.Matrix;
import android.view.animation.Animation;
import android.view.animation.BounceInterpolator;
import android.view.animation.Transformation;
/**
* Name: ThereDAnimator
* Author: liuan
* creatTime:2017-01-05 20:04
*/
public class ThereDAnimator extends Animation {
private int mCenterwidth;
private int mCenterHeight;
private Camera mCamera=new Camera();
@Override
public void initialize(int width, int height, int parentWidth, int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
//设置默认时长
setDuration(2000);
//结束后保留动作
setFillAfter(true);
//设置默认插值器
setInterpolator(new BounceInterpolator());
mCenterwidth=width/2;
mCenterHeight=height/2;
}
//动画的核心
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
super.applyTransformation(interpolatedTime, t);
Matrix matrix = t.getMatrix();
mCamera.save();;
//使用camera设置旋转的角度
float mRotateY=360;
mCamera.rotateY(mRotateY*interpolatedTime);
//将旋转变换作用到matrix上
mCamera.getMatrix(matrix);
mCamera.restore();
//通过pre方法设置矩阵作用前的偏移量来改变旋转中心
matrix.preTranslate(mCenterwidth,mCenterHeight);
matrix.postTranslate(-mCenterwidth,-mCenterHeight);
}
}
TvAnimator
package com.example.liuan.animation;
import android.graphics.Matrix;
import android.view.animation.Animation;
import android.view.animation.Transformation;
/**
* Name: TvAnimator
* Author: liuan
* creatTime:2017-01-04 22:30
*/
public class TvAnimator extends Animation {
MainActivity s=new MainActivity();
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
super.applyTransformation(interpolatedTime, t);
Matrix matrix = t.getMatrix();
matrix.preScale(1,1-interpolatedTime,36,36);
}
}
butterknife的使用 请查看我下一个的博客
场面一度十分尴尬
今天才发现少了个帧动画 补上 首先要 在drawable 下放好图片 然后 建布局文件
如下
animation_nor.xml
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item android:drawable="@drawable/wife1" android:duration="150"/>
<item android:drawable="@drawable/wife2" android:duration="150"/>
<item android:drawable="@drawable/wife3" android:duration="150"/>
<item android:drawable="@drawable/wife4" android:duration="150"/>
<item android:drawable="@drawable/wife5" android:duration="150"/>
<item android:drawable="@drawable/wife6" android:duration="150"/>
</animation-list>
animation_res.xml
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item android:drawable="@drawable/wife6" android:duration="150"/>
<item android:drawable="@drawable/wife5" android:duration="150"/>
<item android:drawable="@drawable/wife4" android:duration="150"/>
<item android:drawable="@drawable/wife3" android:duration="150"/>
<item android:drawable="@drawable/wife2" android:duration="150"/>
<item android:drawable="@drawable/wife1" android:duration="150"/>
</animation-list>
然后添加布局Button什么的我就步多说啦 直接上核心代码
case R.id.bt_animationlist_nor:
imageview.setImageResource(R.drawable.animation_nor);
animationDrawable= (AnimationDrawable) imageview.getDrawable();
animationDrawable.start();
break;
case R.id.bt_animationlist_res:
imageview.setImageResource(R.drawable.animation_res);
animationDrawable= (AnimationDrawable) imageview.getDrawable();
animationDrawable.start();
break;