我想在 Android 上创建一个中间有一个小徽标的启动画面,但该徽标在较大的设备上被拉伸。我以为我可以使用 9 补丁图像,但似乎 9 补丁图像与我试图达到的效果相反。
这是必须在中间的标志。
这是我将图像设置为 9 补丁时得到的。中心被拉长,边角完好无损。我需要相反。我需要一个 9 补丁,它可以定义一个始终以正确 1:1 比例显示的中心区域,以及在图像小于屏幕时可以拉伸的左侧、右侧、顶部和底部的边框区域。
我怎样才能做到这一点?有或没有 9 补丁。
我想在 Android 上创建一个中间有一个小徽标的启动画面,但该徽标在较大的设备上被拉伸。我以为我可以使用 9 补丁图像,但似乎 9 补丁图像与我试图达到的效果相反。
这是必须在中间的标志。
这是我将图像设置为 9 补丁时得到的。中心被拉长,边角完好无损。我需要相反。我需要一个 9 补丁,它可以定义一个始终以正确 1:1 比例显示的中心区域,以及在图像小于屏幕时可以拉伸的左侧、右侧、顶部和底部的边框区域。
我怎样才能做到这一点?有或没有 9 补丁。
这是一个如何做到这一点的例子。这是一个 9patch,所以像这样保存它:yourname.9.png 并且不要忘记android:scaleType="fitXY"
在你的ImageView
您可能要标记 4 个拉伸位置 请参阅以下 X 标记,只需用一个点代替它们。并使用(如果尚未完成)SDK 文件夹中的 9path 工具来预览 Android SDK 将生成的内容
X X
************
X ************
************
****LOGO****
************
X ************
************
你有两个解决方案:
如果它只是背景颜色中心的徽标,您可以尝试这种方法:
不需要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" >
您可以使用顶部和左侧边框中的像素来指示 9-patch 图像的哪些部分被拉伸。所以只需填充边缘附近的像素。
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" />