废话不多说先看看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实践
下面是图片做处理之前的状态
1.camera.translate(12,12,1234)
x轴和y轴的效果难以呈现(类似平移)
2.
camera.rotate(12, 12, 45)
代码
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();
}
}
}
暂时就这么多,以后有了新的发现会重新编辑