gpt4 book ai didi

android - 更新 : Rotate a bitmap that exceeds screen size

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

我的图像更大,但只有一部分必须显示在屏幕上。我已经这样做了。我的问题是,图像必须用手指旋转。下面的代码在小图像上可以正常工作。但是在我的图像上它有一个错误的行为,上下重新定位图像并奇怪地旋转它。如何让我的图像正常旋转?,作为一个小图像。然后我必须能够触摸到颜色。我得到一个答案here , 但我仍然需要努力。但首先,请告诉我如何解决旋转问题,如果您对第二个问题有想法,我想听听他们的想法。

这是图片:

this is the image

这是它在屏幕上的显示方式:

this is how it should appear on the screen

XML 布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<ImageView android:id="@+id/imag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/roata"
android:layout_alignParentBottom="true"
android:layout_marginBottom="-200dp"
android:scaleType="center"/>
</RelativeLayout>

Java代码:

 public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

picture = (ImageView)findViewById(R.id.imag);
picture.setOnTouchListener(onTableTouched);
}

public android.view.View.OnTouchListener onTableTouched = new android.view.View.OnTouchListener()
{
public boolean onTouch(View v, MotionEvent evt)
{
double r = Math.atan2(evt.getX() - picture.getWidth() / 2, picture.getHeight() / 2 - evt.getY());
int rotation = (int) Math.toDegrees(r);


if (evt.getAction() == MotionEvent.ACTION_DOWN)
{
//
}

if (evt.getAction() == MotionEvent.ACTION_MOVE)
{
updateRotation(rotation);
}

if (evt.getAction() == MotionEvent.ACTION_UP)
{
//
}

return true;
}
};

private void updateRotation(double rot)
{
float newRot = new Float(rot);

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.roata);

Matrix matrix = new Matrix();
matrix.postRotate(newRot - 50);

Bitmap redrawnBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
picture.setImageBitmap(redrawnBitmap);
}

更新:因为我对 BitmapMatrix 无能为力,所以我尝试调整 RotateAnimtaion() 以获得尽可能相似的内容。我认为修改第二个参数和动画动态的持续时间,我们可以在不改变 Y 位置的情况下得到类似的结果。现在,问题是图像被裁剪了,我认为是因为 scaleType="center"。我将发布代码和屏幕截图。这可以改进吗?

Animation a = new RotateAnimation(0.0f, param,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
a.setFillEnabled(true);
a.setFillAfter(true);
a.setDuration(param);

picture.startAnimation(a);

enter image description here

最佳答案

只需将 Bitmap 全局声明为:

private WeakReference<Bitmap> bitmap;

和使用

bitmap =new WeakReference(BitmapFactory.decodeResource(getResources(), R.drawable.roata));

代替

bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.roata);

关于android - 更新 : Rotate a bitmap that exceeds screen size,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11290847/

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