我有一个我在这里制作的通用池:
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
// ===========================================================
@Override
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;
}
Run Code Online (Sandbox Code Playgroud)
我试图让屏幕显示像这样的指标..
final Display display = getWindowManager().getDefaultDisplay();
CAMERA_WIDTH = display.getWidth();
CAMERA_HEIGHT = display.getHeight();
Run Code Online (Sandbox Code Playgroud)
唯一的问题是,我无法弄清楚如何在Activity之外做这个.
这甚至可能吗?或者我必须使用SharedPreference或其他什么?
Sta*_*tan 98
尽管这里有一个公认的答案,但我还是张贴了另一个答案.对此的推理如下.传递上下文并不总是一个好主意,因为在某些情况下(例如应用程序库),上下文不应该从应用程序构建额外的和不必要的依赖项.代码很简单:
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
Run Code Online (Sandbox Code Playgroud)
它为此方法的已知限制对开发人员不重要的情况提供了解决方案.根据Android文档:
getSystem()返回一个全局共享的Resources对象,该对象仅提供对系统资源的访问权限(无应用程序资源),并且未针对当前屏幕进行配置(不能使用维度单位,不会根据方向更改等).
无论如何,所有领域DisplayMetrics都充满了有意义的信息.就我而言,我追求的是DPI.并且该方法为我提供了没有上下文的DPI.
Ted*_*opp 39
最简单的方法是将Context传递给FruitPool构造函数.然后它可以通过调用检索显示指标Context.getWindowManager().(如果要在构造函数外部运行该代码,请保存context.getApplicationContext(),以防它传递给Activity上下文.)
编辑:如果您采用此方法并传递Activity给FruitPool对象,并且对象的生命周期FruitPool可能超过活动的生命周期,那么您不能保留对活动的引用.你应该保留一个参考context.getApplicationContext().由于getWindowManager()仅为a定义Activity,因此您可以使用此表达式来获取WindowManager:
(WindowManager) context.getSystemService(Context.WINDOW_SERVICE)
Run Code Online (Sandbox Code Playgroud)
这里的另一种方式来获得,显示指标被配置为当前屏幕.
final DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
| 归档时间: |
|
| 查看次数: |
24050 次 |
| 最近记录: |