dip与px单位之间转换

来源:互联网 发布:lol淘宝权微博 编辑:程序博客网 时间:2024/06/11 18:29


  dip与px单位之间转换


//转换dip为px 
public static int convertDipOrPx(Context context, int dip) { 
    float scale = context.getResources().getDisplayMetrics().density; 
    return (int)(dip*scale + 0.5f*(dip>=0?1:-1)); 

 
//转换px为dip 
public static int convertPxOrDip(Context context, int px) { 
    float scale = context.getResources().getDisplayMetrics().density; 
    return (int)(px/scale + 0.5f*(px>=0?1:-1)); 

 

首先我要说一句:dip不是像素密度,像素密度是dpi,引用句原话dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。好了,入正题吧,先说说px,px就是像素,如果用px,就会用实际像素画,比个如吧,用画一条长度为240px的横线,在480宽的模拟器上看就是一半的屏宽,而在320宽的模拟器上看就是2/3的屏宽了。而dip,就是把屏幕的高分成480分,宽分成320分。

 

  • Resources resources = getResources();  
  •   
  • float fPx = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, resources.getDisplayMetrics());  
  •   
  • // 同理 px转dip:   
  • // float fDip = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 300, resources.getDisplayMetrics());  
  • // int iDip = Math.round(fDip);  
  •   
  • int iPx = Math.round(fPx);  
  •   
  • EditText editText = new EditText(this);  
  • editText.setWidth(iPx);  
  • editText.setHeight(LayoutParams.WRAP_CONTENT);  
  •   
  • // 或者   
  • // LayoutParams layoutParams = new LayoutParams(iPx, LayoutParams.WRAP_CONTENT);  
  • // editText .setLayoutParams(layoutParams);  

    本文转至:

    点击打开链接

  • 0 0
    原创粉丝点击