Andoid 中DPI计算

不会写代码的丝丽
博客专家认证
2016-11-18 05:09:31
我的手机红米3s 5英寸1280x720像.那么计算公式应为 (1280^2+720^2)^0.5 最后在除以5
我的计算结果为293.72095601097310877586751229931

然后我在代码中返回的是320dp

package com.example.administrator.myapplication;

import android.hardware.display.DisplayManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;

public class MainActivity extends AppCompatActivity {


String TAG ="TAG";


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
Log.e(TAG, "windth "+ displayMetrics.widthPixels);
Log.e(TAG, "height "+ displayMetrics.heightPixels);
int densityDpi = getResources().getDisplayMetrics().densityDpi;
Log.e(TAG, "densityDpi:"+densityDpi );


}
}


11-18 17:00:29.297 14005-14005/com.example.administrator.myapplication E/TAG: windth 720
11-18 17:00:29.297 14005-14005/com.example.administrator.myapplication E/TAG: height 1280
11-18 17:00:29.298 14005-14005/com.example.administrator.myapplication E/TAG: densityDpi:320
...全文
328 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
头发还没秃a 2016-11-19
  • 打赏
  • 举报
回复
换算工具类:

import android.content.Context;
import android.util.TypedValue;

public class DensityUtil {

    /**
     * 根据手机的分辨率从dp的单位转换成px
     */
    public static int dp2px(Context context, float dpValue){
        float scale = context.getResources().getDisplayMetrics().density;
        return (int)(dpValue * scale + 0.5f);
    }

    /**
     * 根据手机的分辨率从px的单位转换成dp
     */
    public static int px2dp(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }

//    /**
//     * dp转px
//     * @param context
//     * @return
//     */
//    public static int dp2px(Context context, float dpVal)
//    {
//        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
//                dpVal, context.getResources().getDisplayMetrics());
//    }
//
    /**
     * sp转px
     * @param context
     * @return
     */
    public static int sp2px(Context context, float spVal)
    {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
                spVal, context.getResources().getDisplayMetrics());
    }
//
//    /**
//     * px转dp
//     * @param context
//     * @param pxVal
//     * @return
//     */
//    public static float px2dp(Context context, float pxVal)
//    {
//        final float scale = context.getResources().getDisplayMetrics().density;
//        return (pxVal / scale);
//    }
//
    /**
     * px转sp
     * @param pxVal
     * @return
     */
    public static float px2sp(Context context, float pxVal)
    {
        return (pxVal / context.getResources().getDisplayMetrics().scaledDensity);
    }

}
获取屏幕像素类:

import android.app.Activity;
import android.util.DisplayMetrics;

/**
 * 获得屏幕像素
 * @author Administrator
 *
 */
public class Pixels {
    private static int[] px = new int[101];
    private static int[] py = new int[101];
    private int w,h;
    private DisplayMetrics dm;
    public Pixels(Activity activity){
        dm = new DisplayMetrics();
        activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
        w = dm.widthPixels;
        h = dm.heightPixels;
        int length = px.length;
        for(int index=0;index<length;index++){
            px[index] = (int)(w*0.01*index);
            py[index] = (int)(h*0.01*index);
        }
    }
    /**
     * 获得x点值
     * @param index
     * @return
     */
    public static int getpixels_x(int index){
        return px[index];
    }
    /**
     * 获得y点值
     * @param index
     * @return
     */
    public static int getpixels_y(int index){
        return py[index];
    }
}
LoveWyf_ 2016-11-18
  • 打赏
  • 举报
回复
在每部手机出厂时都会为该手机设置屏幕密度,若其屏幕的实际密度是440dpi那么就会将其屏幕密度设置为与之接近的480dpi;如果实际密度为325dpi那么就会将其屏幕密度设置为与之接近的320dpi。这也就是说常见的屏幕密度是与每个显示级别的最大值相对应的,比如:120、160、240、320、480、640等。
幻影宇寰 2016-11-18
  • 打赏
  • 举报
回复
densityDpi这个不是精确,只是取最近的值,所以你这个是320

80,473

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧