我将一个ImageView放置在屏幕的中央(为此我使用了android:layout_centerInParent="true"
)。但是,当我调用方法getX()
和getY()
时,我会收到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());
}
答案 0 :(得分:1)
好的问题是你要求视图的位置,但视图还没有被放置,你可以使用这样的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);
}
}
};
答案 1 :(得分: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);
}
});