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

时间:2011-01-04 11:45:17

标签: android

我正在使用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());
}

}

3 个答案:

答案 0 :(得分:1)

您不旋转图像,旋转画布。使用setBounds()完成缩放。请参阅this question以获得一些帮助。

答案 1 :(得分:0)

您正在旋转矩形位图。执行此操作时,必须更改画布大小才能容纳完整图像。您需要在旋转后手动裁剪以获得所需的功能。

答案 2 :(得分:0)

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

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);