我从服务器收到九个补丁图片,显示在我的Android应用程序的UI中。这是一个很难的要求,因此我无法将九个补丁编译到APK中。似乎Android将识别并显示任何PNG作为九个补丁,这意味着图像的拉伸遵循外部像素指示的轮廓。问题是Android仍然显示文件的1px边界。所以我试图将View上的填充设置为-1,这样就不会显示该行。这似乎不起作用,因为黑线仍在显示。
<ImageView
android:id="@+id/stub_image"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="centerCrop"
android:padding="-1px"
android:cropToPadding="true"
android:src="@drawable/stub_image"
android:contentDescription="@string/image_title" />
如何将此布局设置为不在PNG周围显示1px边界?我是否可以在不覆盖View类的情况下执行此操作并手动查找像素?
解
在链接到@alex的帖子上的第一个选项后,我正在一个空的解决方案中编译九个补丁文件。然后从我的服务器将这些提供给应用程序。由于png可能是由服务器发送的,还有9个补丁,我用来获取drawable的代码如下:
InputStream stream = .. //whatever
Bitmap bitmap = BitmapFactory.decodeStream(stream);
byte[] chunk = bitmap.getNinePatchChunk();
if (NinePatch.isNinePatchChunk(chunk)) {
return new NinePatchDrawable(getResources(), bitmap, chunk, new Rect(), null);
} else {
return new BitmapDrawable(getResources(), bitmap);
}