Ivansuper
Ты пошел программировать. Так что это твои проблемы. И тебе их надо решать, ибо с ними ты не сможешь нормально работать
Future Franklin
Окей
Ivansuper
Я не силён в этом
Ты мог просто загуглить "как считать среднее арифметическое" вместо написания "я не силен в этом"
Спелыйяблоко
Добрый вечер
Спелыйяблоко
Думаю вопрос не раз поднимался.Буду благодарен ответам.
Спелыйяблоко
Джава ведь не вся нужна для анроид разработки
Спелыйяблоко
Какую книгу ресурсы и т.д вы посоветует именно для джавы под андроид?
Владимир
Всем привет. Может есть у кого экспириенс, чтобы помочь мне с конкретной задачей: Есть скролвью, и есть алгоритм, меняющий расположение вьюх внутри него. Проблема: если скролить скролвью, не отпуская пальца, все окей, но как только отпустить и скролвью начинает самостоятельно докручиваться по инерции, возникает проблема - он каким-то образом кеширует внутренности себя и не вызывает ни под каким соусом layout. Лейаут не производится вплоть до полной остановки. Из-за этого вьюхи, которые были в одном месте и которые я хочу сдвинуть - не сдвигаются пока не произойдет остановка. Однако! Если создать новую вьюху и добавить вовнутрь - она расположится как надо. Но только если это новая вьюха, а не старая. Исследование показало, что дело в том, что лейаутпарамс уже посчитаны и задали положение и размер, а если их (парамс) еще не было, то происходит первичный рассчет. Есть какой-то способ заинвалидировать вьюху, будто бы она еще не была никуда приаттачена?
requestLayout или invalidate пробовала?
Andrey
Кто-то встречался с подобным поведением TabLayout? При скролле и выделение объекта, скрол идёт обратно от выбранного объекта, разве так и должно быть? Просто вроде всегда сам индикатор переезжал без видимых анимаций со скроллом. https://pastebin.com/8MPkpjsc
Спелыйяблоко
планирую сначала джаву потом плавно на котлин перейти
Anna
requestLayout или invalidate пробовала?
Все, что только можно, докопалась вплоть до флагов, но они снаружи недоступны
Ivansuper
onLayout вообще в это время не вызывается, совсем
Есть какой-нибудь минимальный код для повторения? Стало интересно самому посмотреть в чем причина
Anna
Минимального нет 😊 Но сделать очень легко - в скроллвью засовываем огромный релейтив, внутрь релейтива - любую вью. И вот последнюю двигать по условию, например, если вышла за экран, то сдвинуть вниз на Х пикселей.
Ivansuper
Сдвиг как делается? Изменением LayoutParams у вью?
Ivansuper
Ну по сути если y 400 то y/2 будет 200 и по центру или нет?
У тебя левый верхний угол это какое-то число, правый верхний это какое-то число. Что ты будешь делить на два?
Ivansuper
Тебе надо поместить между ДВУМЯ. Так что в выражение рассчета должны попасть X обоих углов
Ivansuper
По одному ты не рассчитаешь позицию между ДВУХ
Anna
Сдвиг как делается? Изменением LayoutParams у вью?
Да. Но я кажется нашла интересный кейс - он вызывает у меня недоумение, но я забыла деталь уточнить. Ловлю скролл переопределением onScrollChanged. И в нем, получается, все действия. Но если добавить post { } все начинает работать.
Ivansuper
Ну по сути если y 400 то y/2 будет 200 и по центру или нет?
Координаты отсчитываются от угла экрана, а не от твоей фигуры. Это надо понимать
Future Franklin
Я думал x ,y берётся из моей фигуры
Ivansuper
Всмысле от экрана а не от моей фигуры?
У тебя есть экран. Его верхняя левая точка это 0х0. Твоя фигура всегда имеет больше Х У у своих точек, которые принадлежат пространству координат канваса
Ivansuper
Если ты поделишь просто на 2, то получится уменьшение точки относительно верхнего левого угла экрана
Ivansuper
Если точнее — не от физического угла экрана, а от угла вью, в которой рисуешь
Ivansuper
Потому что если отображать панель уведомлений, канвас рисования будет меньше экрана (например)
Ivansuper
Да. Но я кажется нашла интересный кейс - он вызывает у меня недоумение, но я забыла деталь уточнить. Ловлю скролл переопределением onScrollChanged. И в нем, получается, все действия. Но если добавить post { } все начинает работать.
Ну, есть негласное правило делать post() на многие вещи когда работаешь с такими коллбеками. Просто потому что неведомо откуда они могут вызываться. По скольку все layout pass проходят асинхронно, то мы уже более менее обречены
Ivansuper
Оно не должно провоцировать ничего кроме invalidate() и layout pass не должен быть проблемой
Anna
Ну, есть негласное правило делать post() на многие вещи когда работаешь с такими коллбеками. Просто потому что неведомо откуда они могут вызываться. По скольку все layout pass проходят асинхронно, то мы уже более менее обречены
Оно работает на юай треде, а пост не гарантирует выполнения на следующий кадр. Для этого лучше использовать всякие onLayout. В конкретном случае - пост вызовется позже, и лейаут вьюхи произойдет через кадр. В моем случае приемлемо, однако неприятно 😊 Кроме того, если скрол не в состоянии fling, то все ок. В общем, спасибо, товарищ! Родина тебе благодарна.
Александр
По скольку все layout pass проходят асинхронно Жесть я прозрел сейчас
Ivansuper
Он еще помоему называется похожим образом на слово, которым описывают процесс постановки танца
Ivansuper
Он умеет делать пост задач на самое время отрисовки следующего кадра
Ivansuper
https://developer.android.com/reference/android/view/Choreographer
Anna
А, хореографер.
Anna
С ним ну очень уж геморно получается. Смирюсь с сайд эффектами
Ivansuper
Костыльпромисс между решениями, норм
Ivansuper
Ты всего лишь отправляешь запрос, ставится условно флаг, и на следующий отклик Loop обработки сообщений с основного потока запускается relayout
Future Franklin
Если точнее — не от физического угла экрана, а от угла вью, в которой рисуешь
Все равно нихера не понимаю , как в центре выводить текст , пример картинки выше
Александр
м?
Я не думал об этом раньше просто, а сейчас как подумал.
Ivansuper
Мне бы хотелось на текущий кадр
Это я Александру адресовал пост)
Anna
Ты всего лишь отправляешь запрос, ставится условно флаг, и на следующий отклик Loop обработки сообщений с основного потока запускается relayout
Добавлю, что это отличное место для накопления изменений, дабы отработать всю пачку за раз, особенно, если одно изменение заменяет другое и велкам 60фпс
Ra
Ra
Ra
Ra
Ярослав🇺🇦
О, да это отдельное извращение кидать код фоткой моника
Александр
Андрей
Всем привет! Скажите, а как перехватить push уведомления?
Андрей
Вроде как firebase для этого используют.
Владимир
Всем привет! Скажите, а как перехватить push уведомления?
Если тебе надо перехватить пуши другого приложения, то легально этого сделать нельзя.
Андрей
А, понятно!
Master
О, да это отдельное извращение кидать код фоткой моника
К сожалению телеграм не использую на пк. 🙂
Артем
нужно зарегать сервис, правда разрешение от юзера нужно
Артем
notificationlistenerservice вроде
Master
Пока ты один такой. Другим было видно. 😏 Но конечно учту, чтобы было видно всем🤓. Удачи
Ярослав🇺🇦
Пока ты один такой. Другим было видно. 😏 Но конечно учту, чтобы было видно всем🤓. Удачи
Мне видно, просто это намек, что код нужно не фоткой кидать, а вообще для таких есть наказание решение тоже фоткой скинуть, пусть переписывают 🌚
Ярослав🇺🇦
Я недавно в чате, всех тонкостей не знаю. А так не проблема вообще)
Это не касается чата, а вообще любой темы, где вопросы по программированию обсуждаются, пусть то даже cyberforum.ru нужно код кидать не скрином, никто не будет переписывать что у тебя там😂
Valeriy
кто знает как программно поменять цвет иконок в тулбаре?
awawa
кто знает как программно поменять цвет иконок в тулбаре?
Это если те, которые меню, то там itemTint, кажется, устанавливается. Но там API надо 28, вроде, чтобы его поставить
Дмитрий Рыбалкин
При запуске на телефоне приложение падает, а на эмуляторе работает нормально. Можно ли в телефоне открыть консоль, чтобы увидеть ошибку, или еще каким-то способом посмотреть что там происходит?
Дмитрий Рыбалкин
Телефон подключить к компьютеру мб и лог посмотреть?
Телефон к компьютеру подключен, я прямо из Android Studio запускаю на нем приложение. А где лог смотреть?
Ленар
Logcat
Дмитрий Рыбалкин
А, туплю, сорян. Нашел
ℕo ℕame
охуенный скрин
Turalllb
Подскажите, а мы можем в SQLiteOpenHelper работать с двумя разными базами?
Viktor
Ребята, привет. Надеюсь, кто-нибудь прочитает эту простыню и поможет мне, вы моя последняя надежда, сижу уже 2 дня. Мне нужно заполнить выпадающий список, используя Room и RxJava и MVVM. ViewModel фрагмента выглядит так: fun getData(): Single<List<Kotlin>> { return dataSource.getAll() } В фрагменте делаю так: private fun prepareDataList() { viewModel.getData() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(object : SingleObserver<List<Kotlin>> { override fun onSuccess(t: List<Kotlin>) { kotlinDataList = t } override fun onSubscribe(d: Disposable) {} override fun onError(e: Throwable) {} }) } kotlinDataList должен заполнится данными, далее я их рассовываю по вьюхе выпадающего списка. Проблема в том, что лист ВНЕ onSuccess всегда пустой, данные генерируются внутри onSuccess, но не выходят наружу. При дебагинге данные не выходят наружу и в конце бесконечно горит "application is running". Я все перегуглил, испробовал и всякие Flowable, Maybe и еще кучу приемов, пересмотрел все примеры, которые нашел в гугле, не могу понять, что у меня не так.