Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get distance between views in pixels?

As shown in below image. I do have one relative layout. I have my ImageView in same and I need to get gap in pixels between view starts and this ImageView. My activity is as below. Please advice. I tried various ways like topY() but couldn't find solution.

Find distance in pixcel

    <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>
like image 797
Ketan Avatar asked Dec 01 '13 12:12

Ketan


1 Answers

To calculate the distance between the bottom of the one view and the top of the other view:

View oneView = ...;
View otherView = ...;

RectF oneRect = calculateRectOnScreen(oneView);
RectF otherRect = calculateRectOnScreen(otherView);

float distance = Math.abs(oneRect.bottom - otherRect.top);

The util method:

public static RectF calculateRectOnScreen(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());
}

In some cases you need to replace the view.getLocationOnScreen to view.getLocationInWindow.

like image 157
Douglas Nassif Roma Junior Avatar answered Sep 29 '22 15:09

Douglas Nassif Roma Junior