【Android开发小记--7】动画--简单的button移动和图片3D翻转

来源:互联网 发布:大数据英文怎么说 编辑:程序博客网 时间:2024/05/01 01:10

button移动:

分别用视图和属性方法的XML配置与代码编写来实现


效果图:

          



MainActivity.java :

public class MainActivity extends AppCompatActivity implements View.OnClickListener {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //初始化监听        findViewById(R.id.button1).setOnClickListener(this);        findViewById(R.id.button2).setOnClickListener(this);        findViewById(R.id.button3).setOnClickListener(this);        findViewById(R.id.button4).setOnClickListener(this);        findViewById(R.id.imageView).setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()){            //-----ViewAnimation---XML---------            case R.id.button1:                v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.anim_button));                break;            //-----ViewAnimation---Java Code-------            case R.id.button2:                viewAnimation(v);                break;            //-----FrameAnimator---XML---------            case R.id.button3:                frameAnimatorXML(v);                break;            //-----FrameAnimator---Java Code---------            case R.id.button4:                frameAnimatorCode(v);                break;            //-----图片翻转-----------------------------            case R.id.imageView:                imageAnimate(v);                break;            default:                break;        }    }    /* ViewAnimation---Java Code */    private void viewAnimation(View v) {        AnimationSet as = new AnimationSet(true);        TranslateAnimation ta1 = new TranslateAnimation(0,200,0,0);        ta1.setDuration(1000);        as.addAnimation(ta1);        TranslateAnimation ta2 = new TranslateAnimation(0,0,0,200);        ta2.setDuration(1000);        ta2.setStartOffset(1000);        as.addAnimation(ta2);        v.startAnimation(as);    }    /*FrameAnimator---XML*/    private void frameAnimatorXML(View v) {        AnimatorSet animator = (AnimatorSet) AnimatorInflater.loadAnimator(this,R.animator.animator_button);        animator.setTarget(v);        animator.start();    }    /*FrameAnimator---Java Code*/    private void frameAnimatorCode(View v) {        AnimatorSet set = new AnimatorSet();        set.setDuration(1000);        set.playSequentially(ObjectAnimator.ofFloat(v, "translationX", 0, 200),                ObjectAnimator.ofFloat(v, "translationY", 0, 200),                ObjectAnimator.ofFloat(v, "translationY", 200, 0),                ObjectAnimator.ofFloat(v, "translationX", 200, 0));        set.start();    }    /*图片翻转*/    private void imageAnimate(View v) {        AnimationSet as = new AnimationSet(true);        //首次翻转,使用自定义动画 ImageAnim3D        ImageAnim3D imgAnim3D = new ImageAnim3D(false);        imgAnim3D.setDuration(1000);        v.measure(0, 0);        imgAnim3D.setCenter(v.getWidth() / 2, v.getHeight() / 2);        imgAnim3D.setFillAfter(true);        as.addAnimation(imgAnim3D);        //翻转回来        ImageAnim3D imgAnim3D2 = new ImageAnim3D(true);        imgAnim3D2.setDuration(1000);        imgAnim3D2.setStartOffset(1000);        v.measure(0, 0);        imgAnim3D2.setCenter(v.getWidth() / 2, v.getHeight() / 2);        as.addAnimation(imgAnim3D2);        v.startAnimation(as);    }}



视图动画,res/anim 下:

anim_button.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">    <translate        android:duration="1000"        android:fromXDelta="0"        android:fromYDelta="0"        android:toXDelta="200"        android:toYDelta="0" />    <translate        android:duration="1000"        android:fromXDelta="0"        android:fromYDelta="0"        android:startOffset="1000"        android:toXDelta="0"        android:toYDelta="200" /></set>


属性动画,res/animator 下:


animator_button.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    android:ordering="sequentially">    <objectAnimator        android:duration="1000"        android:propertyName="translationX"        android:valueFrom="0"        android:valueTo="200" />    <objectAnimator        android:duration="1000"        android:propertyName="translationY"        android:valueFrom="0"        android:valueTo="200" />    <objectAnimator        android:duration="1000"        android:propertyName="translationY"        android:valueFrom="200"        android:valueTo="0" />    <objectAnimator        android:duration="1000"        android:propertyName="translationX"        android:valueFrom="200"        android:valueTo="0" /></set>


imageView翻转:

自定义Animation() 为 ImageAnim3D( boolean turn ) ,turn为false代表正向翻转,true代表反向翻转。

ImageAnim3D.java 

public class ImageAnim3D extends Animation {    private float mCenterX = 0;    private float mCenterY = 0;    private boolean turn; //当为false则是正常翻转,为ture则是翻转回来    public ImageAnim3D(boolean turn) {        this.turn = turn;    }    public void setCenter(float centerX, float centerY) {        mCenterX = centerX;        mCenterY = centerY;    }    @Override    protected void applyTransformation(float interpolatedTime, Transformation t) {        Matrix matrix = t.getMatrix();        Camera camera = new Camera();        camera.save();        if (!turn) {            //正向翻转            camera.rotateY(180 * interpolatedTime);        } else {            //反向翻转            camera.rotateY(-180 * interpolatedTime);        }        camera.getMatrix(matrix);        camera.restore();        matrix.preTranslate(-mCenterX, (float) (-0.2 * mCenterY));        matrix.postTranslate(mCenterX, (float) (0.2 * mCenterY));    }}


具体代码点击





1 0