在X轴或Y轴上翻转Drawable

时间:2010-12-29 23:54:54

标签: java android drawable

这个似乎就像一个愚蠢的问题,但是我无法使用Drawable类中的方法看到任何方法。然后我想也许我不得不以某种方式翻转画布......仍然找不到合适的方法。

我只需要在其y轴上“翻转”Drawable ..中心y最好。我怎么能这样做?

1 个答案:

答案 0 :(得分:8)

从10k英尺的高度,你想要创建一个新的位图并指定一个转换矩阵来翻转位图。

这可能有点矫枉过正,但这是一个小样本应用程序,说明了如何执行此操作。如上所述,变换矩阵预分频(-1.0f,1.0f)在x方向上翻转图像,预分频(1.0f,-1.0f)将在y方向上翻转。

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