如何获得ImageView的位置?

时间:2017-12-31 16:07:35

标签: java android

我正在制作一个简单的安卓游戏,我遇到了一个问题,因为我无法获得我的玩家开始位置。

玩家在游戏开始时以屏幕为中心,我希望得到它的位置,我尝试了很多方法:

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。

1 个答案:

答案 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;
            }
        });