我正在尝试在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时,针甚至看不到。
我做错了什么?我该如何解决?
提前致谢。
答案 0 :(得分:1)
嗯,从第一个角度来看,你已经将speedoNeedle ImageView的宽度设置为9px,这对于箭头位图的整个角度范围来说似乎不够......这不是问题?据我所知,你是围绕它的中心旋转整个箭头位图,因此旋转的位图的尺寸会有所不同......首先,我会尝试将speedoNeedle ImageView的宽度和高度设置为相同的数字。