繁体   English   中英

在android帮助中翻转位图?

[英]Flipping a bitmap in android help?

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

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

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

我希望箭头位于右下角。

由于您使用的是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);

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

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



        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM