简体   繁体   English

GridLayout子节点的getLocationOnScreen

[英]getLocationOnScreen of a child of GridLayout

I'm attempting to get the x/y of an imageview within a GridLayout but my log keeps showing X & Y: 0 0 any ideas? 我试图在GridLayout中得到一个imageview的x / y但是我的日志一直显示X & Y: 0 0任何想法?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/root" >

    ...

    <GridLayout
        android:id="@+id/gridLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:columnCount="3"
        android:rowCount="5" >

        ...

        <ImageView
            android:id="@+id/fivetwo"
            android:layout_width="75dp"
            android:layout_height="75dp"
            android:contentDescription="@string/gameboard"
            android:gravity="center"
            android:src="@drawable/tile" 
            android:layout_columnSpan="1"
            android:layout_rowSpan="1"  />

heres the java: 继承人java:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_level);
....
ImageView temp = (ImageView) findViewById(R.id.fivetwo);
            int originalPos[] = new int[2];
            temp.getLocationOnScreen( originalPos );
            Log.i(TAG, "X & Y: " + originalPos[0] + " " + originalPos[1]);

...

Remember: getX() and getY() return 0 if components are not drawn yet (in onCreate(){} ) . 请记住: 如果尚未绘制组件,则 getX()getY()返回0 (在onCreate(){}中)


To find out the position of a view as soon as it is ready: 要在view准备就绪后立即找到它的位置:

Add a tree observer to the layout. 将树观察器添加到布局中。 This should return the correct position. 这应该返回正确的位置。 onCreate is called before the layout of the child views are done. 在完成子视图的布局之前调用onCreate。 So the width and height is not calculated yet. 所以宽度和高度尚未计算。 To get the height and width. 获得高度和宽度。 Put this on the onCreate method 把它放在onCreate方法上

final ImageView temp = (ImageView) findViewById(R.id.fivetwo);
ViewTreeObserver vto = temp.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
        temp.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
        int x  = temp.getX();
        int y = temp.getY();
        Log.v(TAG, String.format("X:%d Y:%d",x,y);
    } 
});

You need to wait for the callback when the layout has placed the children views. 布局放置子视图时,您需要等待回调。 The code you are using returns 0 because the position is returned before the layout is placed. 您使用的代码返回0,因为在放置布局之前返回位置。 Use this code: 使用此代码:

temp.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        getViewTreeObserver().removeGlobalOnLayoutListener(this);

        int[] locations = new int[2];
        temp.getLocationOnScreen(locations);
        int x = locations[0];
        int y = locations[1];
    }
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM