2016-08-17 39 views
1

我有一個放置在屏幕中心的ImageView(爲此我使用了android:layout_centerInParent="true")。但是當我打電話給方法getX()getY()我收到他們兩個0(零)。(0,0)放置在屏幕中間的視圖座標

我認爲問題是xml屬性android:layout_centerInParent="true"。即它實際上並沒有改變屏幕上視圖的位置。

這裏的XML文件內容:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/fundal"> 
    <ImageView 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:id="@+id/imageView" 
     android:src="@drawable/playbtn" 
     android:layout_centerInParent="true" /> 
</RelativeLayout> 

這裏就是我所說的方法:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_drag); 

    ImageView img =(ImageView)findViewById(R.id.imageView); 

    Log.d("DEBUG_TAG", "Coordinates: "+img.getX()+" "+img.getY()); 
} 
+1

請張貼的代碼xml佈局和您要調用的代碼getX() – lelloman

回答

0

您的問題,可能會造成的,因爲ViewGroups不立即佈置自己的孩子。

您可以使用globalLayoutListener來查看視圖何時完全初始化並設置了座標。

// view will be the parent view containing your ImageView. 
view.getViewTreeObserver().addOnGlobalLayoutListener(
    new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      // Here you can call the getX() and getY()... 

      // Don't forget to remove your listener when you are done with it. 
      view.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
     } 
    }); 
1

好了,問題是你問的視圖的位置,但鑑於尚未laied出來,你可以使用OnGlobalLayoutListener這樣

final View rootView = findViewById(R.id.root_view); 
final ImageView img = (ImageView) findViewById(R.id.image_view); 
ViewTreeObserver viewTreeObserver = rootView.getViewTreeObserver(); 
ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 

     Log.d("DEBUG_TAG", "Coordinates: "+img.getX()+" "+img.getY()); 

     if (Build.VERSION.SDK_INT < 16) { 
      rootView.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
     } else { 
      rootView.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
     } 
    } 
};