[英]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.