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