网上查了下,大概都是这种的,我的手机也确实是这个宽高Point p = new Point();
getWindowManager().getDefaultDisplay().getSize(p);
p.x //宽度 540
p.y //高度 960但是,我写一个demo的时候,获取的值却不对了,
demo如下
import android.graphics.Point;public class Strike {
private StrikeView view;
private int left = 0;
private int top = 0;
private Point win;
private boolean isDown = true;// 当前是否向下移动
private boolean isRight = true;// 当前是否向有移动 public Strike(StrikeView view, Point win) {
this.view = view;
this.win = win; //屏幕Point
this.left = view.getLeft();
this.top = view.getTop();
} /**
 * 设置方位并刷新
 */
public void setPostion() {
view.setLeft(left);
view.setTop(top);
view.invalidate();
} /**
 * 计算view的方位
 */
public void postion() {
if (isRight) {
if (left + 30 < win.x)
left++;
else {
isRight = false;
left--;
}
} else {
if (left > 0)
left--;
else {
isRight = true;
left++;
}
}
if (isDown) {
if (top + 30 < win.y)
top++;
else {
isDown = false;
top--;
}
} else {
if (top > 0)
top--;
else {
isDown = true;
top++;
}
} }}
大致意思就是一个小方块,在屏幕上飘来飘去的东西,撞到屏幕边缘就会回弹,上面postion()方法就是计算小方块的位置的,但是大概left增长到250左右的时候,就已经跑出屏幕范围了,高度更是大概只有400多点,这是为什么呢,搞了一下午,试了无数种方法都是540*960,郁闷了,求大神指点下,感激不尽

解决方案 »

  1.   


    人呢,求救啊啊啊啊
    另外再问个小白问题,android中的Log对象会自动写入手机么?
      

  2.   

    是不是和屏幕密度有关系,你确定单位是一致的吗?
    Log对象写入手机?不明白你的意思,如果你是要看log的话可以用logcat。
      

  3.   

    网上介绍的用密度计算的方法也试了,也是540*960
    但是用view.getLeft()获取的话,只到250左右就到屏幕边缘了,
    这个view是直接setContentView()设置到Activity重的Log:就是Log.w()/Log.e()这些方法会不会自动被Android系统记录到手机里面,因为我程序了面这种日志很多,我怕如果记录到手机的话,日志会膨胀的太快!
      

  4.   


    view.getLocationOnScreen(location)
    view.getLocationInWindow(location)
    view.getX()
    view.getLeft()这几个方法获取都是250,就到屏幕边缘dm = new DisplayMetrics();  
    getWindowManager().getDefaultDisplay().getMetrics(dm);    
    density  = dm.density; //1.5  
    dm.widthPixels;//540
    //getleft()的doc描述
    int android.view.View.getLeft()@CapturedViewPropertyLeft position of this view relative to its parent.
    //这个view就是window吧Returns:
    The left edge of this view, in pixels.
    //左边距的像素数按照上面的说法应该没问提的啊,郁闷了,新手求救啊!!
      

  5.   

    你可以通过以下方法获得屏幕的宽高:
       Display display = getWindowManager().getDefaultDisplay();         int height = display.getHeight();
            int width = display.getWidth();我之前在Android2.1上使用
    private void size() {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2) {
            size_old(getWindowManager().getDefaultDisplay());
        }
        else {
            size_new(getWindowManager().getDefaultDisplay());
        }
    }@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
    private void size_new(Display display) {
        Point point = new Point();
        display.getSize(point);
                // point.x and point.y
    }@SuppressWarnings("deprecation")
    private String size_old(Display display) {
        // display.getWidth() and display.getHeight()
    }
      

  6.   

    我的开发平台是4.03,这两个方法已经标记为废弃,而且,这两个方法,我也试过了..   int height = display.getHeight();         int width = display.getWidth(); 
      

  7.   

      DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        int height = displaymetrics.heightPixels;
        int wwidth = displaymetrics.widthPixels;
      

  8.   

    也试过了,也是540*960,关键是我觉得view.getLeft()获取的不对,但是又不知道问题出在哪..