2012-01-23 16 views
2

私はimageViewを持っており、私は基本的に温度計のスタイルゲージを作成しようとしています。テストのために画像を追加しました。基本的に画像を回転しようとしています。最初の画像は、標準レイアウトの画像を持っています。画像を回転させようとすると、幅はまだ画面いっぱいになりますが、実際の画像が小さく見えるように、画像を縮小してコーナーの余裕を確保します。イメージを正確に同じサイズにしたいが、渡されたマトリックスに基づいて回転する。ここでAndroid:ImageView Rotation Scale

Normal Image

Image rotated incorrectly, for me anyways

私は回転のために使用していますコードです:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main);   

    circle = (ImageView) findViewById(R.id.imageView1); 
    Bitmap myImg = BitmapFactory.decodeResource(getResources(), R.drawable.rotated); 

    Matrix matrix = new Matrix(); 
    matrix.postRotate(45); 

    Bitmap rot = Bitmap.createBitmap(myImg, 0, 0, myImg.getWidth(), myImg.getHeight(), 
      matrix, true); 

    circle.setImageBitmap(rot);   
} 

だから、私は基本的に画面の端に到達するために、緑/赤の円のエッジを必要とします。これはimageViewで可能ですか?また、スタッフが画面から外れるようにカスタムビューを作成する必要がありますか?ところで、私は実際にこの全体を描くつもりはない、これは私の問題を横断するための単なる例である。

答えて

3

実際の新しい幅と高さを計算する必要があります。 その後、

newWidth = width/cos(alpha) 

...アルファはあなたの回転角である、いくつかの三角法に

newHeight = height/sin(alpha)を使用してみてください:計算について

Bitmap rot = Bitmap.createBitmap(myImg, 0, 0, newWidth, newHeight , 
      matrix, true); 

わからない、私はそれをチェックしませんでしたが、とにかく、それは正しいと思います。)

+0

これは私が元々考えていたものです。唯一の問題は、私がcreateBitmap()に渡すサイズがコンテナよりも大きい場合、強制的に閉じることです。 – SemperGumbee

+0

それから、作成後にトリミングしてください... – Rotemmiz

+0

createBitmap()またはimageViewに挿入しようとするとハングアップしますか? – Rotemmiz

2

最適ではあるが、うまくいきます。回転ビットマップを初期サイズにクロップします。

circle = (ImageView) findViewById(R.id.imageView1); 
Bitmap myImg = BitmapFactory.decodeResource(getResources(), R.drawable.rotated); 

Matrix matrix = new Matrix(); 
matrix.postRotate(45); 

Bitmap rot = Bitmap.createBitmap(myImg, 0, 0, myImg.getWidth(), myImg.getHeight(), matrix, true); 

int off = (rot.getWidth() - myImg.getWidth())/2; 
Bitmap result = Bitmap.createBitmap(rot, off, off, myImg.getWidth(), myImg.getHeight()); 

circle.setImageBitmap(result);