• Android根据分辨率进行单位转换(dp,sp转像素px)


     // 获取屏幕密度(方法1)

    1. int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); // 屏幕宽(像素,如:480px)
    2. int screenHeight = getWindowManager().getDefaultDisplay().getHeight(); // 屏幕高(像素,如:800p)
    3. Log.e(TAG + " getDefaultDisplay""screenWidth=" + screenWidth + "; screenHeight=" + screenHeight);
    4. // 获取屏幕密度(方法2)
    5. DisplayMetrics dm = new DisplayMetrics();
    6. dm = getResources().getDisplayMetrics();
    7. float density = dm.density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)
    8. int densityDPI = dm.densityDpi; // 屏幕密度(每寸像素:120/160/240/320)
    9. float xdpi = dm.xdpi;
    10. float ydpi = dm.ydpi;
    11. Log.e(TAG + " DisplayMetrics""xdpi=" + xdpi + "; ydpi=" + ydpi);
    12. Log.e(TAG + " DisplayMetrics""density=" + density + "; densityDPI=" + densityDPI);
    13. screenWidth = dm.widthPixels; // 屏幕宽(像素,如:480px)
    14. screenHeight = dm.heightPixels; // 屏幕高(像素,如:800px)
    15. Log.e(TAG + " DisplayMetrics(111)""screenWidth=" + screenWidth + "; screenHeight=" + screenHeight);
    16. // 获取屏幕密度(方法3)
    17. dm = new DisplayMetrics();
    18. getWindowManager().getDefaultDisplay().getMetrics(dm);
    19. density = dm.density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)
    20. densityDPI = dm.densityDpi; // 屏幕密度(每寸像素:120/160/240/320)
    21. xdpi = dm.xdpi;
    22. ydpi = dm.ydpi;
    23. Log.e(TAG + " DisplayMetrics""xdpi=" + xdpi + "; ydpi=" + ydpi);
    24. Log.e(TAG + " DisplayMetrics""density=" + density + "; densityDPI=" + densityDPI);
    25. int screenWidthDip = dm.widthPixels; // 屏幕宽(dip,如:320dip)
    26. int screenHeightDip = dm.heightPixels; // 屏幕宽(dip,如:533dip)
    27. Log.e(TAG + " DisplayMetrics(222)""screenWidthDip=" + screenWidthDip + "; screenHeightDip=" + screenHeightDip);
    28. screenWidth = (int)(dm.widthPixels * density + 0.5f); // 屏幕宽(px,如:480px)
    29. screenHeight = (int)(dm.heightPixels * density + 0.5f); // 屏幕高(px,如:800px)
    30. Log.e(TAG + " DisplayMetrics(222)""screenWidth=" + screenWidth + "; screenHeight=" + screenHeight);

    Android系统中,默认的单位是像素(px)。也就是说,在没有明确说明的情况下,所有的大小设置都是以像素为单位。

    如果以像素设置大小,会导致不同分辨率下出现不同的效果。那么,如何将应用中所有大小的单位都设置为’dp’呢?
    实际上TextView.setTextSize()重载了根据单位设置大小的方法。

    笔者在此基础上实现了以下方法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    /**
     * 获取当前分辨率下指定单位对应的像素大小(根据设备信息)
     * px,dip,sp -> px
     * 
     * Paint.setTextSize()单位为px
     * 
     * 代码摘自:TextView.setTextSize()
     * 
     * @param unit  TypedValue.COMPLEX_UNIT_*
     * @param size
     * @return
     */

    public float getRawSize(int unit, float size) {
           Context c = getContext();
           Resources r;

           if (== null)
               r = Resources.getSystem();
           else
               r = c.getResources();
            
           return TypedValue.applyDimension(unit, size, r.getDisplayMetrics());
    }

    下面是网友提供的方法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    /**
    * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
    */

    public static int dip2px(Context context, float dpValue) {
      final float scale = context.getResources().getDisplayMetrics().density;
      return (int) (dpValue * scale + 0.5f);
    }

    /**
    * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
    */

    public static int px2dip(Context context, float pxValue) {
      final float scale = context.getResources().getDisplayMetrics().density;
      return (int) (pxValue / scale + 0.5f);
    }

    本文固定链接: http://orgcent.com/android-dpsppx-unit-conversion/ | 萝卜白菜的博客

  • 相关阅读:
    Delphi 与 DirectX 之 DelphiX(10): TPictureCollectionItem.StretchDraw 绘制到指定矩形
    Delphi 与 DirectX 之 DelphiX(11): TPictureCollectionItem.DrawAdd、DrawSub
    Delphi 与 DirectX 之 DelphiX(13): TPictureCollectionItem.DrawRotate
    Delphi 与 DirectX 之 DelphiX(8): 第一个简单动画
    上周热点回顾(10.2210.28)
    如果云计算
    网站已恢复正常,让大家久等了
    上周热点回顾(10.1510.21)
    10.24,今天是程序员节,祝大家节日快乐
    园豆兑换阿里云代金券 体验阿里云云服务器
  • 原文地址:https://www.cnblogs.com/zjqlogs/p/2444620.html
Copyright © 2020-2023  润新知