在android帮助中翻转位图?

时间:2011-10-14 23:29:58

标签: android canvas sprite flip

我想为我的游戏节省内存,我想问你,因为我找不到任何东西,上次我在这里问了些什么,我得到了一个很好的答案。我可以在eclipse中翻转位图,这样我可以节省精灵的内存吗?我发现的所有教程都是关于旋转而不是翻转。翻转位图的教程仅适用于开放式Gl或类似的东西。请帮我。 我一直在寻找谷歌的教程,但我在第5页放弃了。任何人都可以帮助我吗? 有没有人有一个很好的教程? 顺便说一句,我正在使用画布。 谢谢!

每当我尝试运行它时,我都会收到一个力量......你可以搞清楚吗?这是我的代码:

       Matrix flipHorizontalMatrix = new Matrix();
       flipHorizontalMatrix.setScale(-1,1);
       flipHorizontalMatrix.postTranslate(0, canvas.getHeight()-arrowL.getHeight());
       canvas.drawBitmap(arrowL, flipHorizontalMatrix, null);

我希望箭头位于右下角。

2 个答案:

答案 0 :(得分:19)

由于您使用的是Canvas,为什么不尝试使用drawBitmap (Bitmap bitmap, Matrix matrix, Paint paint)方法。使用翻转x坐标的Matrix

您可以这样做:

Matrix flipHorizontalMatrix = new Matrix();
flipHorizontalMatrix.setScale(-1,1);
flipHorizontalMatrix.postTranslate(myBitmap.getWidth(),0);

canvas.drawBitmap(myBitmap, flipHorizontalMatrix, myPaint);

答案 1 :(得分:0)

谢谢,请查看此代码,它可能对您旋转位图图像很有用。 这里我有一个水族馆鱼的例子,它应该从左向右移动并翻转并继续从右向左移动而反之亦然。    这是给你的代码..

           protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    fish = BitmapFactory.decodeResource(getResources(), R.drawable.fish);
            v = new OurView(this); 

public class OurView扩展了SurfaceView实现的Runnable {

    Thread t = null;
    SurfaceHolder holder;
    boolean isitOK = false;
    String Flag = "right";
    Bitmap rotatedBitmap=null;
    Matrix rotateRight = new Matrix();
    Matrix rotateLeft = new Matrix();
    Bitmap rSprite=null;
    Bitmap lSprite=null;
    public OurView(Context context) {
        super(context);
        holder = getHolder();
        rotateLeft.setScale(-1, 1);


         rSprite = Bitmap.createBitmap(fish, 0, 0,
                fish.getWidth(), fish.getHeight(), rotateRight, true);
         lSprite = Bitmap.createBitmap(fish, 0, 0,
                fish.getWidth(), fish.getHeight(), rotateLeft, true);
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub

        while (isitOK == true) {
            if (!holder.getSurface().isValid()) {
                continue;
            }
            Canvas canvas = holder.lockCanvas();

            canvas.drawBitmap(bg, 0, 0, null);
            if(Flag == "right")
            canvas.drawBitmap(lSprite, x, y, null);

            if(Flag == "left")
            canvas.drawBitmap(fish, x, y, null);    

                if (Flag == "right" && x <= 60) {

                    x++;
                    if (x == 60) {

                        Flag = "left";
                    //  canvas.drawBitmap(rSprite, 0, fish.getWidth(), null);
                        canvas.drawBitmap(fish, x, y, null);    
                    }
                }               
                if (Flag == "left" && x >= 0) {
                    x--;
                    if (x == 0) {
                    Flag = "right";

                    canvas.drawBitmap(fish, x, y, null);
                    }
                }




            holder.unlockCanvasAndPost(canvas);



        }
    }