用Camera自定义3D动画---(android学习笔记)

废话不多说先看看camera提供的几个函数以及函数的解释(纯属个人使用后的理解,不同见解欢迎讨论)

api函数分析

1.

 `camera.rotateY(90);//图片沿Y轴向内侧旋转
camera.rotateX(90);//图片沿X轴向内侧旋转
camera.rotateZ(90);//图片沿z轴旋转()`

2.

camera.setLocation(3,0,1);//设置相机的位置,默认为(0,0,-8)

3.

 camera.rotate(12, 12, 45);//第一个参数和第二个参数对应图片向内侧旋转
            // ,第三个参数对应图片绕左上角旋转//是对  1 的合并

4.

camera.translate(12,12,1234);//第一个参数x越大图片越靠近右边,第二个
//            参数y 越大图片越靠近上边,z越大图片越缩小(就好比我们在远处看一个东西)

5.

camera.getMatrix(matrix);
            matrix.preTranslate(-width / 2, -height / 2);//加上这句和后面的一行代码旋转会在图片的中心进行,否则以(0,0)为中心
            matrix.postTranslate(width / 2, height / 2);

6.

camera.save()//保存相机状态(类似canvas.save())

7.

camera.restore()//回复相机状态(类似canvas.restore())

demo实践

下面是图片做处理之前的状态
用Camera自定义3D动画---(android学习笔记)_第1张图片

1.camera.translate(12,12,1234)

用Camera自定义3D动画---(android学习笔记)_第2张图片

x轴和y轴的效果难以呈现(类似平移)

2.

  camera.rotate(12, 12, 45)

用Camera自定义3D动画---(android学习笔记)_第3张图片

代码

package com.example.administrator.mydemo.anim;

import android.graphics.Camera;
import android.graphics.Matrix;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.Transformation;
import android.widget.ImageView;

import com.example.administrator.mydemo.R;

public class AnimintaionDefineSelfActivity extends FragmentActivity implements View.OnClickListener {
    ImageView iv;
    private int width;
    private int height;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_animintaion_define_self);
        iv = (ImageView) findViewById(R.id.iv_amin_defsele);
        iv.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Rotate3d rotate = new Rotate3d();
        rotate.setDuration(3000);
        rotate.setFillAfter(true);
        width = iv.getWidth();
        height = iv.getHeight();
        iv.startAnimation(rotate);
    }

    class Rotate3d extends Animation {
        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) {
            Matrix matrix = t.getMatrix();
            Camera camera = new Camera();

            camera.save();
//            camera.translate(12,12,1234);//第一个参数x越大图片越靠近右边,第二个
//            camera.rotateY(90 * interpolatedTime);
//            camera.setLocation(3,0,1);//设置相机的位置,默认为(0,0,-8)
//            camera.rotate(0,0,56);
//            参数y 越大图片越靠近上边,z越大图片越缩小(就好比我们在远处看一个东西)


            camera.rotate(12, 12, 45);//第一个参数和第二个参数对应图片向内侧旋转
            // ,第三个参数对应图片绕左上角旋转


            camera.getMatrix(matrix);
            matrix.preTranslate(-width / 2, -height / 2);//加上这句和后面的一行代码旋转会在图片的中心进行,否则以(0,0)为中心
            matrix.postTranslate(width / 2, height / 2);

            camera.restore();
        }
    }
}

暂时就这么多,以后有了新的发现会重新编辑

你可能感兴趣的:(学习笔记)