Увеличение холста частично

Я хочу немного увеличить размер холста, поскольку кнопка лотка для письма будет фиксирована, а плата будет масштабироваться,
Частичное кодирование упоминается ниже, и экран полностью рисуется в холсте, который можно рассматривать как упоминание внизу. Пожалуйста, помогите и спасибо за беспокойство.

public class BoardView extends SurfaceView implements SurfaceHolder.Callback { class DrawingThread extends Thread implements OnTouchListener { public DrawingThread(SurfaceHolder holder, Handler handler) { mSurfaceHolder = holder; public void setRunning(boolean b) { mRun = b; } @Override public void run() { while (mRun) { Canvas c = null; try { c = mSurfaceHolder.lockCanvas(null); synchronized (mSurfaceHolder) { // System.gc(); // c.scale(canvasScaleX, canvasScaleY); // c.save(); // c.translate(canvasTranslateX, canvasTranslateY); doDraw(c); } updateGame(); } finally { if (c != null) { mSurfaceHolder.unlockCanvasAndPost(c); } } } private void doDraw(Canvas canvas) { if (ge == null) return; Rect bRect = new Rect(0, 0, dims.getTotalWidth(), dims.getScoreHeight() + dims.getBoardheight()); Drawable drawable = getResources().getDrawable(R.drawable.board); drawable.setBounds(bRect); drawable.draw(canvas); Rect tRect = new Rect(0, dims.getScoreHeight() + dims.getBoardheight(), dims.getTotalWidth(), dims.getTotalHeight()); canvas.drawRect(tRect, fillTrayPaint); int topHeight = dims.getScoreHeight() + dims.getBoardheight(); int bottom = (dims.getTotalHeight() + 5) - (dims.getTotalWidth() / Tray.TRAY_SIZE); Rect rect = new Rect(0, topHeight, dims.getTotalWidth(), bottom - 7); Drawable drawableTray = getResources() .getDrawable(R.drawable.strip); drawableTray.setBounds(rect); drawableTray.draw(canvas); drawTray(canvas); drawBoard(canvas); // drawScore(canvas); drawMovingTile(canvas); } public BoardView(Context context, AttributeSet attrs) { super(context, attrs); SurfaceHolder holder = getHolder(); holder.addCallback(this); // endTurn=(ImageButton)findViewById(R.id.endturn_button_horizontal); thread = new DrawingThread(holder, handler); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceCreated(SurfaceHolder holder) { final float scale1 = getResources().getDisplayMetrics().density; defaultFontSize = (int) (MIN_FONT_DIPS * scale1 + 0.5f); thread.setDefaultFontSize(defaultFontSize); dimensions = calculateDimensions(getWidth(), getHeight()); thread.setDimensions(dimensions); thread.setRunning(true); // if (thread != null && !thread.isAlive()) thread.start(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { boolean retry = true; thread.setRunning(false); while (retry) { try { thread.join(); retry = false; } catch (InterruptedException e) { } } } 

Экран полностью втягивается в холст, который упоминается ниже:

Мы можем просто сделать это с помощью canvas.clipRect (rectangle), и в этот момент мы должны сохранить холст canvas.save () и после canvas.clipRect (rectangle) call canvas.restore ().

Попробуйте что-то вроде этого:

  • Создайте растровое изображение с холста, на который вы хотите увеличить масштаб.
  • При рендеринге этого растрового изображения на экран вы можете изменить скрипт (который будет «масштабировать» в растровое изображение).

Надеюсь, это поможет.

Я думаю, вам нужно превратить свою игровую панель в экранное растровое изображение, а затем нарисовать это растровое изображение на холсте с помощью Matrix , чтобы вы могли изменить свое положение и масштаб.

Я считаю, что самый простой способ сделать это – использовать метод Canvas#scale(float scale, int pivotx, int pivoty) . Он существенно увеличивает весь холст, что на самом деле является масштабированием с точки зрения 2D.

canvas.scale(2.0f, getWidth()/2, getHeight()/2) масштабирует изображение на 2 от центра. canvas.scale(1.0f, getWidth()/2, getHeight()/2) сократит его.

Я никогда не пробовал это в этом контексте, поэтому, если вы решите попробовать, пожалуйста, сообщите о результатах! Я хотел бы узнать для справок в будущем.