#17
Te dejo este pequeño código:
// Quitamos el título de la ventana y mostramos la aplicación en pantalla completa
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
// Comprobamos si la activity está definida como portrait o landscape
boolean isLandscape = getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
// creamos un framebuffer con resolución 800x480 o viceversa que será nuestra resolución de referencia (no la real)
int frameBufferWidth = isLandscape ? 800 : 480;
int frameBufferHeight = isLandscape ? 480 : 800;
Bitmap frameBuffer = Bitmap.createBitmap(frameBufferWidth, frameBufferHeight, Config.RGB_565);
// Obtenemos los factores de escala en función de la resolución real de la pantalla
float scaleX = (float) frameBufferWidth / getWindowManager().getDefaultDisplay().getWidth();
float scaleY = (float) frameBufferHeight / getWindowManager().getDefaultDisplay().getHeight();
Tendrías que generar las imágenes con resolución 800x480 y dibujarlas en el framebuffer, después el framebuffer pintarlo en el canvas de un SurfaceView (escala el framebuffer automáticamente). Eso lo puedes hacer así (En una clase que extienda de SurfaceView):
SurfaceHolder holder = getHolder();
Rect dstRect = new Rect();
Canvas canvas = holder.lockCanvas();
canvas.getClipBounds(dstRect);
canvas.drawBitmap(framebuffer, null, dstRect, null);
holder.unlockCanvasAndPost(canvas);
los factores de escala los necesitas para después aplicarlos a los touchEvents, así que si tu dispositivo tiene resolución de 1280x600, al pulsar en la pantalla en el punto (800, 400) se correspondería con el punto (800scaleX, 400scaleY) de tu imagen de 800x480.
Espero que te haya servido.