2011-03-22 23 views
7

Chcę obracać obraz w obu kierunkach, zgodnie z ruchem wskazówek zegara, jak również z zegarem. Próbowałem, ale nie obracałem obrazu w obie strony, , więc plz daj mi rozwiązanie mojego problemu, jeśli wiesz ..Obracanie obrazu w Androidzie

Dzięki z góry ................. ///

+0

Patrz odpowiedź tutaj : http://stackoverflow.com/questions/13099652/custom-rotating-of-an-image-view – AYBABTU

Odpowiedz

-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 

użyj powyższego kodu.

+0

Twoja odpowiedź nie jest rozwiązaniem tego problemu. Po prostu pokazuje jak obrócić obraz za pomocą Matrycy. – secretlm

4

Oto kod bazowy załadować bitmapę i obrócić go w lewo lub w prawo:

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

Teraz idź i używać rSprite i lSprite.

Oto pełna próbka że faktycznie wyciąga bitmapy na ekranie:

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

użyć kodu poniżej

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

użyć tego kodu nadzieję, że będzie pomocny ... trzeba mieć napisać tę metodę, aby wykonać operację obracania

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

w twoim programie musisz napisać onTo uchEvent() metoda

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

i trzeba stworzyć metodę, aby obrócić o kąt kątem zdarzeń dotykowego można zdefiniować jako wyboru update(). Początkowo mam zadeklarować

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

} 

Teraz trzeba wyciągnąć swój przedmiot w losowaniu() metoda

jak ten

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

Wystarczy dodać ten prosty kod do przycisku

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