Android在屏幕上获取视图位置

时间:2017-04-14 08:56:34

标签: android view

在项目中,我尝试在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。

那么我怎么能解决这个问题呢?非常感谢。

3 个答案:

答案 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);
    }
}

同时检查how to get view's position in coordinates?

答案 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)。