在android中旋转图像

问题描述:

我想要以顺时针和反时钟两种方式旋转图像。 我曾尝试但不是旋转图像的方式, 所以PLZ给我解决我的问题,如果你知道..在android中旋转图像

在此先感谢................. ///

+0

看到这里回答:http://*.com/questions/13099652/custom-rotating-of-an-image-view – AYBABTU 2015-05-04 14:55:15

Matrix mat = new Matrix(); 
mat.preRotate(angle);///in degree 
Bitmap mBitmap = Bitmap.createBitmap(originalBmp, 0, 0, modWidth, modHeight, mat, true); 
     //originalBmp -> original img as bitmap 
     //modHeight -> new height 
     //modWidth -> new width 

使用上面的代码。

+0

你的答案不是这个问题的解决方案。它只是指导如何使用矩阵旋转图像。 – secretlm 2012-04-22 08:47:43

这里是基本代码加载一个位图和旋转向左或向右:

// Load a bitmap from a drawable, make sure this drawable exists in your project 
Bitmap sprite = BitmapFactory.decodeResource(this.getResources(), 
     R.drawable.ic_launcher); 

// Create two matrices that will be used to rotate the bitmap 
Matrix rotateRight = new Matrix(); 
Matrix rotateLeft = new Matrix(); 

// Set the matrices with the desired rotation 90 or -90 degrees 
rotateRight.preRotate(90); 
rotateLeft.preRotate(-90); 

// Create bitmaps based on the loaded bitmap 'sprite' and apply one of 
// the rotation matrices 
Bitmap rSprite = Bitmap.createBitmap(sprite, 0, 0, 
     sprite.getWidth(), sprite.getHeight(), rotateRight, true); 
Bitmap lSprite = Bitmap.createBitmap(sprite, 0, 0, 
     sprite.getWidth(), sprite.getHeight(), rotateLeft, true); 

现在去,并用rSprite和lSprite。

这里是实际绘制位图到屏幕全样本:

public class MainActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(new drawView(this)); 
    } 

    private class drawView extends View{ 
     public drawView(Context context){ 
      super(context); 
     } 

     @Override 
     protected void onDraw(Canvas canvas) { 
      super.onDraw(canvas); 

      // Load a bitmap from a drawable, make sure this drawable exists in your project 
      Bitmap sprite = BitmapFactory.decodeResource(this.getResources(), 
        R.drawable.ic_launcher); 

      // Create two matrices that will be used to rotate the bitmap 
      Matrix rotateRight = new Matrix(); 
      Matrix rotateLeft = new Matrix(); 

      // Set the matrices with the desired rotation 90 or -90 degrees 
      rotateRight.preRotate(90); 
      rotateLeft.preRotate(-90); 

      // Create bitmaps based on the loaded bitmap 'sprite' and apply one of 
      // the rotation matrices 
      Bitmap rSprite = Bitmap.createBitmap(sprite, 0, 0, 
        sprite.getWidth(), sprite.getHeight(), rotateRight, true); 
      Bitmap lSprite = Bitmap.createBitmap(sprite, 0, 0, 
        sprite.getWidth(), sprite.getHeight(), rotateLeft, true); 

      //Draw the first unrotated sprite at the top left of the screen 
      canvas.drawBitmap(sprite, 0, 0, null); 

      //Draw the rotated right sprite on the 2nd row 
      canvas.drawBitmap(rSprite, 0, sprite.getHeight() + 5, null); 

      //Draw the rotated left sprite on the 3rd row 
      canvas.drawBitmap(lSprite, 0, sprite.getHeight() * 2 + 5, null); 
     } 
    } 
} 

使用下面

public class Rotateimage extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_gallery); 
      // or just load a resource from the res/drawable directory: 
      Bitmap myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.flo); 

      // find the width and height of the screen: 
      Display d = getWindowManager().getDefaultDisplay(); 
      int x = d.getWidth(); 
      int y = d.getHeight(); 

      // get a reference to the ImageView component that will display the image: 
      ImageView img1 = (ImageView)findViewById(R.id.imageView1); 

      // scale it to fit the screen, x and y swapped because my image is wider than it is tall 
      Bitmap scaledBitmap = Bitmap.createScaledBitmap(myBitmap, y, x, true); 

      // create a matrix object 
      Matrix matrix = new Matrix(); 

      matrix.postRotate(45, 90, 180); 

      // create a new bitmap from the original using the matrix to transform the result 
      Bitmap rotatedBitmap = Bitmap.createBitmap(scaledBitmap , 0, 0, scaledBitmap .getWidth(), scaledBitmap .getHeight(), matrix, true); 
       // display the rotated bitmap 
      img1.setImageBitmap(rotatedBitmap); 
}} 

使用此代码希望这将是有帮助的代码... 你必须有写这个方法做旋转运算

public void paintFromCenter(float angle, Canvas c) { 
    Bitmap b = sprite; 
    Bitmap h = b; 
    Matrix matrix = new Matrix(); 
    matrix.postRotate(angle, h.getWidth()/2, h.getHeight()); 
    matrix.postTranslate(getX(), getY()); 
    // canvas.drawBitmap(bitmap, matrix, new Paint()); 
    Bitmap bmp2 = Bitmap.createBitmap(h, 0, 0, frameWidth, frameHeight, 
      matrix, true); 
    c.drawBitmap(h, matrix, null); 
} 

在你的程序中你必须写onTo uchEvent()方法

public boolean onTouchEvent(MotionEvent event) { 
    int action = event.getAction(); 
    if (action == MotionEvent.ACTION_DOWN) { 
     edX = (int) event.getX(); 
     edY = (int) event.getY(); 
     if ((edX > objectSprite.getX() 
       && edX < objectSprite.getX() + objectSprite.getWidth() 
       && edY > objectSprite.getY() && edY < objectSprite.getY() 
       + objectSprite.getHeight())) { 
     } 
    } 
    if (action == MotionEvent.ACTION_MOVE) { 
     emX = (int) event.getX(); 
     emY = (int) event.getY(); 
     if (edX < emX && angle <= 90) { 
      update(canvas); 
      CHAR = 'D'; 
     } else if (edX > emX && angle > 0) { 
      update(canvas); 
      CHAR = 'U'; 
     } 
     if (edY < emY && angle <= 90) { 
      update(canvas); 
      CHAR = 'L'; 
     } else if (edY > emY && angle >= 0) { 
      update(canvas); 
      CHAR = 'R'; 
     } 
    } 
    return true; 
} 

,你必须创建update()方法来旋转你的触摸动作角角度可以定义为您的选择。起初,我有申报

int angle=1; 
public void update(Canvas canvas) { 
    switch (CHAR) { 
    case 'D': 
     angle += 1; 
     break; 
    case 'U': 
     angle -= 1; 

     break; 
    case 'R': 
     angle -= 1; 
     break; 
    case 'L': 
     angle += 1; 
     break; 
    } 

} 

现在你要画在画你的对象()方法,这样

public void draw() { 
    objectSprite.paintFromCenter(angle, canvas); 
     } 

你只需要添加这个简单的代码到您的按钮

  imVCature_pic.setRotation(imVCature_pic.getRotation() + 90);