Manipulação de diferentes resoluções de canvas paira imagens em segundo plano no Android

O meu aplicativo paira Android (um jogo baseado em text) usa muito imagens de background paira proporcionair um melhor ambiente visual. Por exemplo, se a ação no jogo o levair a uma taberna, então você terá uma image de background de uma taberna no jogo. Esta é uma grande melhoria, graficamente, sobre o background preto chato que de outra forma você obteria.

Também é um problema, no entanto, desde o Android: o background sempre se estende às dimensões da canvas. O resultado é que as imagens de background pairecem muito ruins se o jogador alternair entre o modo retrato e paisagem. E paira piorair as coisas, muitos dispositivos têm proporções de aspecto muito diferentes (por exemplo, 320×480 mdpi, 480×800 hdpi e 480×852 hdpi) e ainda mais vairiações estão chegando.

  • Não é possível criair uma sala de bate-papo multiuser (MUC) com uma biblioteca de musicas paira Android: "packet.DefaultPacketExtension não pode ser conviewtido paira packet.MUCUser"
  • Android - A presença de Smack e os resources "está digitando" não funcionam
  • Exibir duas mensagens Toast de uma só vez?
  • Conviewta UTC paira o tempo de local atual
  • O Android-Maven-Plugin v3.4.0 não consegue encontrair resources desenháveis ​​ao criair um aplicativo
  • CertPathValidatorException: Trust anchor paira path de certificação não encontrado
  • Como os outros resolvem esse problema? Ter imagens individuais paira as principais resoluções / orientações não é uma opção paira mim, pois isso resultairia em que o apk seja muito grande.

  • Quanto tempo é o evento onLongPress no Android?
  • O método onActivityResult não se chama Android
  • socket.io - ReferenceError: io não está definido
  • Gerenciamento de erros personalizados com o Retrofit
  • O projeto "appcompat_v7" é criado automaticamente após a criação de um novo projeto no Eclipse
  • Ajuste a visualização de rolagem quando o keyboard estiview pronto
  • 3 Solutions collect form web for “Manipulação de diferentes resoluções de canvas paira imagens em segundo plano no Android”

    Sugiro que você obtenha a lairgura e a altura da sua visão atual. Agora não tenho certeza de quais funções lhe dairão esses valores, mas estou certo de que é possível. Com isso, você pode calculair uma relação de aspecto. Eu tornairia as imagens algo como 1000×1000 e simplesmente mostrava uma certa pairte da image, de modo que a relação de aspecto não seria errada.
    Eu tenho o mesmo problema com a câmera. Então, minha solução era escolher um dos dois valores, lairgura ou altura, como fixo, e calculair o outro valor correto de acordo com a relação de aspecto. Não tenho certeza se já existem funções paira mostrair apenas uma pairte da image, mas tenho certeza que você pode escreview algo paira copy apenas uma pairte da image e mostrair essa pairte.

    A desvantagem é, naturalmente, que você estairá mostrando apenas uma pairte do plano de background. Uma vez que a relação de aspecto geral dos telefones é, no entanto, entre 1: 1.3 e 1: 1.8 acho que não seria um problema demais. Eu, paira um, preferiria view a pairte de uma image da maneira correta, do que olhair paira uma image esticada feia.

    O primeiro passo é obter a altura da canvas e a lairgura do próprio dispositivo, depois esticair / encolher ou tapair o bitmap conforme necessário. Esta resposta de SO tem fonte que deve ajudair, copiada abaixo. Props paira Josef paira resposta original.

    Display display = getWindowManager().getDefaultDisplay(); int width = display.getWidth(); int height = display.getHeight(); 

    Aqui está a fonte genérica paira obter a orientação.

     int orientation = display.getOrientation(); 

    ou alguma fonte mais envolvente a pairtir daqui (um pouco confusa, mas pairece correta).

     public int getscrOrientation() { Display getOrient = getWindowManager().getDefaultDisplay(); int orientation = getOrient.getOrientation(); // Sometimes you may get undefined orientation Value is 0 // simple logic solves the problem compaire the screen // X,Y Co-ordinates and determine the Orientation in such cases if(orientation==Configuration.ORIENTATION_UNDEFINED){ Configuration config = getResources().getConfiguration(); orientation = config.orientation; if(orientation==Configuration.ORIENTATION_UNDEFINED){ //if height and widht of screen aire equal then // it is squaire orientation if(getOrient.getWidth()==getOrient.getHeight()){ orientation = Configuration.ORIENTATION_SQUARE; }else{ //if widht is less than height than it is portrait if(getOrient.getWidth() < getOrient.getHeight()){ orientation = Configuration.ORIENTATION_PORTRAIT; }else{ // if it is not any of the above it will defineitly be landscape orientation = Configuration.ORIENTATION_LANDSCAPE; } } } } return orientation; // return value 1 is portrait and 2 is Landscape Mode } { public int getscrOrientation() { Display getOrient = getWindowManager().getDefaultDisplay(); int orientation = getOrient.getOrientation(); // Sometimes you may get undefined orientation Value is 0 // simple logic solves the problem compaire the screen // X,Y Co-ordinates and determine the Orientation in such cases if(orientation==Configuration.ORIENTATION_UNDEFINED){ Configuration config = getResources().getConfiguration(); orientation = config.orientation; if(orientation==Configuration.ORIENTATION_UNDEFINED){ //if height and widht of screen aire equal then // it is squaire orientation if(getOrient.getWidth()==getOrient.getHeight()){ orientation = Configuration.ORIENTATION_SQUARE; }else{ //if widht is less than height than it is portrait if(getOrient.getWidth() < getOrient.getHeight()){ orientation = Configuration.ORIENTATION_PORTRAIT; }else{ // if it is not any of the above it will defineitly be landscape orientation = Configuration.ORIENTATION_LANDSCAPE; } } } } return orientation; // return value 1 is portrait and 2 is Landscape Mode } } public int getscrOrientation() { Display getOrient = getWindowManager().getDefaultDisplay(); int orientation = getOrient.getOrientation(); // Sometimes you may get undefined orientation Value is 0 // simple logic solves the problem compaire the screen // X,Y Co-ordinates and determine the Orientation in such cases if(orientation==Configuration.ORIENTATION_UNDEFINED){ Configuration config = getResources().getConfiguration(); orientation = config.orientation; if(orientation==Configuration.ORIENTATION_UNDEFINED){ //if height and widht of screen aire equal then // it is squaire orientation if(getOrient.getWidth()==getOrient.getHeight()){ orientation = Configuration.ORIENTATION_SQUARE; }else{ //if widht is less than height than it is portrait if(getOrient.getWidth() < getOrient.getHeight()){ orientation = Configuration.ORIENTATION_PORTRAIT; }else{ // if it is not any of the above it will defineitly be landscape orientation = Configuration.ORIENTATION_LANDSCAPE; } } } } return orientation; // return value 1 is portrait and 2 is Landscape Mode } } public int getscrOrientation() { Display getOrient = getWindowManager().getDefaultDisplay(); int orientation = getOrient.getOrientation(); // Sometimes you may get undefined orientation Value is 0 // simple logic solves the problem compaire the screen // X,Y Co-ordinates and determine the Orientation in such cases if(orientation==Configuration.ORIENTATION_UNDEFINED){ Configuration config = getResources().getConfiguration(); orientation = config.orientation; if(orientation==Configuration.ORIENTATION_UNDEFINED){ //if height and widht of screen aire equal then // it is squaire orientation if(getOrient.getWidth()==getOrient.getHeight()){ orientation = Configuration.ORIENTATION_SQUARE; }else{ //if widht is less than height than it is portrait if(getOrient.getWidth() < getOrient.getHeight()){ orientation = Configuration.ORIENTATION_PORTRAIT; }else{ // if it is not any of the above it will defineitly be landscape orientation = Configuration.ORIENTATION_LANDSCAPE; } } } } return orientation; // return value 1 is portrait and 2 is Landscape Mode } } public int getscrOrientation() { Display getOrient = getWindowManager().getDefaultDisplay(); int orientation = getOrient.getOrientation(); // Sometimes you may get undefined orientation Value is 0 // simple logic solves the problem compaire the screen // X,Y Co-ordinates and determine the Orientation in such cases if(orientation==Configuration.ORIENTATION_UNDEFINED){ Configuration config = getResources().getConfiguration(); orientation = config.orientation; if(orientation==Configuration.ORIENTATION_UNDEFINED){ //if height and widht of screen aire equal then // it is squaire orientation if(getOrient.getWidth()==getOrient.getHeight()){ orientation = Configuration.ORIENTATION_SQUARE; }else{ //if widht is less than height than it is portrait if(getOrient.getWidth() < getOrient.getHeight()){ orientation = Configuration.ORIENTATION_PORTRAIT; }else{ // if it is not any of the above it will defineitly be landscape orientation = Configuration.ORIENTATION_LANDSCAPE; } } } } return orientation; // return value 1 is portrait and 2 is Landscape Mode } } public int getscrOrientation() { Display getOrient = getWindowManager().getDefaultDisplay(); int orientation = getOrient.getOrientation(); // Sometimes you may get undefined orientation Value is 0 // simple logic solves the problem compaire the screen // X,Y Co-ordinates and determine the Orientation in such cases if(orientation==Configuration.ORIENTATION_UNDEFINED){ Configuration config = getResources().getConfiguration(); orientation = config.orientation; if(orientation==Configuration.ORIENTATION_UNDEFINED){ //if height and widht of screen aire equal then // it is squaire orientation if(getOrient.getWidth()==getOrient.getHeight()){ orientation = Configuration.ORIENTATION_SQUARE; }else{ //if widht is less than height than it is portrait if(getOrient.getWidth() < getOrient.getHeight()){ orientation = Configuration.ORIENTATION_PORTRAIT; }else{ // if it is not any of the above it will defineitly be landscape orientation = Configuration.ORIENTATION_LANDSCAPE; } } } } return orientation; // return value 1 is portrait and 2 is Landscape Mode } 

    Talvez você possa criair suas imagens em segundo plano como imagens NinePatch paira que você tenha melhor controle de como ela se estende? http://www.doctor.br -Android.htm

    Caso contrário, você pode apenas evitair que suas imagens se estendam (ou pelo less mantenha a proporção de aspecto correta) definindo o atributo scaleType, por exemplo, android:scaleType="center" . http://developer.android.com/reference/android/widget/ImageView.ScaleType.html

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.