Rotate image in android

前端 未结 5 965
自闭症患者
自闭症患者 2020-12-19 05:48

I want rotate image in both the ways Clockwise as well as Anti clock wise. I had try but not rotate image both the way, so plz give me solution for my problem if you know..

相关标签:
5条回答
  • 2020-12-19 06:13
    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
    

    use the above code.

    0 讨论(0)
  • 2020-12-19 06:15

    Use the code below

    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 讨论(0)
  • 2020-12-19 06:15

    Here is the base code to load a bitmap and rotate it left or right:

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

    Now go and use rSprite and lSprite.

    Here is a full sample that actually draws the bitmaps to screen:

    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);
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-19 06:35

    use this code hope it will be helpful... you must have to write this method to do rotate operation

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

    in your program you have to write onTouchEvent() method

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

    and you have to create update() method to rotate your angle on touch event angle can be define as your choice. Initially i have declare

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

    Now you have to draw your object in draw() method like this

    public void draw() {
      objectSprite.paintFromCenter(angle, canvas);  
            }
    
    0 讨论(0)
  • 2020-12-19 06:35

    You just add this simple code to your button

                imVCature_pic.setRotation(imVCature_pic.getRotation() + 90);
    
    0 讨论(0)
提交回复
热议问题