如何获得屏幕顶部和儿童布局之间的距离

时间:2014-07-13 18:51:32

标签: android

我可能会问一个基本问题,但另一方面我搜索了互联网,但我无法找到解决问题的正确方法。

我已经实施了tic tac toe游戏,当我把胜利者放在x' x'或者' o' o我想通过获胜的标志画出交叉线。我能做到,但这条线的位置对我来说是不受欢迎的。我尝试了一些描述开始x,y和结束x,y的参数,但它没有用。

这是绘制线的示例描述(我不写我自己的类的实现,它只是绘制具有指定位置的行:)

 View tl = screen.findViewById(R.id.custom_board_table_row1);
            int x1 = tl.getLeft();
            int x2 = (tl.getTop()+tl.getBottom())/2;
            int x3 =tl.getRight();
            int x4 =(tl.getBottom()+tl.getTop())/2;
            wl = new DrawWiningLine(context,x1,x2,x3,x4,color);

(声誉不够,所以我将链接粘贴到屏幕上)http://i.stack.imgur.com/b5gkm.png

这条画线应该跨越这些' X'但它高于tablelayout。我在文档中发现getLeft()等方法返回此视图相对于其父级的位置。我知道我应该计算偏移量,但我不知道如何。我在考虑getLocationOnScreen和getLocationInWindow,但我认为这对我来说还不够。

你能帮我说说怎么做: int offsetX = ...;

int offsetY = ...;

让我的代码正常工作?

感谢您的建议。如果没有它我无法帮助我,我也会粘贴xml文件。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/custom_board_screen"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:textSize="30dp"
        android:id="@+id/custom_board_player1_text"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:textSize="30dp"
        android:id="@+id/custom_board_player2_text"
    />
    <TableLayout
        android:id="@+id/custom_board_table"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true">

        <TableRow
            android:id="@+id/custom_board_table_row1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <board.TrippleToggleButton android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
            <View style="@style/DividingVerticalLine"
                />
            <View style="@style/DividingHorizontalLine"
                android:id="@+id/custom_board_dividing_horizontal_1"/>

            <board.TrippleToggleButton android:layout_width="wrap_content" />
            <View style="@style/DividingVerticalLine"/>
            <board.TrippleToggleButton
                />
        </TableRow>
        <TableRow
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#ff000000">
            <View style="@style/DividingHorizontalLine"/>
         </TableRow>

        <TableRow
            android:id="@+id/custom_board_table_row2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <board.TrippleToggleButton
                />
            <View style="@style/DividingVerticalLine"/>
            <View style="@style/DividingHorizontalLine"/>
            <board.TrippleToggleButton
               />
            <View style="@style/DividingVerticalLine"/>
            <board.TrippleToggleButton
                />
        </TableRow>
        <TableRow
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#ff000000">
            <View style="@style/DividingHorizontalLine"/>
        </TableRow>

        <TableRow
            android:id="@+id/custom_board_table_row3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <board.TrippleToggleButton
               />
            <View style="@style/DividingVerticalLine"/>
            <View style="@style/DividingHorizontalLine"/>
            <board.TrippleToggleButton
                />
            <View style="@style/DividingVerticalLine"/>
            <board.TrippleToggleButton
                />
        </TableRow>




    </TableLayout>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:text="@string/reset"
        android:textAlignment="center"
        android:id="@+id/custom_board_reset_button"
        android:layout_marginBottom="30dp"
        android:visibility="invisible"/>
</RelativeLayout>

3 个答案:

答案 0 :(得分:1)

你可以在屏幕上使用getLocation

example : int coords[]={0,0};
view.getLocationOnScreen(coords);
int absoluteTop = coords[1];
int absoluteBottom= coords[1]+view.getHeight();

llly int absoluteLeft= coords[0];
int absoluteRight = coords[0]+view.getWidth();

答案 1 :(得分:0)

查看View.getLocationOnScreen()和View.getLocationInWindow()

答案 2 :(得分:0)

布局

  • 要获得垂直线位置,请为每个board设置id。第1行中的TrippleToggleButton

代码(未测试)

// t1.getLeft() and t1.getTop() returns 0 (with no margin or padding)

// if DrawWiningLine() base position is top left corner of custom_board_screen
View tableView = screen.findViewByID(custom_board_table);
int offsetX = tableView.getLeft();
int offsetY = tableView.getTop();

// horizontal line start pos (x1, x2), end pos (x3, x4)
// t1 position is relative to t1's parent(== custom_board_table) position
View tl = screen.findViewById(R.id.custom_board_table_row1);
int x1 = t1.getLeft() + offsetX;
int x3 = t1.getRight() + offsetX;
int x2 = t1.getTop() + t1.getHeight() / 2 + offsetY;
DrawWiningLine wl = new DrawWiningLine(context,x1,x2,x3,x2,color); // x4 == x2

// vertical line start pos (x1, x2), end pos (x3, x4)
View t3 = screen.findViewById(R.id.custom_board_table_row3); // get bottom from row3
View cellTop1 = screen.findViewByID(cell_top_left); // get left and right from cells
int x5 = cellTop1.getLeft() + cellTop1.getWidth() / 2 + offsetX;
int x6 = t1.getTop() + offsetY;
int x8 = t3.getBottom() + offsetY;
DrawWiningLine wl2 = new DrawWiningLine(context,x5,x6,x5,x8,color); // x7 == x5