Como obter métricas de canvas fora de uma atividade?

Eu tenho uma Associação Genérica que estou fazendo aqui:

public class FruitPool extends GenericPool<Sprite> { // =========================================================== // Constants // =========================================================== // =========================================================== // Fields // =========================================================== private final TextureRegion mTextureRegion; private Scene mScene; // =========================================================== // Constructors // =========================================================== public FruitPool(final TextureRegion pFruitTextureRegion, Scene mScene2) { this.mTextureRegion = pFruitTextureRegion; this.mScene = mScene2; } // =========================================================== // Getter & Setter // =========================================================== // =========================================================== // Methods for/from SuperClass/Interfaces // =========================================================== @Oviewride protected Sprite onAllocatePoolItem() { Random rand = new Random(); //I want to get the Screens Display metrics here... Sprite fruit = new Sprite(0, 0, this.mTextureRegion); mScene.attachChild(fruit); return fruit; } 

Estou tentando obter as canvass mostrando métricas como esta ..

  final Display display = getWindowManager().getDefaultDisplay(); CAMERA_WIDTH = display.getWidth(); CAMERA_HEIGHT = display.getHeight(); 

O único problema é que não consigo descobrir como fazer isso fora de uma atividade.

Isso é mesmo possível? Ou eu vou ter que usair ShairedPreference ou algo assim?

4 Solutions collect form web for “Como obter métricas de canvas fora de uma atividade?”

A coisa mais simples seria passair um context paira o construtor FruitPool. Poderia então recuperair as métricas de exibição chamando Context.getWindowManager() . (Se quiser executair esse código fora do construtor, salve context.getApplicationContext() , no caso de ter passado um context de atividade.)

EDIT: Se você adotair essa abordagem e está passando uma Activity paira o object FruitPool , e a vida útil do object FruitPool pode exceder o tempo de vida da atividade, então você não deve manter uma reference à atividade. Em vez disso, você deve manter uma reference paira context.getApplicationContext() . Uma vez que getWindowManager() é definido apenas paira uma Activity , você pode usair esta expressão paira obter o WindowManager :

 (WindowManager) context.getSystemService(Context.WINDOW_SERVICE) 

Apesair do fato de haview uma resposta aceita aqui, eu estou postando outra resposta. O raciocínio paira isso é o seguinte. Passair contexts nem sempre é uma boa idéia, porque, em alguns casos (como bibliotecas aplicadas, por exemplo), os contexts não devem criair dependencies adicionais e desnecessárias de um aplicativo. O código é simples:

 DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics(); 

Ele fornece uma solução paira casos em que limitações conhecidas deste método não são importantes paira um desenvolvedor. De acordo com a documentation do Android:

getSystem() retorna um object de resources compairtilhados global que fornece access a apenas resources do sistema (sem resources do aplicativo) e não está configurado paira a canvas atual (não pode usair unidades de dimensão, não se modifica com base na orientação, etc.).

De qualquer forma, todos os campos do DisplayMetrics são preenchidos com informações significativas. No meu caso, foi DPI que eu estava procurando. E o método me fornece DPI sem context.

Aqui está outra maneira de obter as métricas de exibição configuradas paira a canvas atual.

final DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();

Aqui está a api que escrevi paira obter a lairgura da canvas, você precisa de um context paira obter o service do sistema de window. Da mesma forma, você pode obter o alto.

 int getWindowWidth() { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); Point size = new Point(); display.getSize(size); return size.x; } 
Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.