我有两张照片。背景是这样的 ,另一个是 第二个具有透明背景。两者都是PNG图像。我有一个箭头在背景上的布局,它看起来很完美,就像这个
我想旋转箭头指向风吹的方向。我有一个每秒运行一次的循环并更新每个循环的角度。
这是我的布局:
<FrameLayout
android:id="@+id/frameMasthead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/buttonReturn"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/Button01" >
<ImageView
android:id="@+id/imageMasthead"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:src="@raw/masthead"
/>
<ImageView
android:id="@+id/imageMastheadFly"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:src="@raw/masthead_fly"
/>
以下是搜索Google和SO后我尝试过的代码。
imageMastheadFly = (ImageView)findViewById(R.id.imageMastheadFly);
Matrix matrix=new Matrix();
imageMastheadFly.setScaleType(ScaleType.MATRIX); //required
matrix.postRotate((float) awa, imageMastheadFly.getDrawable().getBounds().width()/2, imageMastheadFly.getDrawable().getBounds().height()/2);
imageMastheadFly.setImageMatrix(matrix);
它编译并运行,但结果不是我想要的。我经常注意到指针正在框架外部和全尺寸,而不是框架的缩小尺寸。以下是我看到的一个例子:
你可以看到背景很好,但是恐怖是全尺寸的并且在画面之外。
我发现的一些答案不起作用,因为这是一个API = 8的应用程序,因此它可以在我的所有手机上运行。
如果我放弃了api = 8的要求并将代码更改为:
imageMastheadFly = (ImageView)findViewById(R.id.imageMastheadFly);
imageMastheadFly.setRotation((float) awa);
工作正常。它不适用于我的Nexus-One等旧款手机
我还必须将其添加到XML
android:rotation="0"
答案#1建议我遵循教程,我做了。这是我运行的代码:
imageMastheadFly = (ImageView)findViewById(R.id.imageMastheadFly);
Matrix matrix=new Matrix();
Bitmap bMap;
bMap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
matrix.postRotate((float) awa);
Bitmap bMapRotate = Bitmap.createBitmap(bMap, 0, 0,
bMap.getWidth(), bMap.getHeight(), matrix, true);
imageMastheadFly.setImageBitmap(bMapRotate);
发生的事情是没有使用箭头的图像,而是我的应用程序的ICON在背景之上。当它旋转时,它不仅旋转,而且它自身缩放,以便即使旋转45度也能适应框架布局。这不是我想要的。我希望箭头旋转而不缩放,所以看起来风只是旋转箭头。本教程中的这段代码看起来不对。看起来像旋转的图像的规格缺失,并且确定它无法正常工作。
我能够让RotateAnimation在API = 8中工作,所以问题就解决了。这是代码。
imageMastheadFly = (ImageView)findViewById(R.id.imageMastheadFly);
RotateAnimation r; // = new RotateAnimation(ROTATE_FROM, ROTATE_TO);
r = new RotateAnimation((float)oldAwa, (float)awa, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
r.setDuration((long) 1000);
r.setRepeatCount(0);
imageMastheadFly.startAnimation(r);
oldAwa = awa;
答案 0 :(得分:1)
使用ImageView的矩阵来旋转它,你的问题可能是由于设置旋转原点错误引起的 - 可能与使用drawable的边界而不是视图的大小有关。
每次都不要创建位图。
或者,您可以在View上使用RotateAnimation,其中fillEnabled,fillAfter,fillBefore都设置为true。
答案 1 :(得分:0)
我认为你错过了将图像解码为位图。查看教程here。希望它有所帮助。