2016-10-03 13 views
0

У меня есть ImageView, который я вращаю, и я хотел бы, чтобы он снова масштабировался после завершения вращения. (Я бы предпочел плавный анимированный поворот, который масштабируется, когда он вращается, но это еще одна тема.) У меня такое чувство, что мне нужно сделать runnable для достижения этого, но я не могу заставить его работать правильно. Изображение имеет тот же размер, что и перед вращением.Установка изображения внутри 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() отлично работает, чтобы поместить изображение, когда он первый инициализирован, и я подтвердил, из журнала, что fitImageView() вызывается когда-то во время поворота().

+0

ваш fitimageview() работает нормально. Но он называется до полной анимации? – dipali

+0

Думаю, что так. Трудно сказать, вызвано ли оно перед анимацией из журнала. – Mardymar

ответ

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(); 

 Смежные вопросы

  • Нет связанных вопросов^_^