如下图所示。我有一个relative layout
。我的ImageView
相同,我需要在视图开始和此ImageView之间获得像素差距。
我的活动如下。请指教。我尝试了各种方法,如topY()
,但无法找到解决方案。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<LinearLayout
android:id="@+id/main_ruler_linear_layout"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:orientation="horizontal"
>
</LinearLayout>
<ImageView
android:id="@+id/line_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/line"/>
<EditText
android:id="@+id/txtRulerCenterPosition"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/main_ruler_linear_layout"
android:layout_marginRight="17dp"
android:layout_marginTop="16dp"
android:ems="10"
android:textSize="5dp"
android:focusable="false"/>
</RelativeLayout>
答案 0 :(得分:5)
计算一个视图底部与另一个视图顶部之间的距离:
View oneView = ...;
View otherView = ...;
RectF oneRect = calculeRectOnScreen(oneView);
RectF otherRect = calculeRectOnScreen(otherView);
float distance = Math.abs(oneRect.bottom - otherRect.top);
util方法:
public static RectF calculeRectOnScreen(View view) {
int[] location = new int[2];
view.getLocationOnScreen(location);
return new RectF(location[0], location[1], location[0] + view.getMeasuredWidth(), location[1] + view.getMeasuredHeight());
}
在某些情况下,您需要将view.getLocationOnScreen
替换为view.getLocationInWindow
。
答案 1 :(得分:0)
如果两个视图在视图层次结构中位于同一级别,则可以使用以下方法确定它们之间的垂直距离(以像素为单位)。
public static int getDistanceBetweenViews(View firstView, View secondView) {
int[] firstPosition = new int[2];
int[] secondPosition = new int[2];
firstView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
firstView.getLocationOnScreen(firstPosition);
secondView.getLocationOnScreen(secondPosition);
int b = firstView.getMeasuredHeight() + firstPosition[1];
int t = secondPosition[1];
return Math.abs(b-t);
}