在旋转后在ImageView内部拟合图像

时间:2016-10-03 03:25:08

标签: android runnable

我有一个我正在旋转的ImageView,我希望它在旋转完成后重新缩放。 (我更喜欢无缝的动画旋转,在旋转时向下缩小,但这是另一个主题。)我有一种感觉,我需要制作一个runnable来实现这一点,但我无法让它正常工作。图像保持与旋转前相同的大小。

private void rotate() {
    imageView.animate().rotationBy(90).setDuration(100).setInterpolator(new LinearInterpolator()).start();
    imageView.post(new Runnable() {
        @Override
        public void run() {
            fitImageView();
        }
    });
}


private void fitImageView() {

    float imageWidth = imageView.getDrawable().getIntrinsicWidth();
    float imageHeight = imageView.getDrawable().getIntrinsicHeight();
    RectF drawableRect = new RectF(0, 0, imageWidth, imageHeight);
    RectF viewRect = new RectF(0, 0, imageView.getWidth(), imageView.getHeight());
    Matrix matrix = new Matrix();
    matrix.setRectToRect(drawableRect, viewRect, Matrix.ScaleToFit.CENTER);
    imageView.setImageMatrix(matrix);
    imageView.invalidate();

}

fitImageView()在首次初始化时可以很好地适应图像,并且我已经从日志中确认在rotate()期间有时会调用fitImageView()。

1 个答案:

答案 0 :(得分:0)

如果有人碰到这个,我使用下面的代码,它使用动画和动画监听器在动画完成后调用该方法。我仍然需要弄清楚如何在方法中调整图像大小,因为getheight和getwidth仍然是与旋转之前相同的值,但至少在旋转完成后调用该方法。

imageView.animate().rotationBy(90).setDuration(2000).setInterpolator(new LinearInterpolator()).setListener(new Animator.AnimatorListener() {
        @Override
        public void onAnimationStart(Animator animation) {

        }

        @Override
        public void onAnimationEnd(Animator animation) {
            fitImageView();
        }

        @Override
        public void onAnimationCancel(Animator animation) {

        }

        @Override
        public void onAnimationRepeat(Animator animation) {

        }
    }).start();