Сначала вы пытались переопределить PendingAnimation, когда запускаете намерение между экранами? может быть, некоторые исчезают или что-то в этом роде.
также я вижу, как это может быть проблемой, потому что, когда вы начинаете новое действие, есть небольшой промежуток времени, пока представление не будет раздуто в setContentView, так что, вероятно, вы увидите, что экран становится черным, пока этот шаг не будет завершен. возможно, используйте traceview, чтобы увидеть, где это занимает время, и, возможно, немного оптимизировать методы onCreate-> onDestroy.
Создание деятельности - дорогой процесс. возможно, если вам это действительно надоедает, перейдите с флиппером представления и переместите весь код, который вы можете, в отдельные представления, надувая их из xml (возможно, если они не слишком тяжелые, вы можете загрузить их оба в onCreate и, вероятно, использовать много переменные, объявленные для портретного вида и ландшафта. Вы оставите зависимый код в упражнении и переместите уникальные функциональные возможности для каждого вида в классы представлений.
это просто мысль. Я сделал это с помощью Coverflow и gridView, содержащего большие пальцы изображений, и получилось здорово. переключение представлений было очень быстрым и имело очень низкое потребление памяти, главным образом потому, что данные были разделены между представлениями.
EDIT
Итак, вы хотите сделать что-то вроде этого, позволяя перезапускать представления или сохранять ConfigurationState (в документах Android это говорит о том, что изменение ориентации обрабатывается немного быстрее).
Вот код для обработки изменения ориентации с группой действий:
У меня есть 2 действия A и B, которые могут быть любого типа (TAbActivity и т. Д.)
и у меня есть 1 основное действие под названием OrientationChangeActivity:
public class OrientationChangeActivity extends ActivityGroup {
private ArrayList<String> mIdList;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mIdList = new ArrayList<String>();
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
startChildActivity("ActivityA", new Intent(this, ActivityA.class));
} else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
startChildActivity("ActivityB", new Intent(this, ActivityB.class));
}
}
............
Используется ссылка, размещенная в моем комментарии. У меня есть Активность A с ориентацией портрета и Актом B как Пейзаж. я позволяю OrientationChangeActivity перезапускать себя (не содержит декларации configChage в манифесте), таким образом снова вызывая onCreate и переключая активность.
Вы также можете посмотреть на код:
@Override
public void finishFromChild(Activity child) {
LocalActivityManager manager = getLocalActivityManager();
int index = mIdList.size() - 1;
if (index < 1) {
finish();
return;
}
manager.destroyActivity(mIdList.get(index), true);
mIdList.remove(index);
index--;
String lastId = mIdList.get(index);
Intent lastIntent = manager.getActivity(lastId).getIntent();
Window newWindow = manager.startActivity(lastId, lastIntent);
setContentView(newWindow.getDecorView());
}
, который говорит вам, как создать действие внутри ActivityGroup и установить его для представления. Вы можете использовать этот код для загрузки обеих активаций при создании здесь и установки их в соответствии с изменением ориентации в качестве просмотра содержимого (то есть вам нужно добавить configChage = direction).