Сохранение одного фона в нескольких действиях в Android и исключение их из переходов действий - PullRequest
2 голосов
/ 22 января 2011

Я сейчас работаю над приложением для Android.По сути, у меня есть несколько ViewFlippers, которые будут использоваться для создания наборов «панелей».Например, у меня есть ViewFlipper для имитации среды домашнего экрана (несколько панелей, доступ к которым можно провести, проводя пальцем влево или вправо), а также другой ViewFlipper для имитации средства запуска приложений (панели для избранных приложений, всех приложений, настроек и т. Д.),Я сделал это, создав каждый набор панелей или каждый ViewFlipper в своей собственной деятельности, чтобы сохранить память, когда набор панелей не используется.

По сути, я хочу сохранить одно и то же фоновое изображениечерез все виды деятельности.Теперь я знаю, что это можно сделать, создав стиль и применив его к тегам в манифесте, но моя проблема в том, что фоновое изображение включено в анимацию перехода активности (моя собственная пользовательская анимация была установлена, но независимо от того,с использованием анимации перехода на фондовом рынке или нет, фоновое изображение включено).

Итак, я спрашиваю, есть ли способ сохранить общее фоновое изображение для нескольких действий, которое НЕ анимируется при переключении между действиями?

В данный момент мой XML-файл стиля выглядит следующим образом:

<style name="Theme" parent="android:Theme">
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowBackground">@drawable/background_port</item> 
</style>

Итак, как вы можете видеть, в качестве фона для всех задается один и тот же объект рисования.действия, но он включен в анимации перехода между действиями, которые я не хочу.Я также пробовал android: detachWallpaper = "true", но в этом случае это кажется бесполезным.

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

Спасибо за вашу помощь, это очень ценится.

Ответы [ 3 ]

2 голосов
/ 22 января 2011

Не используйте мероприятия. Вы просто усложняете то, что хотите сделать, пытаясь заставить активность действовать так, как будто она интегрирована. Используйте Представления. Вы говорите, что хотите использовать действия для сохранения памяти, но они не спасут вашу память и во всех отношениях намного тяжелее, чем простые представления. С представлениями у вас есть полный контроль над вашим пользовательским интерфейсом, который в основном то, что вы просите. Если вы хотите быть максимально эффективными, надуйте представления, которые вы хотите показать во время их показа, и удалите старую часть иерархии представлений, которая больше не отображается, чтобы ее можно было GCed.

2 голосов
/ 22 января 2011

Я не думаю, что есть простое решение для этого, но кое-что, что я сделал в прошлом, чтобы добиться чего-то подобного, это; Я удалил переход активности, вызвав что-то вроде overridePendingTransition (0,0) сразу после startActivity.

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

Кроме того, отметим, что если вам нужен компонент с простым представлением панелей, посмотрите SwipeView https://github.com/fry15/uk.co.jasonfry.android.tools

1 голос
/ 21 октября 2015

Старый вопрос, но в случае, если кто-то еще сталкивается с этим.

Хотя я согласен с ответом hackbod, для простых случаев использования существует способ сделать это с API 21.

Задание 1

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

  android:id="@+id/activity_root"
  android:transitionName="activity_root"

  android:layout_width="match_parent"
  android:layout_height="match_parent"

  android:background="@drawable/main_bg"
  android:backgroundTint="#4d000000"
  android:backgroundTintMode="src_over"
  >

  <!-- Activity 1 stuff -->
</RelativeLayout>

Задание 2

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

  android:id="@+id/activity_root"
  android:transitionName="activity_root"

  android:layout_width="match_parent"
  android:layout_height="match_parent"

  android:background="@drawable/main_bg"
  android:backgroundTint="#4d000000"
  android:backgroundTintMode="src_over"
  >

  <!-- Activity 2 stuff -->
</RelativeLayout>

Тогда вы можете начать свое второе занятие следующим образом:

Intent startIntent = new Intent(Activity1.this, Activity2.class);

Bundle b = ActivityOptionsCompat
  .makeSceneTransitionAnimation(Activity1.this,
    new Pair<>(findViewById(R.id.logo), "logo"), //Or whatever other elements you don't want moving around
    new Pair<>(findViewById(R.id.activity_root), "activity_root"))
  .toBundle();

startActivity(startIntent, b);
...