(0,0) 位于屏幕中间的视图的坐标
(0,0) coordinates of a view that is placed in the middle of the screen
我在屏幕中央放置了一个 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());
}
您的问题可能是因为 ViewGroup 没有立即布局其子项。
您可以使用 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);
}
});
好的,问题是您正在询问视图的位置,但视图尚未布置,您可以使用这样的 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);
}
}
};
我在屏幕中央放置了一个 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());
}
您的问题可能是因为 ViewGroup 没有立即布局其子项。
您可以使用 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);
}
});
好的,问题是您正在询问视图的位置,但视图尚未布置,您可以使用这样的 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);
}
}
};