public class Terrain {
public Bitmap tile;
public InputStream is;
public ObjectAnimator moveLeft;
public Drawable tileDrawable;
public Rect bounds;
public ImageView terrainImage;
public int top = 0;
public int bottom = 0;
public int left = 0;
public int right = 0;
}
我创建的这个TerrainFactory
课程
public class TerrainFactory {
public Terrain createNewTerrain(Activity activity, RelativeLayout relativeLayout,
final ArrayList<Terrain> terrainArrayList){
terrain = new Terrain();
terrain.is = activity.getResources().openRawResource(+R.drawable.game_tile);
terrain.tile = BitmapFactory.decodeStream(terrain.is);
terrain.tileDrawable = new BitmapDrawable(activity.getResources(), terrain.tile);
terrain.terrainImage = new ImageView(activity);
terrain.terrainImage.setImageDrawable(terrain.tileDrawable);
relativeLayout.addView(terrain.terrainImage);
terrain.terrainImage.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
public void onGlobalLayout() {
terrain.left = terrain.terrainImage.getLeft();
terrain.right = terrain.terrainImage.getRight();
terrain.bottom = terrain.terrainImage.getBottom();
terrain.top = terrain.terrainImage.getTop();
Log.d("Left ", "Bounds are " + terrain.left);
Log.d("Right ", "Bounds are " + terrain.right);
Log.d("Bottom ", "Bounds are " + terrain.bottom);
Log.d("Top ", "Bounds are " + terrain.top);
terrain.terrainImage.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
return terrain;
}
}
问题是,当我实际运行它时,这就是我的日志告诉我的内容:
另外,我认为顶部的操作栏可能与此有关,但我不太确定。
它不应该告诉我我的图像的上限是0.我回来的所有四个数字都是错的。
另外,我知道我不应该把两个问题放在一个,但我究竟如何摆脱最左边恼人的25像素边距? 我已经尝试进入dimens.xml并将所有边距设置为0dp,但它似乎无法修复它。
不确定这是否相关,但这里是PlayActivity.xml
,其中一切都在发生:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.wordpress.somegame.runrun.activity.PlayActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_alignParentBottom="true"
android:id="@+id/relativeLayout"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
></RelativeLayout>
</RelativeLayout>
更新:
似乎如果我在非嵌套ImageView
中创建RelativeLayout
,它会返回正确的数字,除了顶部,这可能是因为操作栏而关闭。
但是,如果我在嵌套的RelativeLayout
中制作图像,我最终会得到完全错误的数字,所以我认为它可能与我的XML有关,也许?但我似乎无法弄清楚为什么它适用于非嵌套RelativeLayout
,但对嵌套RelativeLayout
无效。
答案 0 :(得分:0)
getLeft()
,getRight()
,getBottom()
和getTop()
返回相对于父级的值,而不是屏幕坐标。由于您将ImageView
添加到RelativeLayout
作为没有特殊布局参数的第一个孩子,因此它将具有(顶部,左侧)==(0,0)。
对于额外的25个像素,您可以在布局上放置一些彩色背景以查看其跨度;或者您可以使用ddms检查布局转储。我怀疑它是你主题的一部分。开始在布局上将边距和填充设置为0,以查看是否是这种情况。