android Matrix.setRotate正在缩放我的位图

时间:2013-07-18 15:27:07

标签: android bitmap android-appwidget remoteview

我正在尝试在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),则位图显示正确。

enter image description here

如果我将旋转值设置为138,我会得到: 你几乎看不到针。

enter image description here

以下是184处的值的屏幕截图:

enter image description here

在最大值276时,针甚至看不到。

我做错了什么?我该如何解决?

提前致谢。

1 个答案:

答案 0 :(得分:1)

嗯,从第一个角度来看,你已经将speedoNeedle ImageView的宽度设置为9px,这对于箭头位图的整个角度范围来说似乎不够......这不是问题?据我所知,你是围绕它的中心旋转整个箭头位图,因此旋转的位图的尺寸会有所不同......首先,我会尝试将speedoNeedle ImageView的宽度和高度设置为相同的数字。