RemoteViews でビットマップを回転させようとしています。ただし、Matrix.setRotate メソッドまたは Matrix.postRotate メソッドのいずれかを使用すると、Bitmap のスケーリングがおかしくなります。これが私がタスクを達成するために使用しているコードです。
Bitmap bMap = BitmapFactory.decodeResource(context.getResources(), R.drawable.arrow);
Matrix m = new Matrix();
m.setRotate((float) 0, bMap.getWidth()/2, bMap.getHeight()/2);
bMap = Bitmap.createBitmap(bMap,0,0, bMap.getWidth(),bMap.getHeight(),m, true);
RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.speedometer);
remoteView.setImageViewBitmap(R.id.speedoNeedle, bMap);
元のレイアウト ファイル xml は次のとおりです。
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="136px"
android:layout_height="136px"
>
<ImageView
android:layout_width="136px"
android:layout_height="136px"
android:src="@drawable/dial"
/>
<ImageView
android:id="@+id/speedoNeedle"
android:layout_width="9px"
android:layout_height="78px"
android:layout_marginLeft="63px"
android:layout_marginTop="27px"
android:rotation="-138"
android:src="@drawable/arrow" />
</RelativeLayout>
回転値をゼロに設定するか、m.setRotate((float) 0, bMap.getWidth()/2, bMap.getHeight()/2) をコメントアウトすると、ビットマップが正しく表示されます。
回転値を 138 に設定すると、次のようになります。針がほとんど見えません。
184 の値のスクリーンショットを次に示します。
針は最大値の 276 でも見えません。
私は何を間違っていますか?どうすれば修正できますか?
前もって感謝します。