0

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 でも見えません。

私は何を間違っていますか?どうすれば修正できますか?

前もって感謝します。

4

1 に答える 1