Android 视图的 getTop()、getLeft()、getX()、getY()、getWidth()、getHeight() 方法
Android view's getTop(), getLeft(), getX(), getY(), getWidth(), getHeight() methods
我正在编写一个拖放应用程序,并且因为一些参数而感到非常困惑。
请大家帮忙解答
首先,我阅读了 View
class 的文档并得到了以下解释。
getX() : The visual x position of this view, in pixels.
getY() : The visual y position of this view, in pixels.
getWidth() : Return the width of the your view.
getHeight() : Return the width of the your view.
getTop() : Top position of this view relative to its parent.
getLeft() : Left position of this view relative to its parent.
现在我们完成了官方文档,让我们看看我们有什么。
我有一张原始尺寸为 500x500
的图片,名为 circle。
这是我的应用程序的实际屏幕截图
这里是布局xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<ImageView
android:id="@+id/imageView1"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@drawable/circle" />
</LinearLayout>
现在我在担心什么。当我看当地人时,我得到以下信息,这让我很困惑。
我没有发现 getX()
和 getY()
函数有任何问题,因为它们实际上告诉我图像从哪里开始。
如文档所述,getWidth()
和 getHeight
方法 return 视图的宽度和高度,但手表 window 告诉我我的 getWidth()
和 getHeight
是 300,我真的无法理解,因为在我的 XML 中我将它们设置为每个 100dp,因此函数 return 我以不同的方式测量它们,以及如何将其转换为 dp。
最后,它告诉我 getTop()
和 getLeft
是 700 和 300,正如文档所说,它们是图像相对于 parent 的位置。但是我的 parent 不是线性布局,所以这些数字在屏幕定位方面意味着什么?
所有这些测量方法 return 大小以像素为单位(px
),而不是密度像素(dp
)。如果你想转换它,你可以通过调用获得密度:
float density = getResources().getDisplayMetrics().density;
然后将得到的值除以提供的密度,例如:
int widthDp = (int)(img.getWidth() / density);
您可以使用
从 dp 获取像素
float ht_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, ht, getResources().getDisplayMetrics());
float wt_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, wt, getResources().getDisplayMetrics());
关于定位问题。
getTop
和 getLeft
是相对值,基于您的 parent。由于您的 ImageView
中唯一的 parent 是 LinearLayout
,您实际上是将 ImageView
直接定位在 ActionBar
/ToolBar
下方
也不要使用图像作为圆圈,您可以使用 canvas.drawCircle 轻松绘制它,它占用的内存要少得多。
这是给未来访客的补充回答。
- Left,Top:父视图布局子视图时,
left
为父视图左侧到子视图左侧的距离.同样,top
是父视图顶部到子视图顶部的距离。因此,getLeft()
和getTop()
return视图的左上角相对于其父视图的坐标(不是屏幕上的绝对坐标)。
X, Y: 通常 getX()
和 getY()
会 return 与 getLeft()
和 getTop()
。然而,有时在布局完成后稍微移动视图是很有用的。这可以通过 setTranslationX()
和 setTranslationY()
来完成。如果已设置这些,则 x
和 y
将不同于 left
和 top
,其中
x = left + translationX
y = top + translationY
宽度,高度: 你可以用getWidth()
和getHeight()
找到视图的宽度和高度。这不受翻译的影响。
以上数值均为像素尺寸
我正在编写一个拖放应用程序,并且因为一些参数而感到非常困惑。
请大家帮忙解答
首先,我阅读了 View
class 的文档并得到了以下解释。
getX() : The visual x position of this view, in pixels.
getY() : The visual y position of this view, in pixels.
getWidth() : Return the width of the your view.
getHeight() : Return the width of the your view.
getTop() : Top position of this view relative to its parent.
getLeft() : Left position of this view relative to its parent.
现在我们完成了官方文档,让我们看看我们有什么。
我有一张原始尺寸为 500x500
的图片,名为 circle。
这是我的应用程序的实际屏幕截图
这里是布局xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<ImageView
android:id="@+id/imageView1"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@drawable/circle" />
</LinearLayout>
现在我在担心什么。当我看当地人时,我得到以下信息,这让我很困惑。
我没有发现 getX()
和 getY()
函数有任何问题,因为它们实际上告诉我图像从哪里开始。
如文档所述,getWidth()
和 getHeight
方法 return 视图的宽度和高度,但手表 window 告诉我我的 getWidth()
和 getHeight
是 300,我真的无法理解,因为在我的 XML 中我将它们设置为每个 100dp,因此函数 return 我以不同的方式测量它们,以及如何将其转换为 dp。
最后,它告诉我 getTop()
和 getLeft
是 700 和 300,正如文档所说,它们是图像相对于 parent 的位置。但是我的 parent 不是线性布局,所以这些数字在屏幕定位方面意味着什么?
所有这些测量方法 return 大小以像素为单位(px
),而不是密度像素(dp
)。如果你想转换它,你可以通过调用获得密度:
float density = getResources().getDisplayMetrics().density;
然后将得到的值除以提供的密度,例如:
int widthDp = (int)(img.getWidth() / density);
您可以使用
从 dp 获取像素float ht_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, ht, getResources().getDisplayMetrics());
float wt_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, wt, getResources().getDisplayMetrics());
关于定位问题。
getTop
和 getLeft
是相对值,基于您的 parent。由于您的 ImageView
中唯一的 parent 是 LinearLayout
,您实际上是将 ImageView
直接定位在 ActionBar
/ToolBar
也不要使用图像作为圆圈,您可以使用 canvas.drawCircle 轻松绘制它,它占用的内存要少得多。
这是给未来访客的补充回答。
- Left,Top:父视图布局子视图时,
left
为父视图左侧到子视图左侧的距离.同样,top
是父视图顶部到子视图顶部的距离。因此,getLeft()
和getTop()
return视图的左上角相对于其父视图的坐标(不是屏幕上的绝对坐标)。 X, Y: 通常
getX()
和getY()
会 return 与getLeft()
和getTop()
。然而,有时在布局完成后稍微移动视图是很有用的。这可以通过setTranslationX()
和setTranslationY()
来完成。如果已设置这些,则x
和y
将不同于left
和top
,其中x = left + translationX y = top + translationY
宽度,高度: 你可以用
getWidth()
和getHeight()
找到视图的宽度和高度。这不受翻译的影响。
以上数值均为像素尺寸