Если я поверну изображение с помощью класса Graphic.Camera на Android, изображение было повреждено

Я хочу сделать изображение в перспективе, поэтому я повернул его с помощью класса Graphic.camera. В повороте нет ничего особенного, кроме особых действий поворота.

когда я запускаю приложение

когда я поворачиваю изображение

Это случилось, когда камера проходит через изображение, на которое я полагаю, но это не ясно. Есть ли решение или проблема в моем коде?

Вот мой код ротации.

public class FieldGraphic extends Graphic {

private Camera camera;
private Matrix matrix;

private int width;
private int height;

private int angleX;
private int angleY;
private int angleZ;

public FieldGraphic(String name) {
    super(name, Type.Draw_Type.FIELD);
    camera = new Camera();
    matrix = new Matrix();

    Display display = activity.getWindowManager().getDefaultDisplay();
    DisplayMetrics metrics = new DisplayMetrics();
    display.getMetrics(metrics);
    width = metrics.widthPixels;
    height = metrics.heightPixels;

    dst = new Rect(0, 0, width, height);

    angleX = 0;
    angleY = 0;
    angleZ = 0;

    camera.rotateX(45);
}
public void getAngle(int x, int z)
{
    if(angleX != x) {
        camera.rotateZ(-angleX + x);
        angleX = x;
    }
    if(angleZ != z) {
        camera.rotateX(angleZ - z);
        angleZ = z;
    }
    camera.getMatrix(matrix);
    matrix.preTranslate(-width/2, -height/2);
    matrix.postTranslate(width/2, height/2);
}
public void setDestination(double widthRatio, double heightRatio, Common_Math.Matrix1X4 focus)
{
    int bitmapWidth = bitmap.getWidth();//(int)(bitmap.getWidth() * widthRatio);
    int bitmapHeight = bitmap.getHeight();//(int)(bitmap.getHeight() * heightRatio);
    dst = new Rect(-bitmapWidth/2 - (int)focus.getMatrix1X3().getX(), -bitmapHeight/2 - (int)focus.getMatrix1X3().getZ(),
                    bitmapWidth/2 - (int)focus.getMatrix1X3().getX(),  bitmapHeight/2 - (int)focus.getMatrix1X3().getZ());
}

@Override
public void Draw(Canvas canvas)
{
    canvas.setMatrix(matrix);
    canvas.drawBitmap(bitmap, src, dst, paint);
}

Draw (Canvas Canvas) всегда вызывается в ThreadView Thread,

и getAngle(int x, int z) или setDestination(double widthRatio, double heightRatio, Common_Math.Matrix1X4 focus) всегда вызывается перед методом Draw(Canvas canvas).

0 ответов

Другие вопросы по тегам