Как создать заставку Android с изображениями и процентным положением - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь создать заставку Android с двумя изображениями: одно в центре экрана, а другое на расстоянии около 20% от нижней части экрана. Есть ли способ сделать это?

Подход, который я пробовал до сих пор, заключается в том, чтобы SplashActivity было первым действием, а файл манифеста устанавливает тему как SplashTheme:

В AndroidManifest.xml:

<activity
        android:name=".SplashActivity"
        android:label="@string/app_name"
        android:theme="@style/SplashTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>

Тогда в styles.xml я определяю эту тему:

    <style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@drawable/background_splash</item>
    </style>

Далее я создаю рисуемый файл background_splash.xml, и у меня есть вопросы:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<item>
    <shape android:shape="rectangle">
        <solid android:color="@color/dark_gray" />
        <padding
            android:left="0dip"
            android:top="0dip"
            android:right="0dip"
            android:bottom="0dip" />
    </shape>
</item>

<item>
    <bitmap
        android:gravity="center"
        android:src="@mipmap/mainlogo"/>

</item>

<item android:bottom="@dimen/splash_bottom">
    <bitmap android:src="@mipmap/bottom_logo"
        android:gravity="bottom" />
</item>

</layer-list>

Это на самом деле своего рода работа, mainlogo действительно находится в центре, а bottom_logo находится на некотором расстоянии над дном. Проблема заключается в том, что мне нужно указать значения в dp для splash_bottom в измерениях. Делать это точно для ldpi, mdpi, hdpi, xhdpi и т. Д. Действительно трудно сделать правильно.

Нет ли способа внутри нарисованного файла background_splash.xml разместить bottom_logo на 20% от нижней части экрана?

Требуемый заставочный экран выглядит примерно так (не фактический экран - я позаимствовал это у другого SO сообщения - см. Android: как выровнять 2 изображения на заставке ):

enter image description here

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

"layer-list & item" не имеет процентных свойств для установки своей позиции.

Для реализации вашей идеи вам следует использовать XML-файл макета .

В AndroidManifest.xml

<activity
    android:name=".SplashActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

In SplashActivity.java

public class SplashActivity extends Activity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // SET no title , full-screen mode
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        // SET activity_splash.xml as layout
        final View viewSplash = View.inflate(this, R.layout.activity_splash, null);
        setContentView(viewSplash);

        // Gradient Animation
        AlphaAnimation anim = new AlphaAnimation(0.5f, 1.0f); // change alpha from 0.5 to 1.0
        anim.setDuration(5000); // animate in 5000ms
        viewSplash.setAnimation(anim);
        anim.setAnimationListener(
                new Animation.AnimationListener(){
                                    @Override
                                    public void onAnimationStart(Animation animation) {

                                    }

                                    @Override
                                    public void onAnimationRepeat(Animation animation) {

                                    }

                                    @Override
                                    public void onAnimationEnd(Animation animation) {
                                        // redirect to the other screen, such as MainActivity
                                        Intent intent = new Intent(SplashActivity.this, MainActivity.class);
                                        startActivity(intent);

                                        // close SplashActivity
                                        finish();
                                    }
                                });
    }
}

activity_splash.xml может быть одним из следующих;

1. layout_weight из LinearLayout

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/dark_gray">

<ImageView android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:src="@mipmap/mainlogo"/>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <View android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="0.4"/>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:layout_weight="0.6"
        android:src="@mipmap/bottom_logo"/>
</LinearLayout>

used layout_weight of LinearLayout Screenshot.1

2. layout_constraintGuide_percent из Guidline

<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/dark_gray">

    <ImageView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/mainlogo"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"/>

    <android.support.constraint.Guideline
        android:id="@+id/bottom_guideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintGuide_percent=".8"
        android:orientation="horizontal" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/bottom_logo"
        app:layout_constraintBottom_toBottomOf="@+id/bottom_guideline"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"/>
</android.support.constraint.ConstraintLayout>

used layout_constraintGuide_percent of Guidline Снимок экрана.2

3. layout_marginLeftPercent из PercentRelativeLayout

Но этот класс устарел на уровне API 26.1.0. так что я не загружал XML об этом.

0 голосов
/ 30 августа 2018

Вы должны изменить файл @dimen/splash_bottom в background_splash.xml.

Теперь положение нижнего изображения изменяется в соответствии со значением размера. Чтобы решить эту проблему, вы должны сделать следующим образом. Я полагаю, что все, что находится в папке res/, может использовать «Спецификаторы конфигурации». Например, у вас может быть папка values-xxhdpi, values-sw600dp-mdpi-land/, values-w400dp и т. Д.

Другими словами, вам нужно создать папку разных значений для разных экранов .

values-sw720dp          10.1” tablet 1280x800 mdpi

values-sw600dp          7.0”  tablet 1024x600 mdpi

values-sw480dp          5.4”  480x854 mdpi 
values-sw480dp          5.1”  480x800 mdpi 

values-xxhdpi           5.5"  1080x1920 xxhdpi
values-xxxhdpi           5.5" 1440x2560 xxxhdpi

values-xhdpi            4.7”   1280x720 xhdpi 
values-xhdpi            4.65”  720x1280 xhdpi 

values-hdpi             4.0” 480x800 hdpi
values-hdpi             3.7” 480x854 hdpi

values-mdpi             3.2” 320x480 mdpi

values-ldpi             3.4” 240x432 ldpi
values-ldpi             3.3” 240x400 ldpi
values-ldpi             2.7” 240x320 ldpi

Спасибо.

...