Ответ 1
Вот пример того, как вы можете это сделать. Это 9patch, поэтому сохраните его так: yourname.9.png и не забудьте установить android:scaleType="fitXY"
на ImageView
Я хочу создать заставку на Android с небольшим логотипом посередине, но логотип растягивается на более крупных устройствах. Я думал, что могу использовать 9 патч-изображений, но кажется, что 9 патч-изображений работают обратно к тому, что я пытаюсь достичь.
Это логотип, который должен быть посередине.
Это то, что я получаю, когда я устанавливаю изображение как 9 патчей. Центр вытянут, а углы нетронуты. Мне нужно наоборот. Мне нужен патч 9, который может определять центральную область, которая всегда отображается в правильной пропорции 1:1, и граничные области слева, справа, сверху и снизу, которые можно растянуть, если изображение меньше экрана.
Как я могу это сделать? С или без 9 патчей.
Вот пример того, как вы можете это сделать. Это 9patch, поэтому сохраните его так: yourname.9.png и не забудьте установить android:scaleType="fitXY"
на ImageView
Возможно, вы захотите отметить позицию 4-го уровня См. Следующий знак X, просто поставьте вместо них точку. И используйте (если еще не сделали) инструмент 9path внутри папки SDK, чтобы иметь предварительный просмотр того, что будет создано 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>
используйте эту возможность для рисования на изображении, которое вы хотите использовать.
Если это полный экран, вы можете пойти дальше и использовать тему для первого действия, тем самым устраняя необходимость создания любого вида:
в 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 патчами растянуты с пикселями в верхней и левой границах. Поэтому просто заполните пиксели рядом с краями.
9-патч не используется для такого рода рендеринга. (http://developer.android.com/tools/help/draw9patch.html) Но вы делаете это как код, упомянутый ниже, используя и централизуя гравитацию.
<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" />