[英]How to make painted canvas fit all screen sizes?
如何使畫布中繪制的圖像適用於所有屏幕尺寸? 我的代碼但它不起作用,繪制的游戲屏幕對於小屏幕來說太大而對於大屏幕來說太小,我已經嘗試了一切,但沒有任何效果,我希望畫布根據屏幕大小進行縮放
這是我得到的結果和想要的結果: https : //imgur.com/a/bSnGfov
這是我的游戲畫布代碼:
public class CanvasView extends View {
Me me;
public int width;
public int height;
public int fx,fy,zx,zy;
int[][]lines;
private Bitmap pme, wall,finish,redlock,redkey,bluelock,bluekey,greenlock,greenkey ,mBitmap,white,c1,c2,c3,c4,c5,c6,c7
,c8,c9,c10,c11,c12;
private Canvas mCanvas;
private Path mPath;
Context context;
private Paint p;
private int mx, my,character;private int dir;
private static final float TOLERANCE = 5;float bb;string bbb; int sz;int fz;
public CanvasView(Context c,int[][] l,Me m,int mxx,int myy,int chara) {
super(c);
lines=l;
mx = mxx;
my = myy;
context = c;
fx=6;fy=6;zx=0;zy=0;
me = m;
character=chara;
mPath = new Path();
p = new Paint();
p.setAntiAlias(true);
p.setColor(Color.BLACK);
p.setStyle(Paint.Style.STROKE);
p.setStrokeJoin(Paint.Join.ROUND);
p.setStrokeWidth(4f);
}
// override onSizeChanged
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
// your Canvas will draw onto the defined Bitmap
mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
}
// override onDraw
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int width = mx;
int height = my;float calc = getResources().getDisplayMetrics().density;
canvas.drawBitmap(pme,calc*( (me.GetCenterX() - 24)+zx),calc*( (me.GetCenterY() - 24)+zy), p);
int px = (me.GetCenterX() - 24) / 48;
int py = (me.GetCenterY() - 24) / 48;
for (int j = 0; j < fx; j++)
{
for (int i = 0; i < fy; i++)
if (i < height)
{
float tileX = ((j * 48) + zx) * calc;
float tileY = ((i * 48) + zy) * calc;
int type = lines[i][j];
switch (type)
{
case 1:
canvas.drawBitmap(wall, tileX,tileY, p);
break;
case 3:
canvas.drawBitmap(finish, tileX,tileY, p);
break;
case 4:
canvas.drawBitmap(bluelock, tileX,tileY, p);
break;
case 5:
canvas.drawBitmap(bluekey, tileX,tileY, p);
break;
case 6:
canvas.drawBitmap(redlock, tileX,tileY, p);
break;
case 7:
canvas.drawBitmap(redkey, tileX,tileY, p);
break;
case 8:
canvas.drawBitmap(greenlock, tileX,tileY, p);
break;
case 9:
canvas.drawBitmap(greenkey, tileX,tileY, p);
break;
}
}
}
}
for (int i = 0; i <= 6;i++ )
{
canvas.drawBitmap(white, 6*48* calc,i*48* calc, p);
}
for (int j = 0; j <= 5; j++)
{
canvas.drawBitmap(white, j*48* calc,6*48* calc, p);
}
}
}
您可以動態請求 Android 設備屏幕的尺寸。
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
獲取當前顯示的句柄 - 請注意,如果您從應用程序上下文調用,您將獲得物理屏幕的大小。 如果您從活動中調用,您將獲得應用程序窗口的當前大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.