无法取回屏幕尺寸的android

时间:2013-03-13 16:04:21

标签: android size height width

我有一点问题,就像在这张照片中看到的那样,我不能像我想的那样带回屏幕尺寸,而且我有点失落...... (我正在学习)

http://imageshack.us/f/708/erreurtaillepong4.png/

http://imageshack.us/f/708/erreurtaillepong5.png/

我需要有屏幕的宽度和高度

请帮忙

编辑1

这是我的代码:

package com.salocincreations.pong;

import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;

public class GameState {

    //Largeur et hauteur de l'écran
    int _screenWidth = TailleEcran.Measuredwidth;
    int _screenHeight = TailleEcran.Measuredheight;


    //La balle
    final int _ballSize = 10;
    int _ballX = _screenWidth/2;    int _ballY = _screenHeight/2;
    int _ballVelocityX = 2;     int _ballVelocityY = 4;

    //Les barres
    final int _batLength = 75;  final int _batHeight = 10;
    int _topBatX = (_screenWidth/2) - (_batLength / 2);
    final int _topBatY = 10;
    int _bottomBatX = (_screenWidth/2) - (_batLength / 2);  
    final int _bottomBatY = _screenHeight - 20;

    public GameState()
    {
    }

    //The update method
    public void update() {

    _ballX += _ballVelocityX;
    _ballY += _ballVelocityY;

    //DEATH!
    if(_ballY > _bottomBatY + 10 || _ballY < 0)         
    {_ballX = 100;  _ballY = 100;}//Collisions with the goals

    if(_ballX > _screenWidth || _ballX < 0)
                _ballVelocityX *= -1;   //Collisions with the sides     

    if(_ballX > _topBatX && _ballX < _topBatX+_batLength && _ballY - 16 < _topBatY)         
                     _ballVelocityY *= -1;  //Collisions with the bats      

    if(_ballX > _bottomBatX && _ballX < _bottomBatX+_batLength 
                    && _ballY + 16 > _bottomBatY)
                           _ballVelocityY *= -1;
    }

    public boolean surfaceTouched(float posX, float posY) {
        _topBatX = (int) posX;
        _bottomBatX = (int) posX;

        return true;
        }


    //the draw method
    public void draw(Canvas canvas, Paint paint) {

    //Clear the screen
    canvas.drawRGB(0, 0, 0);

    //set the colour
    paint.setARGB(200, 0, 200, 700);

    //draw the ball
    canvas.drawRect(new Rect(_ballX,_ballY,_ballX + _ballSize,_ballY + _ballSize),
                                 paint);

    //draw the bats
    canvas.drawRect(new Rect(_topBatX, _topBatY, _topBatX + _batLength,
                                          _topBatY + _batHeight), paint); //top bat
    canvas.drawRect(new Rect(_bottomBatX, _bottomBatY, _bottomBatX + _batLength, 
                                          _bottomBatY + _batHeight), paint); //bottom bat

        // Nous allons dessiner nos points par rapport à la résolution de l'écran
        int iWidth = canvas.getWidth(); // Largeur
        int iHeight = canvas.getHeight(); // Hauteur

        // Affecter une couleur de manière aléatoire
            paint.setARGB(255, 500, 500, 500);
            // Définir l'épaisseur du segment
            paint.setStrokeWidth (2);
            // Puis dessiner nos points dans le cavenas
            canvas.drawLine(0, iHeight/2, iWidth, iHeight/2, paint);    
            canvas.drawCircle(iWidth/2, iHeight/2, 50, paint);
        }            
    }

public class TailleEcran extends Activity {


    int Measuredwidth;
    int Measuredheight;
    Point size = new Point();
    WindowManager w = getWindowManager();{

      if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2){
            w.getDefaultDisplay().getSize(size);

            Measuredwidth = size.x;
            Measuredheight = size.y; 
          }else{
            Display d = w.getDefaultDisplay(); 
            Measuredwidth = d.getWidth(); 
            Measuredheight = d.getHeight(); 
          }}}

在第

int _screenWidth = TailleEcran.Measuredwidth;
int _screenHeight = TailleEcran.Measuredheight;

错误说明:无法对非静态字段进行静态引用TailleEcran.Measuredwidth

无法对非静态字段进行静态引用TailleEcran.Measuredheight

编辑2

那么,anthropomo,我需要写吗?

        public class GameState {
        // declare variables above here without assignments
        Display display = ((WindowManager)
            context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
        DisplayMetrics metrics = new DisplayMetrics();
        display.getMetrics(metrics);

        int pixHeight = metrics.heightPixels;
        int pixWidth = metrics.widthPixels;
    // dp numbers:
        float density  = context.getResources().getDisplayMetrics().density;
        float dpHeight = pixHeight / density;
        float dpWidth  = pixWidth / density;
public GameState(Context context){
//all the rest of my class
    }

}

3 个答案:

答案 0 :(得分:0)

试试这个

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

在13之前的API上,您可以使用:

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

答案 1 :(得分:0)

您可以像这样使用Context.getResources()Resources.getDisplayMetrics

DisplayMetrics displayMetrics = getResources().getDisplayMetrics();

然后你会

displayMetrics.widthPixels;  // width
displayMetrics.heightPixels; // height

答案 2 :(得分:0)

兼容&lt; 13且未弃用:

    Display display = ((WindowManager)
        context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
    DisplayMetrics metrics = new DisplayMetrics();
    display.getMetrics(metrics);

    int pixHeight = metrics.heightPixels;
    int pixWidth = metrics.widthPixels;
// dp numbers:
    float density  = context.getResources().getDisplayMetrics().density;
    float dpHeight = pixHeight / density;
    float dpWidth  = pixWidth / density;

编辑:

您在display.getMetrics(metrics);上遇到错误,因为只有声明可以在类的方法之外进行。所有这些代码都应该在一个方法中,假设GameState不是一个Activity,这个东西应该在构造函数中。像这样:

public class GameState {
    // declare variables above here without assignments

    public GameState(Context context){
        // everything above, but save the variables outside of the constructor
    }

}

然后在使用GameState的Activity中,执行gameState = new GameState(this);