簡體   English   中英

無法縮放背景圖片(Android Studio)

[英]Cannot scale background image (android studio)

public class GameView extends SurfaceView {
private Bitmap bmp;
private SurfaceHolder holder;
private GameLoopThread gameLoopThread;
private int x = 0;
private int y = 0;
private int xSpeed = 1;
public static int WIDTH = 800;
public static int HEIGHT = 450;
private Background bg;

public GameView(Context context) {
    super(context);
    gameLoopThread = new GameLoopThread(this);
    holder = getHolder();
    holder.addCallback(new SurfaceHolder.Callback() {

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            boolean retry = true;
            gameLoopThread.setRunning(false);
            while (retry) {
                try {
                    gameLoopThread.join();
                    retry = false;
                } catch (InterruptedException e) {
                }
            }
        }

        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            bg = new Background(BitmapFactory.decodeResource(getResources(), R.drawable.tuo));
            bg.setVector(-5);
            gameLoopThread.setRunning(true);
            gameLoopThread.start();
        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format,
                                   int width, int height) {
        }
    });
    bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic);
    // tutaj dorysować tło
}

@Override
protected void onDraw(Canvas canvas) {
    if (x == getWidth() - bmp.getWidth()) {
        xSpeed = -4;
    }
    if (x == 0) {
        xSpeed = 4;
    }
    x = x + xSpeed;
    final float scaleFactorX = getWidth()/WIDTH;
    final float scaleFactorY = getHeight()/HEIGHT;
    if(canvas!=null) {
        final int savedState = canvas.save();
        canvas.scale(scaleFactorX, scaleFactorY);
        bg.draw(canvas);
        canvas.restoreToCount(savedState);
    }
    canvas.drawBitmap(bmp, x , 10, null);

}


public void update()
{
    bg.update();
}


@Override
public boolean onTouchEvent(MotionEvent event) {
       x=x+10;
    return super.onTouchEvent(event);
}
}

我無法縮放圖像-它應該通過除以getWidth / WIDTH(以及高度)來進行縮放-WIDTH和HEIGHT是圖像尺寸。

它只是打印圖像的左上角,就像完全沒有縮放;(

如果有人有什么想法,我將很感激:)

您需要計算:

/*
    WIDTH/getWidth() = 4; // if ur image width = 200px
    scaleFactorX = 4*getwidth();
    scaleFactorY = 4*getHeight();
*/
final float scaleFactorX = WIDTH/getWidth();
final float scaleFactorY = HEIGHT/getHeight();
canvas.scale(scaleFactorX*getWidth(), scaleFactorY*getHeight());

我希望他們是成比例的...

1600 * 900或類似的東西... 400 * 225

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM