2011-03-22 58 views
7

Tôi muốn xoay hình ảnh theo cả hai chiều Đồng hồ cũng như Đồng hồ chống khôn ngoan. Tôi đã thử nhưng không xoay hình ảnh cả hai chiều, vì vậy plz cung cấp cho tôi giải pháp cho vấn đề của tôi nếu bạn biết ..Xoay hình ảnh trong android

Cảm ơn trước ................. ///

+0

xem câu trả lời ở đây : http://stackoverflow.com/questions/13099652/custom-rotating-of-an-image-view – AYBABTU

Trả lời

-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 

sử dụng mã ở trên.

+0

Câu trả lời của bạn không phải là giải pháp cho vấn đề này. Nó chỉ hướng dẫn cách xoay ảnh bằng Matrix. – secretlm

4

Đây là mã cơ sở để tải một bitmap và xoay nó sang trái hoặc phải:

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

Bây giờ đi và sử dụng rSprite và lSprite.

Đây là một mẫu đầy đủ mà thực sự thu hút các bitmap để màn hình:

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

Sử dụng mã dưới đây

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

sử dụng mã này hy vọng nó sẽ rất hữu ích ... bạn phải có để viết phương thức này để thực hiện xoay vòng

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

trong chương trình của bạn, bạn phải viết onTo Phương thức 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; 
} 

và bạn phải tạo phương thức update() để xoay góc trên góc sự kiện cảm ứng có thể được xác định là lựa chọn của bạn. Ban đầu tôi có tuyên bố

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

} 

Bây giờ bạn phải vẽ đối tượng của bạn trong bốc thăm() phương pháp như thế này

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

Bạn chỉ cần thêm mã đơn giản này để nút của bạn

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