gpt4 book ai didi

android - 同心旋转叠加图像

转载 作者:行者123 更新时间:2023-11-29 00:25:19 25 4
gpt4 key购买 nike

我非常接近解决方案,但最后一点还没有解决。我有两个相同大小的图像,它们叠加在布局的一部分中。这些图像将根据屏幕尺寸进行缩放以适合屏幕。如果相关的话,我已经使用了多个可绘制对象。

本质上,一张图片是一个圆圈,中间有一架飞机,另一张是一个小风向袋。我希望风向袋位于风吹来的相对位置。

我已经让风向袋在开始时很好地覆盖,我可以旋转它但它不是同心旋转,并且当我旋转时风向袋的比例会略有变化。我可以看到这一点,因为当我将旋转归零时,风向袋图形不在起始位置并且稍微大一些。

所以问题是我如何缩放叠加层以使其与 android 在创建初始 View 时所做的相同?

我的 XML:

        <LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="0.60"
android:gravity="center"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:textSize="12sp"
android:text="@string/runwayDirection"
android:textColor="#ffffff" />

<EditText
android:id="@+id/rwyDirection"
android:layout_width="40dp"
android:layout_height="wrap_content"
android:layout_marginLeft="1dp"
android:layout_marginRight="1dp"
android:background="@drawable/border"
android:ems="10"
android:gravity="center"
android:inputType="number"
android:maxLength="3"
android:text="@string/zero"
android:textColor="#ffffff"
android:textCursorDrawable="@null" />

<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:id="@+id/aircraftGraphic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/windRose"
android:src="@drawable/aircraftgraphic" />
<ImageView
android:id="@+id/windpic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/windRose"
android:src="@drawable/windsockring"
/>
</FrameLayout>
</LinearLayout>

我用来旋转的代码:

public void rotate_windsock(){

float relativeWind=90;
float rwydir;
float windDirection;

if (rwyDirection.getText().toString().matches("")) rwydir=0;
else rwydir=Float.parseFloat(rwyDirection.getText().toString());

if (windAngle.getText().toString().matches("")) windDirection=0;
else windDirection=Float.parseFloat(windAngle.getText().toString());

if (rwydir>windDirection) relativeWind=360-(rwydir-windDirection);
else relativeWind=(windDirection-rwydir);

Matrix matrix=new Matrix();
windSock.setScaleType(ScaleType.MATRIX); //required
matrix.postRotate((float) relativeWind, aircraftGraphic.getWidth()/2, aircraftGraphic.getWidth()/2);
//matrix.postScale(aircraftGraphic.getWidth(), aircraftGraphic.getWidth());
windSock.setImageMatrix(matrix);

}

你可以看到我目前正在尝试获取底层图片的宽度,因为它是一个正方形,所以使用它作为 postRotate 的参数。我尝试获取 LinearLayout 的宽度,并尝试对底层图像进行旋转,希望它能缩放到与上层图像相同,但没有任何效果。很接近,但显然不对。

有人帮帮我吗?我唯一想到的另一件事是进一步缩小图像,这样它们就不会缩放,但这会在大屏幕上浪费空间吗?

编辑:

我试过将旋转代码更改为:

Matrix mat = new Matrix();
Bitmap bMap = BitmapFactory.decodeResource(getResources(),R.drawable.windsockring);
mat.postRotate(relativeWind);
Bitmap bMapRotate = Bitmap.createBitmap(bMap, 0, 0,bMap.getWidth(),bMap.getHeight(), mat, true);
windSock.setImageBitmap(bMapRotate);

现在这似乎完美地工作了,跑道方向和风向之间的差异是 90 的倍数,但否则风向袋的缩放会受到影响?!?!?!这是怎么回事!

编辑#2:好的,对于那些将来的人,由于这些链接,我现在可以使用它了: Rotate image without shrinking on Android http://learnandroideasily.blogspot.com.au/2013/07/imageview-animation-in-android.html

实现代码:

RotateAnimation rAnimClockWise = new RotateAnimation(0.0f, relativeWind, 1, 0.5f, 1, 0.5f);
rAnimClockWise.setFillAfter(true);
rAnimClockWise.setInterpolator(new LinearInterpolator());
rAnimClockWise.setDuration(0);
windSock.startAnimation(rAnimClockWise);

我知道这最终会很长,但我相信它会对将来的人有所帮助!!

最佳答案

请参阅我在原始问题中所做的编辑以获得答案!

关于android - 同心旋转叠加图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20030514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com