11

我想在 Android 上创建一个中间有一个小徽标的启动画面,但该徽标在较大的设备上被拉伸。我以为我可以使用 9 补丁图像,但似乎 9 补丁图像与我试图达到的效果相反。

飞溅徽标

这是必须在中间的标志。

9 补丁飞溅标志

这是我将图像设置为 9 补丁时得到的。中心被拉长,边角完好无损。我需要相反。我需要一个 9 补丁,它可以定义一个始终以正确 1:1 比例显示的中心区域,以及在图像小于屏幕时可以拉伸的左侧、右侧、顶部和底部的边框区域。

我怎样才能做到这一点?有或没有 9 补丁。

4

6 回答 6

10

这是一个如何做到这一点的例子。这是一个 9patch,所以像这样保存它:yourname.9.png 并且不要忘记android:scaleType="fitXY"在你的ImageView

在此处输入图像描述

于 2013-11-05T14:50:55.987 回答
7

您可能要标记 4 个拉伸位置 请参阅以下 X 标记,只需用一个点代替它们。并使用(如果尚未完成)SDK 文件夹中的 9path 工具来预览 Android SDK 将生成的内容

    X       X
  ************
X ************
  ************
  ****LOGO****
  ************
X ************
  ************
于 2013-11-05T14:49:25.870 回答
2

你有两个解决方案:

  1. 将启动画面设置为具有蓝色背景(您正在使用的)的 RelativeLayout。向这个 RelativeLayout 添加一个居中的图像。
  2. 以正确的方式使用 9 补丁。每个角落需要 4 个补丁:

在此处输入图像描述

于 2013-11-05T14:48:36.167 回答
2

如果它只是背景颜色中心的徽标,您可以尝试这种方法:

不需要9补丁。只需使用普通图像(此处称为“splash_logo”),并通过创建一个新的可绘制 xml 文件(在 res/drawable 内)来包装它:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item>
        <color android:color="@color/default_background" />
    </item>
    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/splash_logo" >
        </bitmap>
    </item>

</layer-list>

在你想使用的 imageView 上使用这个 drawable。

如果是全屏,您可以更进一步并为第一个活动使用主题,从而无需创建任何视图:

在styles.xml(或theme.xml)中:

<style name="SplashTheme" parent="@android:style/Theme.NoTitleBar">
    <!-- Background color must match splash image borders ! -->
    <item name="android:windowBackground">@drawable/activity_splash</item>
    <item name="android:background">@null</item>
</style>

在清单中:

    <activity
        android:name="..."
        android:theme="@style/SplashTheme" >
于 2014-10-29T09:31:01.227 回答
1

您可以使用顶部和左侧边框中的像素来指示 9-patch 图像的哪些部分被拉伸。所以只需填充边缘附近的像素。

于 2013-11-05T14:48:01.117 回答
1

9-patch 不习惯这种渲染。(http://developer.android.com/tools/help/draw9patch.html)但是您按照下面提到的代码进行操作,使用 a 并使用重力进行集中。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:gravity="center" >

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world"
    android:src="@drawable/your_logo" />

于 2013-11-05T14:57:28.177 回答