Определяемый пользователем фон заставки Android - PullRequest
0 голосов
/ 01 сентября 2018

В нашем приложении Xamarin для Android мы хотим, чтобы на заставке загружалось пользовательское изображение из свойств приложения (или другого механизма хранения). Поэтому изображение не доступно как ресурс Android в APK (время компиляции). Я могу заменить фон окна, используя Window.SetBackgroundDrawable (Resources, Drawable) в Activity, но тогда фон применяется только тогда, когда загрузка почти завершена. Если я настраиваю аналогичное фоновое изображение напрямую (но статично) в отрисовываемом XML, оно загружается быстро и правильно.

Есть идеи, как своевременно показывать изображение?

Наша заставка для рисования:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item>
    <color android:color="@color/splash_background"/>
  </item>
  <item>
    <bitmap
      android:src="@drawable/splash"
      android:tileMode="disabled"
      android:gravity="center"/>
  </item>
</layer-list>

Наша тема-заставка:

<style name="CompanySplashTheme" parent ="Theme.AppCompat.Light.NoActionBar">
  <item name="android:windowBackground">@drawable/splash_screen</item>
  <item name="android:windowNoTitle">true</item>
  <item name="android:windowFullscreen">true</item>
</style>

Активность:

using System.Text;
using System.Threading.Tasks;
using Android.App;
using Android.Content;
using Android.Graphics.Drawables;
using Android.Support.V7.App;

namespace Provisior.Mobile.Droid
{
    [Activity(Theme = "@style/CompanySplashTheme", MainLauncher = true, NoHistory = true)]
    public class SplashActivity : AppCompatActivity
    {
        protected override void OnResume()
        {
            base.OnResume();
            ReplaceBackground();
            new Task(() => StartActivity(new Intent(Application.Context, typeof(MainActivity)))).Start();
        }

        private void ReplaceBackground()
        {
            var imageBytes = Encoding.UTF8.GetBytes(App.Current.Properties["splash_background"] as string);
            var backgroundBitmap = global::Android.Graphics.BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length);
            var backgroundDrawable = new BitmapDrawable(Resources, backgroundBitmap);
            Window.SetBackgroundDrawable(backgroundDrawable);
        }

        public override void OnBackPressed() { }
    }
}

1 Ответ

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

Положите ReplaceBackground() для изменения фона на всплеск в методе onCreate() упражнения.

редактировать: только что понял, что это не Java, ответ по-прежнему применяется

...