2012-01-15 68 views
6

Tôi có lớp học sau trong android, nơi tôi đang xác định một số chức năng để tính chuyển động của Bong bóng trên màn hình.Làm cách nào để tính chiều cao và chiều rộng màn hình tại thời gian chạy?

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

Điều này cho độ phân giải màn hình 1024 * 600px. BUT Tôi muốn tính toán màn hình khi chạy. có nghĩa là cần phải xác định phối hợp và phối hợp khi chạy. Bạn có thể giúp tôi trong việc sửa đổi mã.

Tôi đã cố gắng sử dụng mã sau trong moveBall() của tôi, nhưng mã không hoạt động ở đó.

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

Bất kỳ ai cũng có thể đề xuất giải pháp?

Trả lời

10

Nếu bạn muốn kích thước hiển thị bằng pixel bạn có thể sử dụng

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

Nếu bạn không có quyền truy cập vào một hoạt động để gọi getWindowManager trên. Bạn có thể sử dụng:

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

Nó cũng có thể được tạo trong lớp này.

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

}