我正在制作一个简单的安卓游戏,我遇到了一个问题,因为我无法获得我的玩家开始位置。
玩家在游戏开始时以屏幕为中心,我希望得到它的位置,我尝试了很多方法:
ImageView knight = findViewById(R.id.knight);
Point knightPos = new Point((int)knight.getX(), (int)knight.getY());
//or
Point knightPos = new Point(knight.getLeft(), knight.getTop());
//or
Rect r = knight.getDrawable().getBounds();
knightPos = new Point(r.left, r.top);
一切都归还给我0,0
也许是因为我使用layout_gravity
来对待玩家?
我的XML播放器图片代码:
<ImageView
android:id="@+id/knight"
android:layout_width="60dp"
android:layout_height="60dp"
android:src="@drawable/knight"
android:layout_gravity="center"/>
我坚持使用它,如果是因为layout_gravity,你能告诉我另一种方法来集中它吗?
编辑:
之前我在java代码中集中了玩家,但是我不知道如何获得它的大小坐标,似乎图像坐标没有在onCreate方法中初始化,因为大小也是0,0
,以定位它我正在使用:
Display display = getWindowManager().getDefaultDisplay();
screenSize = new Point();
display.getSize(screenSize);
knight.setX(screenSize.x / 2 - knight.getWidth() / 2);
knight.setY(screenSize.y / 2 - knight.getHeight() / 2);
但就像我说knight.getHeight()
和knight.getWidth()
是0。
答案 0 :(得分:0)
您已实施 ViewTreeObserver
这是一个例子: -
private int finalHeight, finalWidth;
@Override
protected void onCreate(Bundle savedInstanceState) {
.....
final ImageView iv = (ImageView)findViewById(R.id.scaled_image);
final TextView tv = (TextView)findViewById(R.id.size_label);
ViewTreeObserver vto = iv.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
public boolean onPreDraw() {
iv.getViewTreeObserver().removeOnPreDrawListener(this);
finalHeight = iv.getMeasuredHeight();
finalWidth = iv.getMeasuredWidth();
tv.setText("Height: " + finalHeight + " Width: " + finalWidth);
return true;
}
});