簡體   English   中英

如何獲得ImageView的位置?

[英]How to get ImageView position?

我正在制作一個簡單的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玩家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。

您已經實現了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;
            }
        });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM