Car*_*ine 13 android view layoutparams
我正在编写一个拖放应用程序,因为一些参数而感到非常困惑.
请帮忙搞清楚.
首先,我阅读了该View课程的文档并得到了以下解释.
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叫做圆圈.

这是我的应用程序的实际屏幕截图

这是布局的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>
Run Code Online (Sandbox Code Playgroud)
现在我关心的是什么.当我看到我的当地人时,我得到以下内容,这让我很困惑.

我没有看到getX()和getY()函数有任何问题,因为它们实际上显示了图像的开始位置.
作为文档状态,则getWidth()和getHeight方法返回的宽度和视图的高度,但在监视窗口告诉我,我getWidth()和getHeight是300,我实在无法理解,因为在我的XML,我将它们100dp每个,所以做函数以不同的度量返回给我,如何将其转换为dp.
最后,它告诉我,getTop()并且getLeft是700和300,正如文档所说,它们是图像相对于它的父级的位置.但是我的父母不是线性布局,那么这个数字对于屏幕定位意味着什么呢?
所有这些测量方法都返回像素(px)的大小,而不是密度像素(dp).如果你想转换它,你可以通过调用以获得密度:
float density = getResources().getDisplayMetrics().density;
Run Code Online (Sandbox Code Playgroud)
然后将获得的值除以提供的密度,例如:
int widthDp = (int)(img.getWidth() / density);
Run Code Online (Sandbox Code Playgroud)
这是对未来访客的补充答案。

left是从父视图的左侧到子视图的左侧的距离。同样,top是从父视图的顶部到子视图的顶部的距离。因此,getLeft()与getTop()视图相的左上角的坐标返回其父视图(未在画面上绝对坐标)。X,Y:通常getX()和getY()将返回与getLeft()和相同的东西getTop()。但是,有时在将视图布置好后将其稍微移动会很有用。这可以通过setTranslationX()和来完成setTranslationY()。如果这些已设置则x和y将不同于left并且top,其中
x = left + translationX
y = top + translationY
Run Code Online (Sandbox Code Playgroud)宽度,高度:您可以找到宽度,并与视线的高度getWidth()和getHeight()。这不受翻译的影响。
以上数值均为像素尺寸。
您可以从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());
Run Code Online (Sandbox Code Playgroud)
截至定位问题.
getTop并且getLeft是相对值并且基于您的父级.既然你的唯一的父母ImageView是LinearLayout你有效地定位你的ImageView正下方ActionBar/ToolBar
也不要使用圆形图像,你可以使用canvas.drawCircle轻松地绘制它需要更少的内存.
| 归档时间: |
|
| 查看次数: |
16862 次 |
| 最近记录: |