gpt4 book ai didi

android - 获取对话框中 View 相对于父 View 的位置

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:29:48 26 4
gpt4 key购买 nike

我想做的是,从按钮的边缘到屏幕上的一点画一条线...

我为此使用了一个对话框 fragment ...我尝试的所有函数总是返回 0 点...

我试过以下:

@Override
protected Dialog createDialog(Bundle savedInstanceState, FragmentActivity activity)
{
Dialog d = builder.create();

View v = LayoutInflater.from(activity).inflate(R.layout.dialog, null);
builder.setView(v);

// custom view by my which draws simple lines between points...
LineDrawView ldv = new LineDrawView(getActivity());
ldv.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

((RelativeLayout)v).addView(ldv);
Dialog d = builder.create();

button = ((Button) v.findViewById(R.id.button));
int[] pos = new int[2];
button.getLocationInWindow(pos);

// tried following ways, all always return p(0, 0)
// button.getLocationInWindow(pos);
// Debugger.d("x: " + pos[0] + ", y: " + pos[1], "POS");

// button.getLocationOnScreen(pos);
// Debugger.d("x: " + pos[0] + ", y: " + pos[1], "POS");

// float x = button.getLeft();
// float y = button.getTop();
// Debugger.d("x: " + x + ", y: " + y, "POS");


ldv.addLine(new Point(pos[0], pos[1]), new Point(pos[0] + 30, pos[1]), Color.RED);
ldv.invalidate();
return d;
}

它总是从 p(0, 0) 到 p(0, 30) 画一条线...

如何获得按钮在屏幕上的位置或相对于其父 View 的最佳位置?我想,它们的布局还没有完成,所以我必须稍后在某个地方画线,但何时何地?

最佳答案

需要等待布局放置好 subview 时的回调。您正在使用的代码返回 0,因为在放置布局之前返回位置。使用此代码:

YourView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
public void onGlobalLayout() {
getViewTreeObserver().removeGlobalOnLayoutListener(this);

int[] locations = new int[2];
YourView.getLocationOnScreen(locations);
int x = locations[0];
int y = locations[1];
}
});

关于android - 获取对话框中 View 相对于父 View 的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19932253/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com