我正在使用画布绘制一个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;
}
答案 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