4

私がやりたいことは、ボタンの端から画面上の点まで線を引くことです...

これにはダイアログフラグメントを使用しています...そして、私が試したすべての関数は常に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) に線を引きます...

画面上のボタンの位置、またはその親ビューに対する好ましい位置を取得するにはどうすればよいですか? まだレイアウトが終わっていないと思うので、あとでどこかに線を引かなければならないのですが、いつ、どこで?

4

1 に答える 1

6

レイアウトが子ビューを配置したら、コールバックを待つ必要があります。レイアウトが配置される前に位置が返されるため、使用しているコードは 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];
}
});
于 2013-11-12T15:31:09.307 に答える