Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>I only played once with the draw canvas functions and then switched all to opengl but the logic stays the same (I think).</p> <p>first issue you'll want to keep a ratio constant form one phone to the other. in my app I add a " black band" effect on each side. in onSurfaceChanged, you'll want to calculate a ratio, this ratio will allow you to determine how much space you have to remove on each side to keep a consistent aspect to your drawing. this will give you a delta X or Y to apply to all your draws the following code is something I adapted from the ogl version so it might need to be tweeked a bit</p> <pre><code>@Override public void onSurfaceChanged(int w, int h){ float ratioPhysicScreen = nativeScreenResoltionW/nativeScreenResoltionH; float ratioWanted = GameView.getWidth()/GameView.getHeight(); if(ratioWanted&gt;ratioPhysicScreen){ newHeight = (int) (w*GameView.getHeight()/GameView.getWidth()); newWidth = w; deltaY = (int) ((h-newHeight)/2); deltaX = 0; }else{ newWidth = (int) (h/GameView.getHeight()*GameView.getWidth()); newHeight = h; deltaX = (int) ((w-newWidth)/2); deltaY = 0; } </code></pre> <p>then you'll also want to be able to draw your pictures on the canvas by knowing there size as well on the canvas than there real size and that where the difference in between image.getWidth() (actual size of the picture) and a image.getScaledWidth(canvas) which give you the size of the element in dp which means how big it will appear on the screen) is important. look at the example underneath. </p> <pre><code>public class MainMenuView extends PixelRainView{ private Bitmap bmpPlay = null; private float playLeft = 0; private float playRight = 0; private float playBottom = 0; private float playTop = 0; public MainMenuView(Context context, AttributeSet attrs) { super(context,attrs); } @Override public void unLoadBitmaps() { super.unLoadBitmaps(); if(bmpPlay != null){ bmpPlay.recycle(); bmpPlay = null; } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if(bmpPlay == null){ bmpPlay = getBitmapFromRessourceID(R.drawable.play_bt); playLeft = (this.getWidth()-bmpPlay.getScaledWidth(canvas))/2; playRight = playLeft + bmpPlay.getScaledWidth(canvas); playTop = (this.getHeight()-bmpPlay.getScaledHeight(canvas))/2; playBottom = playTop+bmpPlay.getScaledHeight(canvas); } canvas.drawBitmap(bmpPlay,playLeft, playTop, null); } } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); } @Override public boolean onTouchEvent(MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN){ float x = event.getX(); float y = event.getY(); //test central button if(x&gt;playLeft &amp;&amp; x&lt;playRight &amp;&amp; y&lt;playBottom &amp;&amp; y&gt;playTop){ Log.e("jason", "touched play"); PixelRainView.changeView(R.layout.composedlayoutgroup); } return super.onTouchEvent(event); } } </code></pre> <p>This should solve all your ratio problem cross plateforms I would suggest opengl because it will simplify your need for keeping a constant aspect but I guess its not an option ^^</p> <p>Hope this helps you enough</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload