Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Flipping Drawable on an X or Y axis

This seems like a dumb question, but I couldn't see any way to do this using methods in the Drawable class. Then I thought maybe I'd have to flip the Canvas in some way.. still couldn't find a suitable method.

I just need to "flip" a Drawable on it's y-axis.. the center y preferably. How can I do this?

like image 291
Snailer Avatar asked Feb 25 '23 12:02

Snailer


1 Answers

From a 10k ft level, you want to create a new bitmap and specify a transform matrix to flip the bitmap.

This may be a bit overkill, but here is a small sample application that illustrates how to do this. As written, the transform matrix prescale of (-1.0f, 1.0f) flips the image in the x direction, a prescale of (1.0f, -1.0f) would flip it in the y direction.

public class flip extends Activity{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //Set view to our created view
        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 the jellyfish drawable
            Bitmap sprite = BitmapFactory.decodeResource(this.getResources(), R.drawable.jellyfish);

            //Create a matrix to be used to transform the bitmap
            Matrix mirrorMatrix = new Matrix();

            //Set the matrix to mirror the image in the x direction
            mirrorMatrix.preScale(-1.0f, 1.0f);

            //Create a flipped sprite using the transform matrix and the original sprite
            Bitmap fSprite = Bitmap.createBitmap(sprite, 0, 0, sprite.getWidth(), sprite.getHeight(), mirrorMatrix, false);

            //Draw the first sprite
            canvas.drawBitmap(sprite, 0, 0, null);

            //Draw the second sprite 5 pixels to the right of the 1st sprite
            canvas.drawBitmap(fSprite, sprite.getWidth() + 5, 0, null);
        }
    }
}
like image 167
Error 454 Avatar answered Mar 02 '23 22:03

Error 454