如何为1x1的Android小部件创建清晰的背景图片?

13
我正在创建一个1x1的小部件,但无论我尝试什么,都无法使背景图像看起来好看而清晰。我已经阅读了几乎所有可以找到的资源,但仍然不能成功。
我是为HTC Desire/Nexus 1设计的,并且希望有人告诉我在Photoshop中创建背景时要使用什么dpi/高度/宽度(当前使用72/100/80)。一旦我能够在测试设备上看到良好的效果,我就会考虑其他设备的分辨率问题。
另外,如果@layout/main.xml和Widget_Provider.xml文件中需要加入任何特殊内容,请告诉我。我只是找不到任何关于1x1小部件的示例,目前只有以下内容:
main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget"
android:layout_width="fill_parent"
android:orientation="vertical"
android:background="@drawable/background" 
android:layout_gravity="center" 
android:layout_height="wrap_content">

Widget_Provider.xml

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="72dip"
android:minHeight="72dip"
android:updatePeriodMillis="6000000"
android:initialLayout="@layout/main"
/>

非常感谢您提供的帮助。

1个回答

18
你可能需要查看谷歌的支持多屏幕尺寸文档。基本上在这里发生的是,Android设备上的屏幕具有不同的像素密度。这些被归类为低、中、高(ldpi、mdpi、hdpi)。如果一个资源不够大以适应更高密度的屏幕,它会被放大到正确的大小 - 这可能是发生在你身上的情况。
Nexus One的DPI大约为250,将其归入hdpi类别。使用谷歌公式(number of cells * 74) - 2来计算1x1小部件的dp,会使小部件的尺寸为72x72 dp。
从dp到像素的转换为:
pixels = dp * (density / 160)

因此,对于一个72x72 dp的图像,基于密度的相应图像大小为:

ldpi  (120 DPI) = 72 * (120 / 160) == 54 x 54 pixels
mdpi  (160 DPI) = 72 * (160 / 160) == 72 x 72 pixels
hdpi  (240 DPI) = 72 * (240 / 160) == 108 x 108 pixels
xhdpi (320 DPI) = 72 * (320 / 160) == 144 x 144 pixels

使用这些公式来创建你的素材,你将得到清晰的图像。

3
感谢您的解释。由于某种原因,Google 的文档对我来说并没有很好地理解......我使用了您的公式,并制作了一个快速的 Web 应用程序/计算器,以便于复用:http://android.npike.net/widgetcalculator/。 - NPike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接