只旋转一次图像。在菜单项列表中多次选择旋转选项时如何再次旋转?
rotates image just once. how to rotate again when selected rotate option multiple times in menu item list?
public void Rotate(View v)
{
ImageView img = (ImageView)findViewById(R.id.imageView1);
Bitmap bmp = BitmapFactory.decodeResource(getResources(),arr[current]);
// Getting width & height of the given image.
int w = bmp.getWidth();
int h = bmp.getHeight();
// Setting pre rotate to 90
Matrix mtx = new Matrix();
mtx.preRotate(90);
// Rotating Bitmap
Bitmap rotatedBMP = Bitmap.createBitmap(bmp, 0, 0, w, h, mtx, true);
BitmapDrawable bmd = new BitmapDrawable(rotatedBMP);
img.setImageBitmap(rotatedBMP);
}
当我 select 旋转菜单中的选项时,它只会在第一次旋转时再次 select 它,图像不会旋转。任何解决方案
我只是用了简单的数学。
public void Rotate_r(View v)
{
rcount++;
if(rdgr==360) rdgr=90;
else rdgr=rdgr+90;
if(rcount==1){
ldgr=rdgr;
rcount--;
}
ImageView img = (ImageView)findViewById(iv);
Bitmap bmp =BitmapFactory.decodeResource(getResources(),arr[current]);
// Getting width & height of the given image.
int w = bmp.getWidth();
int h = bmp.getHeight();
// Setting pre rotate to 90
Matrix mtx = new Matrix();
mtx.preRotate(rdgr);
// Rotating Bitmap
Bitmap rotatedBMP = Bitmap.createBitmap(bmp, 0, 0, w, h, mtx, true);
@SuppressWarnings("deprecation")
BitmapDrawable bmd = new BitmapDrawable(rotatedBMP);
img.setImageBitmap(rotatedBMP);
}
我使用了一个计数器rcount
,如果图像向右旋转它会简单地递增,如果它向左旋转则递减。变量 rdgr
也被初始化为 90 作为 rdgr=90
并且当 rcount
递增时它向 rdgr
添加 90 并绘制图像。
实际上,它每次都会将您的位图旋转 90 度。问题是您总是从资源中获得相同(未旋转)的位图,而不是已经从您的 ImageView 中旋转。
而不是:
BitmapFactory.decodeResource(getResources(),arr[current]);
试试这个:
Bitmap bmp = ((BitmapDrawable)img.getDrawable()).getBitmap();
这个解决方案也更好,因为您不需要每次都从资源中解码位图。
public void Rotate(View v)
{
ImageView img = (ImageView)findViewById(R.id.imageView1);
Bitmap bmp = BitmapFactory.decodeResource(getResources(),arr[current]);
// Getting width & height of the given image.
int w = bmp.getWidth();
int h = bmp.getHeight();
// Setting pre rotate to 90
Matrix mtx = new Matrix();
mtx.preRotate(90);
// Rotating Bitmap
Bitmap rotatedBMP = Bitmap.createBitmap(bmp, 0, 0, w, h, mtx, true);
BitmapDrawable bmd = new BitmapDrawable(rotatedBMP);
img.setImageBitmap(rotatedBMP);
}
当我 select 旋转菜单中的选项时,它只会在第一次旋转时再次 select 它,图像不会旋转。任何解决方案
我只是用了简单的数学。
public void Rotate_r(View v)
{
rcount++;
if(rdgr==360) rdgr=90;
else rdgr=rdgr+90;
if(rcount==1){
ldgr=rdgr;
rcount--;
}
ImageView img = (ImageView)findViewById(iv);
Bitmap bmp =BitmapFactory.decodeResource(getResources(),arr[current]);
// Getting width & height of the given image.
int w = bmp.getWidth();
int h = bmp.getHeight();
// Setting pre rotate to 90
Matrix mtx = new Matrix();
mtx.preRotate(rdgr);
// Rotating Bitmap
Bitmap rotatedBMP = Bitmap.createBitmap(bmp, 0, 0, w, h, mtx, true);
@SuppressWarnings("deprecation")
BitmapDrawable bmd = new BitmapDrawable(rotatedBMP);
img.setImageBitmap(rotatedBMP);
}
我使用了一个计数器rcount
,如果图像向右旋转它会简单地递增,如果它向左旋转则递减。变量 rdgr
也被初始化为 90 作为 rdgr=90
并且当 rcount
递增时它向 rdgr
添加 90 并绘制图像。
实际上,它每次都会将您的位图旋转 90 度。问题是您总是从资源中获得相同(未旋转)的位图,而不是已经从您的 ImageView 中旋转。
而不是:
BitmapFactory.decodeResource(getResources(),arr[current]);
试试这个:
Bitmap bmp = ((BitmapDrawable)img.getDrawable()).getBitmap();
这个解决方案也更好,因为您不需要每次都从资源中解码位图。