Я использую Google DrawerLayout
.
Когда элемент получает щелчок, ящик плавно закрывается и запускается Activity
. Включение этих действий в Fragment
не является вариантом. Из-за этого запуск активности, а затем закрытие ящика также не является вариантом. Закрытие ящика и запуск активности в то же время заставят закрытие анимации заикаться.
Учитывая, что я хочу сначала сгладить его, а затем запустить действие, у меня возникла проблема с задержкой между тем, когда пользователь нажимает на элемент ящика, и когда они видят активность, к которой они хотели перейти.
Это то, что выглядит слушатель кликов для каждого элемента.
final View.OnClickListener mainItemClickListener = new View.OnClickListener() {
@Override
public void onClick(final View v) {
mViewToLaunch = v;
mDrawerLayout.closeDrawers();
}
};
Моя активность также является DrawerListener, ее метод onDrawerClosed
выглядит следующим образом:
@Override
public synchronized void onDrawerClosed(final View view) {
if (mViewToLaunch != null) {
onDrawerItemSelection(mViewToLaunch);
mViewToLaunch = null;
}
}
onDrawerItemSelection
просто запускает одно из пяти действий.
Я ничего не делаю на onPause
DrawerActivity
.
Я занимаюсь этим, и он принимает в среднем от 500-650 мс с момента вызова onClick, до момента окончания концаDrawerClosed.
Наблюдается заметное отставание, когда ящик закрывается, до запуска соответствующего действия.
Я понимаю, что происходит несколько вещей:
-
Заключительная анимация имеет место, что составляет пару миллисекунд прямо (скажем 300).
-
Затем, вероятно, есть некоторое задержка между визуальным закрытием ящика и его прослушивателем. Я пытаюсь выяснить, сколько из этого происходит посмотрев
DrawerLayout
источник, но пока не понял. -
Затем потребуется время, затрачиваемое на запущенную активность для выполнения своих жизненных циклов запуска, вплоть до
onResume
. Я пока ничего не сделал, но я оцениваю около 200-300 м.
Это похоже на проблему, когда спуск по неправильному пути будет довольно дорогостоящим, поэтому я хочу убедиться, что полностью его понимаю.
Одним из решений является просто пропустить закрытие анимации, но я надеялся сохранить его.
Как я могу максимально уменьшить время перехода?