2012-01-15 6 views
6

Ho classe seguente in Android, dove sto definendo alcune funzioni per calcolare il movimento di Bubbles sullo schermo.Come posso calcolare l'altezza e la larghezza dello schermo in fase di esecuzione?

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; 
     } 
    } 
} 

Questo è per la risoluzione dello schermo 1024 * 600px. BUt Voglio calcolare la schermata al runtime. significa che è necessario definire coordX e coordY in fase di esecuzione. Puoi aiutarmi a modificare il codice.

Ho provato a utilizzare il seguente codice nel mio moveBall(), ma il codice non ha funzionato lì.

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

Chiunque può suggerire una soluzione?

risposta

10

Se si desidera che le dimensioni di visualizzazione in pixel è possibile utilizzare

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

Se non si dispone di accesso a un'attività di chiamare getWindowManager su. È possibile utilizzare:

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

Può anche essere creato in questa classe.

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; 
    } 

}