在android中旋转图像时调整图像大小

在android中旋转图像时调整图像大小,android,Android,我正在和android项目合作,在这个项目中,我想随着触摸旋转图像到某个固定的轴心点。我已经完成了所有这些事情,但我面临一个问题:当我试图旋转图像时,图像位图的大小被调整了。我不知道为什么会这样。如果有人有,那么请给我一个想法来帮助克服这个问题 我的代码: package com.demo.rotation; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFa

我正在和android项目合作,在这个项目中,我想随着触摸旋转图像到某个固定的轴心点。我已经完成了所有这些事情,但我面临一个问题:当我试图旋转图像时,图像位图的大小被调整了。我不知道为什么会这样。如果有人有,那么请给我一个想法来帮助克服这个问题

我的代码:

package com.demo.rotation;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;

public class temp  extends Activity{

ImageView img1;
float startX;
float startX2 ;

Bitmap source;
Bitmap bitmap1 = null;

double r;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    img1 = (ImageView) findViewById(R.id.img1);
    img1.setOnTouchListener(img1TouchListener);

    bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.orsl_circle_transparent);
}

private OnTouchListener img1TouchListener = new OnTouchListener()
{
    @Override
    public boolean onTouch(View v, MotionEvent event)
    {
        switch (event.getAction())
        {
            case MotionEvent.ACTION_MOVE:
                Log.d("MOVE", "1");
                if(source!=null)
                 r = Math.atan2(event.getX() - source.getWidth(),
                        (source.getHeight() / 2) - event.getY());

                Log.i("startX" + event.getX(), "startY" + event.getY());
                     rotate(r,bitmap1, img1);
                     img1.setScaleType(ScaleType.CENTER);

                break;

            case MotionEvent.ACTION_DOWN:

                break;

            case MotionEvent.ACTION_UP:
                break;

            default :
                break;
        }
        return true;
    }
};

private void rotate(double r , Bitmap currentBitmap  ,ImageView imageView )
{
    int rotation = (int) Math.toDegrees(r);
    Matrix matrix = new Matrix();

    matrix.setRotate(rotation, currentBitmap.getWidth()/2, currentBitmap.getHeight()/2);
    source = Bitmap.createBitmap(currentBitmap, 0, 0, currentBitmap.getWidth(), currentBitmap.getHeight(), matrix, false);
    imageView.setImageBitmap(source);
    Log.i("HIGHT OF CURRENT BITMAP", ""+source.getHeight());
}

}

您正在旋转一个矩形位图。这样做时,画布大小必须更改以适应完整图像。旋转后需要手动裁剪以获得所需的功能。

如果不旋转图像,则需要旋转画布。缩放是使用setBounds()完成的。有关帮助,请参阅。

问题与将位图应用到ImageView有关。首先创建一个BitmapDrawable,然后应用。如果不这样做,就会出现一些缩放问题。我不知道为什么,也许其他人可以提供见解。我在创建compass应用程序时遇到了同样的问题,在搜索时遇到了这个问题,所以我想我会用有效的修复程序进行更新

int rotation = (int) Math.toDegrees(r);
Matrix matrix = new Matrix();
matrix.postRotate(rotation);

source = Bitmap.createBitmap(currentBitmap, 0, 0, currentBitmap.getWidth(), currentBitmap.getHeight(), matrix, false);
*BitmapDrawable newBmd = new BitmapDrawable(source);

imageView.setImageDrawable(newBmd);*
imageView.setScaleType(ScaleType.CENTER);