旋转后将图像放入 ImageView
Fitting an image inside an ImageView after rotation
我有一个正在旋转的 ImageView,我希望它在旋转完成后重新缩放自身。 (我更喜欢在旋转时按比例缩小的无缝动画旋转,但这是另一个话题。)我觉得我需要制作一个可运行的来实现这一点,但我无法让它正常工作。图片保持旋转前的大小
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()。
万一有人遇到这个问题,我使用了以下代码,它使用动画和动画侦听器在动画完成后调用该方法。我仍然需要弄清楚如何在方法中调整图像的大小,因为 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();
我有一个正在旋转的 ImageView,我希望它在旋转完成后重新缩放自身。 (我更喜欢在旋转时按比例缩小的无缝动画旋转,但这是另一个话题。)我觉得我需要制作一个可运行的来实现这一点,但我无法让它正常工作。图片保持旋转前的大小
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()。
万一有人遇到这个问题,我使用了以下代码,它使用动画和动画侦听器在动画完成后调用该方法。我仍然需要弄清楚如何在方法中调整图像的大小,因为 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();