Android – 图片button比例

我正在尝试适合ImageButton图像进行testing,但ImageButton行为方式并不像预期的那样。

最初,我制作了一个988×89像素的PNG图像,并将其放置在一个ImageButton ,该图像处于一个7英寸1024×600像素的模拟屏幕中。 ImageButton988dp x 89dp ,我知道dp与像素不一样,但是对于这个分辨率,我期望图像合理地缩放以占据大部分ImageButton 。 此外,我改为px而不是dp进行testing,并没有什么区别。

但相反, ImageButton使其中的图像非常小(蓝线是ImageButton边界,绿线是中心alignment指示)。

测试图片1

所以问题#1:为什么ImageButton将图像制作得如此之小,当它可以填满大部分屏幕时,即使ImageButton尺寸很宽,

所以为了克服这个问题,我select了adjustViewBounds ,它们没有任何区别,这就带来了问题2: 为什么? 调整视图边界是不是应该调整视图边界?

目前的代码是:

 <ImageButton android:layout_width="988dp" android:layout_height="89dp" android:id="@+id/ibTest" android:src="@drawable/image_top_test" android:layout_centerHorizontal="true" android:adjustViewBounds="true" android:cropToPadding="false" android:layout_below="@+id/hlTopBar" android:background="#00000000" /> 

所以后来我把scaleType改成scaleType ,图像变成:

测试图片2

这对我来说也很奇怪,因为ImageButton与图像具有相同的长宽比,所以我认为它适合100%,但是不合适(图像两边的宽度有差距)。

所以后来我改变scaleType fitXY ,我得到了我的最终结果:

在这里输入图像说明

这似乎是所期望的图像(将fitXY的图像与Photoshop中fitCenter的图像进行fitCenter ,结果显示fitCenter图像稍微呈椭圆形,但由于宽度不匹配而无法显示作为高度的形象)。

所以我的一般问题是(#3):在Android中装入图像的正确方法是什么,并期望它在屏幕上具有规则的大小,为什么缩放非常混乱,我做错了?

我知道有屏幕尺寸的问题和DP等,但缩放不是在一个受控的方式行事, fitCenter使图像椭圆形, fitXY是太依赖于我在XY上设置正确的图像比例,所以我想知道是否我犯了一些错误,应该怎样才是正确的。

最终的XML代码:

 <ImageButton android:layout_width="988dp" android:layout_height="89dp" android:id="@+id/ibTest" android:src="@drawable/image_top_test" android:layout_centerHorizontal="true" android:adjustViewBounds="true" android:cropToPadding="false" android:layout_below="@+id/hlTopBar" android:background="#00000000" android:scaleType="fitXY" /> 

Solutions Collecting From Web of "Android – 图片button比例"

这是一个很好的尝试,你正试图深入到Android的实现。

答案3:

首先提供确切的大小作为高度和宽度不是一个很好的做法在Android中。 如果你想知道为什么,原因是简单的它会尝试挤压/扩大图像的高度和宽度参数中指定的大小。 始终wrap_content是首选参数,以便操作系统根据屏幕大小自动调整。因此,您需要修改为:

 <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ibTest" android:src="@drawable/image_top_test" android:layout_centerHorizontal="true" android:adjustViewBounds="true" android:cropToPadding="false" android:layout_below="@+id/hlTopBar" android:background="#00000000" android:scaleType="fitXY" /> 

答案1:

为什么ImageButton的图像大到这么小,当它可以填满大部分的屏幕时,即使ImageButton的尺寸很宽,

答案与上面提到的类似。 您的图片尺寸将比根据您提及的尺寸计算的Android操作系统小得多,并将设备分辨率考虑在内。 使用http://coh.io/adpi/ (或http://density.brdrck.me/ )网站来简化计算。 始终把mdpi作为标准或基础。 假设你的图像大小为988X89,以mdpi为单位,它将是:

在这里输入图像说明 现在,就好像您正在试图在xhdpi屏幕上查看988px X 89px的图像,Android Os计算出的图像大小为1976px x 178px,比您给定的图像大小988px x 89px大得多。 这就是为什么你会得到大部分区域为白色的小图像。

如何纠正? 通过Android规范来支持不同密度的屏幕。 这需要您专门为hdpi,mdpi,xhdpidevise图像,并将它们放在适当的文件夹中:

  MyProject/ res/ drawable-xhdpi/ awesomeimage.png drawable-hdpi/ awesomeimage.png drawable-mdpi/ awesomeimage.png drawable-ldpi/ awesomeimage.png 

参考: http : //developer.android.com/training/multiscreen/screendensities.html了解更多详情

在活动创造..你可以得到屏幕分辨率…并根据屏幕Widht和高度…调整图像的大小,并设置图像..这样你的比例将是相同的每种types的设备..

调整图像大小:1.获取屏幕宽度和高度2.根据屏幕分辨率设置图像大小3.将图像设置为视图

你还应该检查imageButton是否有填充,我创build了一个看起来非常相似的图像,尽pipefitXY能够工作,但是改变图像的大小却变得非常容易混淆。 然而,我意识到在图像的每个边缘都有100p的填充,因此边界在图像的每一边都是100dp。