How can I calculate the height and width of the screen at runtime?

I have the following class in android, where I define some functions for calculating the movement of bubbles on the screen.

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

This screen resolution is 1024 * 600 pixels. BUt I want to calculate the screens at runtime. means the need to determine coordination and coordination at runtime. Can you help me in changing the code.

I tried using the following code in my moveBall (), but the code did not work there.

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

Can anyone suggest a solution?

+6
source share
2 answers

If you want to display the dimensions in pixels, you can use

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

If you do not have access to activity to call getWindowManager. You can use:

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

It can also be created in this class.

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

Source: https://habr.com/ru/post/906026/


All Articles