通过相机和矩阵镜像图像

dd

我想在按“片段”上的按钮时翻转图像。我创建一个扩展了Animation类的类,以使翻转的动画效果如下所示。

import android.graphics.Camera;
import android.graphics.Matrix;
import android.view.animation.Animation;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.Transformation;

public class FlipAnimation extends Animation {
    private int centerX;
    private int centerY;

    private Camera camera = new Camera();

    @Override
    public void initialize(int width, int height, int parentWidth, int parentHeight) {
        super.initialize(width, height, parentWidth, parentHeight);

        centerX = width / 2;
        centerY = width / 2;

        setDuration(1000);
        setInterpolator(new DecelerateInterpolator());
    }

    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        final Matrix matrix = t.getMatrix();

        camera.save();
        camera.rotateY(180 * interpolatedTime);
        camera.getMatrix(matrix);

        // Move to image center before rotation, and move back after rotation.
        matrix.preTranslate(-centerX, -centerY);
        matrix.postTranslate(centerX, centerY);

        camera.restore();
    }
}

当我按下按钮时,调用动画如下

public void flipImage() {
        FlipAnimation flipAnimation = new FlipAnimation();
        flipAnimation.setFillAfter(true);
        imageView.startAnimation(flipAnimation);
    }

当我第一次按下按钮时,图像可以正确翻转(旋转180度),但是当我再次按下按钮时,图像并没有翻转回原始状态。

这是我想要的: 在此处输入图片说明

这是我得到的: 在此处输入图片说明

当我再次按下按钮时,旋转从原始状态开始,但是我希望它从第一步的结果开始。

点。

reverse在您的班级中定义一个成员。applyTransformation被调用时,只需切换reverse到它的逆和应用的180负旋转下面是一些有用的例子。

boolean reverse = false;

@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
    final Matrix matrix = t.getMatrix();

    camera.save();

    // Rotate forward or backward.
    if (reverse) {
        camera.rotateY(180 * (1.0f - interpolatedTime));

    } else {
        camera.rotateY(180 * interpolatedTime);
    }

    camera.getMatrix(matrix);

    // Move to image center before rotation, and move back after rotation.
    matrix.preTranslate(-centerX, -centerY);
    matrix.postTranslate(centerX, centerY);

    // Reverse animation.
    reverse = !reverse;

    camera.restore();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章