我有与Android相关的问题: 我试图在我的设备的屏幕上居中一个徽标,但它没有正确定位。 我正在使用以下功能:
public void ImageCentered(int ID){
ImageView iv = (ImageView) findViewById(ID);
int x = 0;
int y = 0;
RelativeLayout.LayoutParams position = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
x = (screenWidth/2)-(iv.getWidth()/2);
y = (screenHeight/2)-(iv.getHeight()/2);
position.setMargins(x, y, 0, 0);
iv.setLayoutParams(position);
}
这可能会奏效,但它不会。图像在此图像中略微向右和向下放置: https://www.dropbox.com/s/tf7r1u1xqcmb9t9/2014-08-16%2018.36.04.png
现在,奇怪的是,当我使用以下代码时:
public void ImageCentered(int ID){
ImageView iv = (ImageView) findViewById(ID);
int x = 0;
int y = 0;
RelativeLayout.LayoutParams position = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
x = (screenWidth/2)-(iv.getWidth()/2);
y = (screenHeight/2)-(iv.getHeight()/2);
position.setMargins(x, y, 0, 0);
Message(IntToStr(x)+", "+IntToStr(y));
iv.setLayoutParams(position);
}
这是结果: https://www.dropbox.com/s/mjw80zlzkav6dzs/2014-08-16%2018.41.16.png
旁注:消息()功能中的文字无关紧要,也不在 ImageCentered()功能中。
我没有在我的OnCreate()中调用该函数,因为图像的宽度和高度总是返回0,所以我查了一下,发现了这个:
@Override
public void onWindowFocusChanged(boolean hasFocus){
ImageCentered(R.id.image);
}
这段代码位于我的 MainActivity.java 文件中,而 ImageCentered()函数位于我的 UtilLib.java 文件中。
所以,我想知道:这里发生了什么?当我弹出消息()时,为什么代码可以正常工作? 当然,我可以尝试对数据进行硬编码,但是更小/更大的屏幕呢?
我希望Android大师可以帮助我,因为我已经在这方面苦苦挣扎了很长时间。
修改 按下" OK"在我的消息上: https://www.dropbox.com/s/a7lu6588hy1opw7/2014-08-16%2018.51.55.png
我的猜测是我的问题就在那里,但在点击" OK"按钮再一次,数据是" 492,207"再次。 划伤头
答案 0 :(得分:1)
假设你的代码是ImageView在RelativeLayout中,你也可以这样做:
// get imageview layout params or create new ones
RelativeLayout.LayoutParams params = imageView.getLayoutParams();
params.addRule(RelativeLayout.CENTER_HORIZONTAL);
这样,图像将自动居中而无需所有这些手动计算!。
您也可以使用
在XML中指定它 <ImageView .....
android:layout_centerHorizontal="true"/>
答案 1 :(得分:0)
我最终决定只对 x和y 坐标进行硬编码,然后使用某种缩放转换来正确定位它们,除非有人能为我提供更好的方法解决这个问题。
<强>更新强> 因此,经过一段时间的谷歌搜索(再次),我终于找到了答案并创建了两个函数:
public int GetImageHeight(int ID){
ImageView iv = (ImageView)findViewById(ID);
iv.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
iv.layout(0, 0, iv.getMeasuredWidth(), iv.getMeasuredHeight());
return iv.getMeasuredHeight();
}
public int GetImageWidth(int ID){
ImageView iv = (ImageView)findViewById(ID);
iv.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
iv.layout(0, 0, iv.getMeasuredWidth(), iv.getMeasuredHeight());
return iv.getMeasuredWidth();
}
您所要做的就是传递您在xml文件中创建的图像的ID,如下所示:
GetImageHeight(R.id.logo)