Android:制作/显示9patch图像时的对齐错误

Sub*_*One 15 android nine-patch android-layout

NinePatch:

垃圾桶图标NinePatch图像

截图:

NinePatch错位的屏幕截图

布局XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="#ffffff">

    <LinearLayout
        android:id="@+id/edit_tray"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true">

        <View
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/trash"/>

    </LinearLayout>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

期望的结果:

"edit_tray"表示可以切换的UI元素.当编辑模式关闭时,"edit_tray"(以及垃圾桶图标)"消失".当编辑模式打开时,"edit_tray"可见并覆盖在ScrollView内容上.

垃圾桶图标有两个元素:图标本身及其背后的线性渐变.NinePatch图像包含三个可伸展区域和一个静态区域以容纳这些元素.图形中间的垃圾桶图标是静态的,应直接显示在屏幕的水平中心和底部.渐变应该从屏幕的底部延伸到另一侧.

错误?

NinePatch图像水平地仅包含图像两侧的可伸展区域的一个像素.其效果应该是垃圾桶图标直接出现在中心(左侧1个像素=右侧1个像素).但是,正如您在上面的屏幕截图中看到的那样情况并非如此.注意:此截图来自我的测试手机,即T-Mobile G2.在仿真器中可以看到相同的效果.但是,在draw9patch预览和eclipse图形布局视图中,图像是完美分布的.

我已经尝试了几种不同的方法来尝试找出错误的位置,并尝试修复它或解决它.包括:使用ImageViews代替Views(效果相同),使用android:scaleType ="fitXY"(同一问题),在运行时检查屏幕的宽度和"edit_tray"的宽度是否相同(它们是),使用两个不同的图像作为渐变(如edit_tray背景)和图标(作为ImageView src)(创建另一个问题,其中两个图像没有相互重叠.通过在两者上设置绝对高度固定)等.

答案,解决方法和真实问题

我使用一些简单的NinePatch图像进行了一些测试,每侧最多有六个可伸缩区域.我注意到至少有一个测试用例(手机,模拟器,draw9patch,eclipse中的Graphical Layout)显示了一些问题.

我决定尝试水平扩展图像,以便在垃圾桶图标的边缘显示更多的线性渐变.我将图像设为128x64(之前为64x64).我制作了更多可拉伸部分的边缘部分,以试图控制发生在图像上的任何不良数学(?).Draw9patch报告了坏的部分,所以我把它放回到两个像素,两边一个像素.有效!图标直接位于屏幕中央!我不知道为什么,但是如果不改变图像的实际可伸缩部分,只将图像的宽度改为128,它就可以了.

我尝试将图像重新调整为大约100px宽,以删除一些冗余像素,错误又回来了!它不仅会返回,而且图标被放置在与屏幕中心偏移的完全相同的位置.我无法弄清楚为什么会这样发生.

有人有主意吗?这是一个错误吗?

鉴于我上面描述的解决方法,我目前正在进行此工作,但如果有人有任何建议我正在听.

MKJ*_*ekh 5

使用4 points我在此处完成后使用9补丁图像,它将起作用.

在此输入图像描述

创建9补丁图像的提示.(不是设计师,告诉你我的基础)

  • 将点放在左侧和顶部
  • 如果你之间有一些文字或图像..然后在图像的左侧和右侧以及该图像或文本的顶部和底部放置点.
  • 始终看到剩余空间没有,两侧(左右和上下)的点都不相等.
  • 在使用2x到6x的签入之前,请务必检查预览或右侧