2016-10-03 5 views
0

私は回転しているImageViewを持っています。回転が終了した後に画像自体のスケールを変更したいと思います。 (私は回転しながら滑らかなアニメーション回転を望むが、それは別の話題である)私はこれを達成するために実行可能にする必要があると感じているが、正しく動作させることはできない。イメージは回転前と同じサイズを保持します。回転後に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(); 
関連する問題