Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在android中如何在屏幕中央绘制正方形_Java_Android - Fatal编程技术网

Java 在android中如何在屏幕中央绘制正方形

Java 在android中如何在屏幕中央绘制正方形,java,android,Java,Android,我想在屏幕中央画一个正方形。我想在正方形的左右两边留一点边距,这样就远离了边缘,我试图创建它的方式就在下面。问题是,它不会在所有设备上正确显示,并且当屏幕倾斜时,一些正方形会被切断。我想这是因为我使用了rectSide=1000。有谁知道一种更好的方法可以在任何大小的屏幕上使用吗 int rectside =1000; canvas.drawRect(width/2 - rectSide/2, height/2 - rectSide/2,

我想在屏幕中央画一个正方形。我想在正方形的左右两边留一点边距,这样就远离了边缘,我试图创建它的方式就在下面。问题是,它不会在所有设备上正确显示,并且当屏幕倾斜时,一些正方形会被切断。我想这是因为我使用了rectSide=1000。有谁知道一种更好的方法可以在任何大小的屏幕上使用吗

int rectside =1000;
canvas.drawRect(width/2 - rectSide/2,
                height/2 - rectSide/2,
                width/2 + rectSide/2,
                height/2 + rectSide/2, paint);

您需要像这样以编程方式获取设备的高度和宽度

 DisplayMetrics displaymetrics = new DisplayMetrics();
 getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
 int height = displaymetrics.heightPixels;
 int width = displaymetrics.widthPixels;

更新:正如@Der Golem所指出的,在
宽度
高度
之间取较小的值,这样所有边都应该相等

你是对的,使用绝对数量的像素不是好方法

您应该使用显示高度和宽度调整矩形。如何获得屏幕大小属性已经讨论过了


我还强烈建议您阅读,以便更好地了解如何管理多个屏幕尺寸。

获取设备尺寸:

DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int width = displaymetrics.widthPixels;
int diameter = width;
if (height < width){
    diameter = height;
}
接下来,获取最小尺寸:

DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int width = displaymetrics.widthPixels;
int diameter = width;
if (height < width){
    diameter = height;
}
最后画出来:

canvas.drawRect(width/2 - diameter/2 ,
                height/2 - diameter/2,
                width/2 + diameter/2,
                height/2 + diameter/2, paint);

对我来说,1000像素似乎是个大数目。而且,如果它在中心。。。它已经远离边缘了。你不需要剪一些额外的尺寸。好吧,如果它是小的,当然是小边。。。。然后取
width
和`height之间的较小值。你是什么意思取高度和宽度之间的较小值?因为你想要一个正方形,尺寸必须相同。在我忘记之前,如果横向变化弄乱了你的矩形,请确保将所有这些都放在一个方法中,每当需要UI更新时,你都可以重新绘制(别忘了清理画布:)。除了链接之外,你还应该添加代码片段。否则有人会对你投反对票