2012-01-15 89 views
6

我在android中有以下类,我正在定义一些函数来计算屏幕上Bubbles的运动。如何在运行时计算屏幕高度和宽度?

public class floatBubble { 
    private Bitmap img; // the image of the ball 
    private int coordX = 512; // the x coordinate at the canvas 
    private int coordY = 600; // the y coordinate at the canvas 
    private int id; // gives every ball his own id, for now not necessary 
    private static int count = 1; 
    private boolean goRight = true; 
    private boolean goDown = true; 
    public floatBubble(Context context, int drawable) { 
    BitmapFactory.Options opts = new BitmapFactory.Options(); 
     opts.inJustDecodeBounds = true; 
     img = BitmapFactory.decodeResource(context.getResources(), drawable); 
     id=count; 
    count++; 
    } 

    public static int getCount() { 
     return count; 
    } 
    void setX(int newValue) { 
     coordX = newValue; 
     } 
    public int getX() { 
     return coordX; 
    } 
    void setY(int newValue) { 
     coordY = newValue; 
     } 
    public int getY() { 
     return coordY; 
    } 

    public int getID() { 
     return id; 
    } 
    public Bitmap getBitmap() { 
     return img; 
    } 

    public void moveBall(int goX, int goY) { 
     // check the borders, and set the direction if a border has reached 

     if (coordX > 1024){ 
      goRight = false; 
     } 
     if (coordX < -100){ 
      goRight = false; 
      coordX = 512; 
      coordY = 600; 
     } 
     if (coordY > 600){ 
      goDown = false; 
     } 
     if (coordY < -100){ 
      coordY = 600; 
      goDown = false; 
     } 
     // move the x and y 
     if (goRight){ 
      coordX += goX; 
     }else 
     { 
      coordX -= goX; 
     } 
     if (goDown){ 
      coordY += goY; 
     }else 
     { 
      coordY -= goY; 
     } 
    } 
} 

这是为屏幕分辨率1024 * 600px。 BUt我想在运行时计算屏幕尺寸。意味着需要在运行时定义coordX和coordY。你能帮我修改代码吗?

我试着在我的moveBall()中使用下面的代码,但代码没有在那里工作。

DisplayMetrics dm = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(dm);  
coordX = dm.widthPixels; 
coordY = dm.heightPixels; 

任何人都可以提出解决方案吗?

回答

10

如果你想在像素的显示尺寸可以使用

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

如果您没有访问到一个活动叫getWindowManager上。你可以使用:

Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
int width = display.getWidth(); 
int height = display.getHeight(); 
0

它也可以在这个类中创建。

package com.example.android.fragments; 

import android.app.Activity; 
import android.util.DisplayMetrics; 
import android.view.Display; 

public class ScreenUtility { 

    private Activity activity; 
    private float dpWidth; 
    private float dpHeight; 

    public ScreenUtility(Activity activity) { 
     this.activity = activity; 

     Display display = activity.getWindowManager().getDefaultDisplay(); 
     DisplayMetrics outMetrics = new DisplayMetrics(); 
     display.getMetrics(outMetrics); 

     float density = activity.getResources().getDisplayMetrics().density; 
     dpHeight = outMetrics.heightPixels/density; 
     dpWidth = outMetrics.widthPixels/density; 
    } 

    public float getWidth() { 
     return dpWidth; 
    } 

    public float getHeight() { 
     return dpHeight; 
    } 

}