• TypedValue: 使用TypedValue将dip值转换成px值


    之前自己一直手工编写函数来实现dip值到px值,今天无意中发现android本身就带有类似的函数来实现这种转换过程,就是 TypedValue.applyDimension 

    public class TypedValueApiUseDemoActivity extends AppCompatActivity {
    
    
        public static final String TAG = "xp.chen";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_typed_value_api_use_demo);
    
    
            int dipValue = 20;
    
            float density = getResources().getDisplayMetrics().density;
            int finalPx = (int) (dipValue * density);
    
            int pxValue = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, getResources().getDisplayMetrics());
    
            Log.i(TAG, "finalPx: "+finalPx+", pxValue: "+pxValue);
    
        }
    }

    Log:

    I/xp.chen: finalPx: 60, pxValue: 60

    查看下源码,android的实现和我们自己的实现是一样的:

    /**
         * Converts an unpacked complex data value holding a dimension to its final floating 
         * point value. The two parameters <var>unit</var> and <var>value</var>
         * are as in {@link #TYPE_DIMENSION}.
         *  
         * @param unit The unit to convert from.
         * @param value The value to apply the unit to.
         * @param metrics Current display metrics to use in the conversion -- 
         *                supplies display density and scaling information.
         * 
         * @return The complex floating point value multiplied by the appropriate 
         * metrics depending on its unit. 
         */
        public static float applyDimension(int unit, float value,
                                           DisplayMetrics metrics)
        {
            switch (unit) {
            case COMPLEX_UNIT_PX:
                return value;
            case COMPLEX_UNIT_DIP:
                return value * metrics.density;
            case COMPLEX_UNIT_SP:
                return value * metrics.scaledDensity;
            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;
        }
  • 相关阅读:
    初来乍到
    OpenGl基础篇(1.0)
    说说结构化方法和面向对象方法
    浅谈软件项目管理
    测试篇
    结构化与面向对象化之应用比较
    敏捷软件开发VS传统软件开发
    SOSO街景地图 API (Javascript)开发教程(1)- 街景
    阿里实习内推面经
    Android工程开发笔记<一>
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/11819896.html
Copyright © 2020-2023  润新知