Android: 使用 9patch 在 imageview 周围创建一个框架

Android: Using 9patch to create a frame around an imageview

我一直在尝试使用木框图片在我的图像视图周围创建一个框架。我把 woodenframe 图片变成了 9patch,它仍然没有环绕在 imageview 上。

<RelativeLayout
    android:id="@+id/ChosenPic"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_weight="3"
    android:orientation="vertical"
    android:padding="10dp" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:baselineAlignBottom="true"
        android:src="@drawable/ic_launcher" />

    <ImageView
        android:id="@+id/ImageView02"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="fill_vertical|fill_horizontal"
        android:scaleType="fitXY"
        android:src="@drawable/woodenframe" >
    </ImageView>
</RelativeLayout>

这就是 ninepatch,我希望它适合我选择的图片,无论大小如何。

编辑:

This is what i want.

你有两个选择。我推荐第一个。

第一个选项:
将每个图像视图放在单独的 LinearLayout 中,并将 9patch 应用于 LinearLayout 本身而不是图像视图

第二个选项:
使用或设置 Java 中图像视图的背景资源为 9patch 资源或 xml 中的背景属性为 9patch 资源,并将 src 设置为图像本身。

请注意,最好使用图层列表并添加两个形状的组合或其他任何东西,而不是使用 9patch 资源。

参考:
https://developer.android.com/guide/topics/resources/drawable-resource.html#LayerList

您上传的 "nine-patch" 帧图像不是正确的九补丁。

首先是一张jpg。扩展名应该是 .9.png.

其次,内容不正确。具体来说:

  • 您需要在整个图像周围有一个 1px 的透明边框。我在你的 jpg 中看不到这一点,尽管那只是将其导出为 jpg 的产物。
  • 您需要通过在该 1 像素边框中绘制黑色像素来定义可拉伸区域。我在上传的图像中没有看到定义此类区域的黑色像素。

我强烈建议您回去阅读 nine-patch documentation again, and trying the draw 9-patch tool 以创建合适的九补丁。

您的 9-Patch 配置不正确。 仅仅重命名文件是不够的。为了让它正常工作,您必须定义某些区域,这些区域应该被拉伸以适合您的视图尺寸。 您还可以为该 9-Patch 定义填充以在将 9-Patch 应用到您的视图时插入内容。

android SDK 中有一个名为 "Draw 9-Patch" 的便捷工具可以帮助您定义这些区域:

http://developer.android.com/tools/help/draw9patch.html

要启动它,只需 运行

draw9patch.bat 

位于

...\sdk\tools\