Подтвердить что ты не робот

9 Патч-изображение, где центр 1:1

Я хочу создать заставку на Android с небольшим логотипом посередине, но логотип растягивается на более крупных устройствах. Я думал, что могу использовать 9 патч-изображений, но кажется, что 9 патч-изображений работают обратно к тому, что я пытаюсь достичь.

splash logo

Это логотип, который должен быть посередине.

9 patch splash logo

Это то, что я получаю, когда я устанавливаю изображение как 9 патчей. Центр вытянут, а углы нетронуты. Мне нужно наоборот. Мне нужен патч 9, который может определять центральную область, которая всегда отображается в правильной пропорции 1:1, и граничные области слева, справа, сверху и снизу, которые можно растянуть, если изображение меньше экрана.

Как я могу это сделать? С или без 9 патчей.

4b9b3361

Ответ 1

Вот пример того, как вы можете это сделать. Это 9patch, поэтому сохраните его так: yourname.9.png и не забудьте установить android:scaleType="fitXY" на ImageView

enter image description here

Ответ 2

Возможно, вы захотите отметить позицию 4-го уровня См. Следующий знак X, просто поставьте вместо них точку. И используйте (если еще не сделали) инструмент 9path внутри папки SDK, чтобы иметь предварительный просмотр того, что будет создано Android SDK

    X       X
  ************
X ************
  ************
  ****LOGO****
  ************
X ************
  ************

Ответ 3

У вас есть два решения:

  • Установите всплеск на RelativeLayout с фоном синего цвета (который вы используете). Добавьте к этому RelativeLayout центрированное изображение.
  • Используйте 9-патч правильно. Вам нужно 4 патча на каждом из углов:

enter image description here

Ответ 4

Если это просто логотип в центре фона, вы можете попробовать этот подход:

нет необходимости в 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" >

Ответ 5

Вы указываете, какие части изображения с 9 патчами растянуты с пикселями в верхней и левой границах. Поэтому просто заполните пиксели рядом с краями.

Ответ 6

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" />