首先让我介绍一下,我是Android和移动设备编程的新手,我之前曾在QNX上运行的嵌入式系统上工作过。 我希望我会尊重这个似乎非常严格的论坛的规则; - )。
我正在写一个应用程序,我在其中声明了一个欢迎屏幕的布局,其中包括图像视图。 在xml文件中的此图像视图中放置了第一个图像,但稍后我将在应用程序代码中将其替换为另一个图像,并且第二个图像可能具有不同的大小。
我的问题是调整第二张图片的大小并居中。根据我的测试,通过使用Lint中的资源它是非常自动的,但是程序看起来并不那么明显,即使我在文档中读到它应该是相似的。 在阅读了几个关于这个主题的帖子后,我终于有了疑问;我可以将图像置于ImageView中心,还是必须将ImageView置于可用空间中心? 我尝试了第一个解决方案但没有成功。
所以我的布局是:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fragmentInit"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.cabbonline.ndguidelt.MainActivity" >
<TextView
android:id="@+id/textViewAppName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/textViewAppVersion"
android:layout_centerHorizontal="true"
android:text="@string/app_name" />
<TextView
android:id="@+id/textViewAppVersion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/TextViewDevelopCabb"
android:layout_centerHorizontal="true"
android:text="@string/app_version" />
<TextView
android:id="@+id/TextViewDevelopCabb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/imagecaBB"
android:layout_centerHorizontal="true"
android:text="@string/develop_cabb" />
<ImageView
android:id="@+id/imagecaBB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/textViewCabbUrl"
android:layout_centerHorizontal="true"
android:contentDescription="@string/logo_caBB"
android:maxHeight="150dp"
android:src="@drawable/logo_cabb_100x51_or" />
<TextView
android:id="@+id/textViewCabbUrl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="@string/cabb_url" />
<ImageView
android:id="@+id/imageSite"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/textViewAppName"
android:contentDescription="@string/logo_Site"
android:scaleType="centerInside"
android:src="@drawable/image_guide_320x400" />
</RelativeLayout>
在这里我可以说&#34; imageSite&#34; ImageView显示良好,居中并占据整个区域。右。
现在我有一段代码在同一个ImageView中替换这个图像:
Bitmap imageSite = site.getSitePictureBitmap();
if (imageSite != null) {
imageGuide.setImageBitmap(imageSite);
}
如果我只这样做,尽管en center_inside标志,新的位图,较小和矩形水平比较第一个几乎是sqaure,图像显示在ImageView的右下角非常小,或该区域由ImageView拍摄,Idon真的不知道。
所以我添加这段代码来调整它的大小:
imageSite = site.getSitePictureBitmap(); // here I read the bitmap in a file.
if (imageSite != null) {
float maxWidth = imageGuide.getWidth();
float maxHeight = imageGuide.getHeight();
float width = imageSite.getWidth();
float height= imageSite.getHeight();
float hRatio = width / maxWidth;
float vRatio = height / maxHeight;
if (Math.abs(1 - hRatio) < Math.abs(1 - vRatio)) {
// We match horizontal available size
width = width / hRatio;
height = height / hRatio;
} else {
width = width / vRatio;
height = height / vRatio;
}
Bitmap reSizedBitmap = Bitmap.createScaledBitmap(imageSite, (int)width, (int)height, true);
imageGuide.setImageBitmap(reSizedBitmap);
因此图像现在具有良好的宽度,但由于其垂直尺寸低于第一张图片,因此它接近textViewAppName。因此,作为布局描述中ImageView的规则,我想知道我的图像实际上是不在ImageView的中心,而我的问题来自于ImageView现在的高度较小而且不是#39; t填满布局顶部的整个空间。
我还想知道设置新图像是否不会重置定位标记。我没有在AFAIR文件中看到这一点,但...... 所以我在setImagebitmap()之后添加了这一行而没有成功:
imageGuide.setScaleType(ScaleType.CENTER_INSIDE);
在这种情况下,您能告诉我更多关于ImageView行为的信息,以及如何在可用空间的中心垂直放置我的图像。我必须计算填充吗?
此致 人