2012-04-02 22 views
10

私が作業しているアプリにコンパスを作成する必要があります。だから私はCompassViewという新しいビューを作成しようとしました。基本的にimageviewを拡張し、東西北の南を指し示すビットマップを表示し、センサを使って電話機が指し示す度合いを見つけ出し、それに応じてイメージを回転させます実際のコンパス。しかし、問題は、45度のような角度に画像を回転しようとすると、縮むことです。それをより良く説明するためにいくつかの画像があります。Androidで縮小せずに画像を回転する

This is normal

This is shrinked

あなたが見ることができるように私はそれが何をしたいの周りに45何回転しようとすると、第2の画像がダウン縮めているこのです:ここでは this

です私が現在使っているコード:

 Bitmap bMap = BitmapFactory.decodeResource(getResources(), 
       R.drawable.compass); 
     Matrix xMatrix = new Matrix(); 
     xMatrix.reset(); 
     xMatrix.postRotate(360-mValue, 75, 75); //This is 75 because 150 is the image width 
     Bitmap bMapRotate = Bitmap.createBitmap(bMap, 0, 0, 
       bMap.getWidth(), bMap.getHeight(), xMatrix, true); 
     setImageBitmap(bMapRotate); 

助けを借りればいいですated。 THanks

編集:(解決策) 私は最終的に受け入れられた答えのおかげで働いています。ここで私はそれが働いた方法を知りたい人のために使っていたコードは次のとおりです。

RotateAnimation rAnimAntiClockWise = new RotateAnimation(
        360 - mValue, 360 - event.values[0], 
        Animation.RELATIVE_TO_SELF, 0.5f, 
        Animation.RELATIVE_TO_SELF, 0.5f); 
//mValue is the angle in degrees and i subtracted it from 360 to make it anticlockwise, and event.values[0] is the same thing as mValue 
rAnimAntiClockWise.setFillAfter(true); 
rAnimAntiClockWise.setInterpolator(new LinearInterpolator()); 
rAnimAntiClockWise.setDuration(0); 
startAnimation(rAnimAntiClockWise); 

答えて

4

回転と同じように動作し、画像のサイズを変更しない別のトリックを使用できます。私は実際に45度の角度で画像を回転させ、アニメーションの後も変化を続けます。私は道を知らせるための

rAnimAntiClockWise = new RotateAnimation(0.0f, 45.0f, 
       Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 
       0.5f); 
     rAnimAntiClockWise.setFillAfter(true); 
     rAnimAntiClockWise.setInterpolator(new LinearInterpolator());  
      bitmap = BitmapFactory.decodeResource(getResources(), 
        R.drawable.rotate);  
     rAnimAntiClockWise.setDuration(100); 
     img_rotate.startAnimation(rAnimAntiClockWise); 
+0

感謝をキャンバスとカスタムビューに新しいですので、それらを実装する方法を知りませんでした回転アニメーションから。私はちょうどそれが働くようにコードのいくつかの部分を修正する必要があった – KSubedi

3

問題があなたの新しいイメージが原因ソースは「突き出し」のコーナーに、実際に大きく、そうということですビューは収まるように縮小しています。

いくつかの可能なアプローチ:上記のコードの後

  1. 、正しいサイズの中央領域をコピーし、Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height)を呼び出します。あなたが持っているコードは簡単ですが、役に立たない中間ビットマップを作成します。

  2. 変換イメージとソースイメージをcreateBitmapに渡す代わりに、正しいサイズのビットマップを作成してキャンバスにラップし、回転イメージを描画するようにCanvasに指示します。

    bMapRotate = Bitmap.createBitmap(
        bMap.getWidth(), bMap.getHeight(), bMap.getConfig()); 
    Canvas canvasRotate = new Canvas(bMap); 
    canvasRotate.drawBitmap(bMap, xMatrix, paint); // any opaque Paint should do 
    
  3. あなたが持っているコードを保ちますが、レンダリング時の作物ではなく、スケールに視野を教えてください。

+0

おかげで..私は私の選択肢を知っていたが、私はちょうど私が多く、私はこれはacheivedすることができることを知らなかった – KSubedi

関連する問題