为什么在不同设备上使用画布绘制圆弧显示不同的半径弧

时间:2015-12-01 11:08:09

标签: android canvas

我正在使用画布绘制一个Arc。在我的设备上(1080 * 1920)它看起来很不错,但在我的朋友设备(720 * 1280)上,弧的半径增加了。

我根据设备屏幕高度和宽度设置高度和宽度。所以设备的高度和宽度我对不同的设备有所不同。但绘制的圆弧尺寸不同。

请帮我解决这个问题。提前谢谢。

    @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
            // Get Screen Width in Pixel
            int width = Helper.getScreenWidth(context);
            // Get Screen Height in Pixel
            int height = Helper.getScreenHeight(context);
            // Get Device Density
            int density = Helper.getDeviceDensity(context);
            setMeasuredDimension(width, height / density);
        }

/**
     * Get Screen Height
     * @param context context
     * @return int
     */
public static int getScreenHeight(Context context) {
        WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        Display display = wm.getDefaultDisplay();
        DisplayMetrics metrics = new DisplayMetrics();
        display.getMetrics(metrics);
        int height = metrics.heightPixels;
        return height;
    }

    /**
     * Get Screen Width
     * @param context context
     * @return int
     */
    public static int getScreenWidth(Context context) {
        WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        Display display = wm.getDefaultDisplay();
        DisplayMetrics metrics = new DisplayMetrics();
        display.getMetrics(metrics);
        int width = metrics.widthPixels;
        return width;
    }

    /**
     * Get Device Screen Density
     * @param context context
     * @return int
     */
    public static int getDeviceDensity(Context context) {
        WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        Display display = wm.getDefaultDisplay();
        DisplayMetrics metrics = new DisplayMetrics();
        display.getMetrics(metrics);
        int density = (int) metrics.density;
        return density;
    }

1 个答案:

答案 0 :(得分:0)

使用dp(设备像素),您不必处理不同屏幕尺寸的逻辑从dp转换为像素:

public int dpToPx(int dp) {
    DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
    int px = Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));       
    return px;
}

因此,无论您在哪里传递宽度和高度的原始内容,都要传递dpToPx(yourRawInt);

有关从dp转换为px和px转换为dp的更多信息,请检查this answer