在项目中,我尝试在RelativeLayout
中动态添加View对象 ImageView card = new ImageView(this);
card.setImageResource(R.drawable.card);
RelativeLayout.LayoutParams layoutParams =
new RelativeLayout.LayoutParams(225, 315);
layoutParams.addRule(RelativeLayout.CENTER_VERTICAL);
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
layoutParams.rightMargin = 40;
parent.addView(card, layoutParams);
过了一会儿,当我试图获取此View的位置时,没有方法可行。 正如我在Studio的调试视图中发现的那样,View的布局框架及其所有的类似于mLeft ......的值都为0。
那么我怎么能解决这个问题呢?非常感谢。
答案 0 :(得分:5)
可能是因为你在onLayout发生之前试图找到位置。
您可以尝试这样的事情:
ViewTreeObserver vto=view.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener(){
@Override public void onGlobalLayout(){
int [] location = new int[2];
view.getLocationOnScreen(location);
x = location[0];
y = location[1];
view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
}
答案 1 :(得分:2)
您可以使用这些代码获取位置:
int loc[]=new int[2];
card.getLocationOnScreen(loc);
int x=loc[0];
int y=loc[1];
如果您想获取位置,则必须等待视图完成测量。
答案 2 :(得分:1)
在屏幕上查找视图位置的简单,最佳方法。
view.post(() -> {
xPosition = view.getX());
yPosition = view.getY();
};
使用 view.post()
的原因是,如果您尝试不使用post而获取视图位置onCreate()
方法,则由于该视图在屏幕上膨胀需要几毫秒的时间,因此您会得到(0,0)。