关于android 图标标准 ,效果图切图标准, 单位标准换算

图标
32 X 32
48 X 48
72 X 72
96 X 96
144 X 144

1-1
1-1.2
1-1.5
1-2
1-2.2

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

}

}

基于屏幕密度的抽象单位,设备无关的点,用于说明与密度无关的尺寸和位置。这些单位是相对于一个160dpi的屏幕,所有一个dp是160dpi屏幕上的一个点。
屏幕密度为160
1dip=1px

density = densityDpi /160
px = dip * (densityDpi / 160)

DisplayMetrics dm =getResources().getDisplayMetrics();


int w_screen = dm.widthPixels;

int h_screen = dm.heightPixels;
密度
int dpi = dm.densityDpi;

Drawable Drawable Drawable

log:
ldpi 240 x 320
….. 160 mdpi( 320x480 )
……….. 240 hdpi(480x800, 540x960)
1280 x 600 1280x 800
720 x 1280, 320 xhdpi (1280x 720)
1080 x 1920 , 480 xxhdpi
drawable-nodpi
drawable-tvdpi

low=120
Medium =160
High = 240
xH =320
xxH = 480

layout layout layout

res/values/dimens.xml(default)
res/values-ldpi/dimens.xml   (240x320 and nearer resolution)
res/values-mdpi/dimens.xml   (320x480 and nearer resolution)
res/values-hdpi/dimens.xml   (480x800, 540x960 and nearer resolution)
res/values-xhdpi/dimens.xml  (720x1280 - Samsung S3, Micromax Canvas HD, etc) 
res/values-xxhdpi/dimens.xml (1080x1920 - Samsung S4, HTC one, etc)
res/values-large/dimens.xml      (480x800)

layout 还可以用一下方法设置大屏(包括设置平板)

layout-small
layout-large
layout-large-mdpi
layout-large-xhdpi

layout-xlarge
layout-xlarge-mdpi
layout-xlarge-xhdpi

values values values

res/values-large-mdpi/dimens.xml (600x1024)
res/values-sw600dp/dimens.xml      (600x1024)
res/values-sw720dp/dimens.xml      (800x1280)
res/values-xlarge-xhdpi/dimens.xml (2560x1600 - Nexus 10") res/values-large-xhdpi/dimens.xml (1200x1920 - Nexus 7"(latest))

计算代码缘由
android系统转换代码

// TypedValue 中的这个函数负责将dp,sp,px等维度信息转换成像素

public static int complexToDimensionPixelSize(int data,

        DisplayMetrics metrics)

   {

     final float value = complexToFloat(data);

     final float f = applyDimension(

           (data>>COMPLEX_UNIT_SHIFT)&COMPLEX_UNIT_MASK,

           value,

           metrics);           // 这个函数负责完成转换,其实现请往下看

     final int res = (int)(f+0.5f);  // 这里做了一个四舍五入

     if (res != 0) return res;

     if (value == 0) return 0;

     if (value > 0) return 1;

     return -1;

}



// 从这个函数的实现可以看出android系统对dp和sp处理的区别
public static float applyDimension(int unit, float value,

                              DisplayMetrics metrics)

   {

     switch (unit) {

     case COMPLEX_UNIT_PX:

        return value;   // px不需要做转换

     case COMPLEX_UNIT_DIP:

        return value * metrics.density;   // dp转换成px

     case COMPLEX_UNIT_SP:

        return value * metrics.scaledDensity;  // sp转换成px

     case COMPLEX_UNIT_PT:

        return value * metrics.xdpi * (1.0f/72);

     case COMPLEX_UNIT_IN:

        return value * metrics.xdpi;

     case COMPLEX_UNIT_MM:

        return value * metrics.xdpi * (1.0f/25.4f);

     }

     return 0;

}

你可能感兴趣的:(关于android 图标标准 ,效果图切图标准, 单位标准换算)