获取屏幕宽和高的两种方法
方法一、代码如下:
- WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
- Display display = wm.getDefaultDisplay();
- Log.i(tag, "屏幕尺寸1: 宽度 = "+display.getWidth()+"高度 = :"+display.getHeight()
- );
方法二、代码如下:
- DisplayMetrics dm =getResources().getDisplayMetrics();
- int w_screen = dm.widthPixels;
- int h_screen = dm.heightPixels;
- Log.i(tag, "屏幕尺寸2:宽度 = " + w_screen + "高度 = " + h_screen + "密度 = " + dm.densityDpi);
方法一的方法已经被遗弃了,推荐用方法2的方法,除获得屏幕的宽和高外还可以获得屏幕的密度。这里必须注意,获得的尺寸单位为px,即像素,而不是屏幕的绝对尺寸。在G700上得到的参数如下:
- Line 1297: 12-08 11:39:09.037 I/yan (13602): 屏幕尺寸1: 宽度 = 720高度 = :1280
- Line 1299: 12-08 11:39:09.037 I/yan (13602): 屏幕尺寸2:宽度 = 720高度 = 1280密度 = 320
在Geek手机上参数如下:
- Line 1511: 01-06 03:11:20.839 I/yan (30175): 屏幕尺寸1: 宽度 = 1080高度 = :1920
- Line 1513: 01-06 03:11:20.839 I/yan (30175): 屏幕尺寸2:宽度 = 1080高度 = 1920密度 = 480
可以看到,同样是5.0寸的屏幕,一个密度是320,一个密度是480.同样的物理宽度,后者是1080个像素而前者是720个像素。
px与dip的概念及互相转化
px即pixels,是绝对像素,有多少个像素点就是多少个像素点。
dip即device independent pixel,设备独立像素,无像素无关。
二者转换公式如下:
- package org.yanzi.util;
- import android.content.Context;
- public class DisplayUtil {
- public static int dip2px(Context context, float dipValue){
- final float scale = context.getResources().getDisplayMetrics().density;
- return (int)(dipValue * scale + 0.5f);
- }
- public static int px2dip(Context context, float pxValue){
- final float scale = context.getResources().getDisplayMetrics().density;
- return (int)(pxValue / scale + 0.5f);
- }
- }
- Point center_dip = new Point(DisplayUtil.px2dip(this, dm.widthPixels)/2,
- DisplayUtil.px2dip(this, dm.heightPixels)/2); //以dip为单位的中心
- square_screen = new Rect(DisplayUtil.dip2px(this, center_dip.x - D/2),
- DisplayUtil.dip2px(this,center_dip.y - D/2),
- DisplayUtil.dip2px(this,center_dip.x + D/2),
- DisplayUtil.dip2px(this,center_dip.y + D/2));
总结:
densityDpi 每英寸多少个像素点,(像素点的算法为:240(分辨率手机为240*320)/1.5(屏幕宽1.5高2.0即3寸手机)=160dpi(横向))
density = densityDpi /160 (密度)
APP根据densityDpi的大小决定调用哪个文件夹下的图片,关系如下:
drawable-ldpi 底密度,通常是指120 (密度为1.5)
drawable-mdpi 中等密度,通常是指160(密度为1)
drawable-xhdpi 超高密度,通常是指320 (密度为2,目前主流手机密度,)
drawable-mdpi 中等密度,通常是指160(密度为1)
drawable-xhdpi 超高密度,通常是指320 (密度为2,目前主流手机密度,)
px = dip*density
在绘制矩形时,可以首先获得屏幕宽度的dip,根据dip决定边长D,然后用文中的方法确定其px坐标。来张效果图: