我可能会问一个基本问题,但另一方面我搜索了互联网,但我无法找到解决问题的正确方法。
我已经实施了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>
答案 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)
布局
代码(未测试)
// 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