2011-03-22 28 views
7

Quiero rotar la imagen tanto en sentido horario como anti horario. He intentado pero no rotar la imagen en el camino, así que por favor dame la solución para mi problema si sabes ..Girar imagen en android

Gracias de antemano ................. ///

+0

Véase la respuesta aquí : http://stackoverflow.com/questions/13099652/custom-rotating-of-an-image-view – AYBABTU

Respuesta

-1
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 

utilice el código de arriba.

+0

Su respuesta no es una solución para este problema. Simplemente guía cómo rotar la imagen usando Matrix. – secretlm

4

Aquí es el código base para cargar un mapa de bits y gire a la izquierda o derecha:

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

Ahora Go y el uso rSprite y lSprite.

Aquí está una muestra completa que realmente atrae a los mapas de bits a la pantalla:

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

usar el siguiente código

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

uso este código espero que sea útil ... usted debe haber para escribir este método para hacer la operación de rotación

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

en su programa debe escribir enA uchEvent() método

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

y usted tiene que crear el método update() para girar el ángulo del ángulo de evento táctil se pueden definir como su elección. Inicialmente tengo declarar

método
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; 
    } 

} 

Ahora usted tiene que llamar su objeto en empate() como esto

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

Usted sólo tiene que añadir este código simple a su botón de

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