#android #user-interface #refresh #translation #screenshot
#Android #пользовательский интерфейс #обновить #перевод #скриншот
Вопрос:
Я знаю, что представление не будет обновлено сразу после того, как я только что вызвал view.setTranslationY (-10.0f), пока основной поток не вернется в цикл ожидания.
Я хотел бы сделать снимок экрана сразу после обновления представления, но я не нахожу обратного вызова, такого как «onTranslationFinished ()» или «setOnTranslationEnd ()», который дал бы мне возможность это сделать.
Сначала мне понравился следующий код, и он действительно работал:
view.setTranslationY(-10.0f);
view.post(new Runnerable() {
@Override
void run() {
takeScreenshot();
});
Но когда мой мобильный достигает предела памяти и работает медленно,
метод не работает так, как я ожидал. takeScreenshot () запускается до фактического перевода представления -10.0f.
Я знаю, что такое postDelayed (100 мс) может временно устранить проблему, но это не лучшее решение.
Есть ли какой-нибудь способ удовлетворить мои требования?
Ответ №1:
Вы можете попробовать добавить onDrawListener
наблюдателя дерева просмотра. Как следующий код:
view.getViewTreeObserver().addOnDrawListener(new ViewTreeObserver.OnDrawListener() {
@Override
public void onDraw() {
//action
}
});`
Этот обратный вызов будет вызван, когда дерево представления будет готово к рисованию.
Комментарии:
1. Я попытался установить точку останова в onDraw и распечатать журнал об этом. К сожалению, onDraw вообще не вызывается. Перевод может не привести к перерисовке.
2. На самом деле это будет вызвано. Проверьте свой файл app.gradle, он
minSdkVersion
должен быть как минимум16
, иначе он не будет вызван обратно. @Keith3. Спасибо за вашу информацию, но я все еще не могу получить эту информацию, хотя я установил прослушиватель. Я проверил сборку системы Android вместо сборки Gradle, поэтому проблем с версией SDK не будет.