Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Zanexess
111 / 84 / 28
Регистрация: 22.10.2010
Сообщений: 227
#1

RecycleView - Программирование Android

19.02.2016, 01:21. Просмотров 463. Ответов 3
Метки нет (Все метки)

Добрый времени суток!
Есть такое задание: написать ленту гифок, да так, чтобы гифки, которые видно лишь наполовину и меньше останавливались.

Базовый функционал я уже реализовал с помощью glide и recycleView. Но не могу понять, как отследить положение гифки на экране? Как понять, когда мне останавливать ее?

И не очень понимаю как работать правда с glide, может у кого был опыт? Как мне влиять на поведение этой самой гифки, остановить там, или возобновить?

Буду благодарен за наводки в нужном направлении.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2016, 01:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос RecycleView (Программирование Android):

SlidingTab - фрагменты с RecycleView (ListView) - Программирование Android
Здравствуйте, уважаемые разработчики. Из мануала хочу сделать так, что бы на каждой странице были разные RecycleView или ListView (например...

Нет метода addOnScrollListener в RecycleView - Программирование Android
В чем может быть проблема? setOnScrollListener есть, а addOnScrollListener нету. Если что, в Gradle подключал: compile...

SlidingTab - фрагменты с RecycleView (ListView) - Программирование Android
Здравствуйте, уважаемые разработчики. Из мануала хочу сделать так, что бы на каждой странице были разные RecycleView или ListView (например...

Нет метода addOnScrollListener в RecycleView - Программирование Android
В чем может быть проблема? setOnScrollListener есть, а addOnScrollListener нету. Если что, в Gradle подключал: compile...

SlidingTab - фрагменты с RecycleView (ListView) - Программирование Android
Здравствуйте, уважаемые разработчики. Из мануала хочу сделать так, что бы на каждой странице были разные RecycleView или ListView (например...

Нет метода addOnScrollListener в RecycleView - Программирование Android
В чем может быть проблема? setOnScrollListener есть, а addOnScrollListener нету. Если что, в Gradle подключал: compile...

SlidingTab - фрагменты с RecycleView (ListView) - Программирование Android
Здравствуйте, уважаемые разработчики. Из мануала хочу сделать так, что бы на каждой странице были разные RecycleView или ListView (например...

Нет метода addOnScrollListener в RecycleView - Программирование Android
В чем может быть проблема? setOnScrollListener есть, а addOnScrollListener нету. Если что, в Gradle подключал: compile...

SlidingTab - фрагменты с RecycleView (ListView) - Программирование Android
Здравствуйте, уважаемые разработчики. Из мануала хочу сделать так, что бы на каждой странице были разные RecycleView или ListView (например...

Нет метода addOnScrollListener в RecycleView - Программирование Android
В чем может быть проблема? setOnScrollListener есть, а addOnScrollListener нету. Если что, в Gradle подключал: compile...

SlidingTab - фрагменты с RecycleView (ListView) - Программирование Android
Здравствуйте, уважаемые разработчики. Из мануала хочу сделать так, что бы на каждой странице были разные RecycleView или ListView (например...

Нет метода addOnScrollListener в RecycleView - Программирование Android
В чем может быть проблема? setOnScrollListener есть, а addOnScrollListener нету. Если что, в Gradle подключал: compile...

SlidingTab - фрагменты с RecycleView (ListView) - Программирование Android
Здравствуйте, уважаемые разработчики. Из мануала хочу сделать так, что бы на каждой странице были разные RecycleView или ListView (например...

SlidingTab - фрагменты с RecycleView (ListView) - Программирование Android
Здравствуйте, уважаемые разработчики. Из мануала хочу сделать так, что бы на каждой странице были разные RecycleView или ListView (например...

Нет метода addOnScrollListener в RecycleView - Программирование Android
В чем может быть проблема? setOnScrollListener есть, а addOnScrollListener нету. Если что, в Gradle подключал: compile...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,654
Завершенные тесты: 1
19.02.2016, 11:00 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Zanexess Посмотреть сообщение
Как мне влиять на поведение этой самой гифки, остановить там, или возобновить?
С этим помочь не могу, но думаю гуглится. А отслеживать полностью видно вьюшку или нет просто.
Добавляем в адаптер пару полей
Java
1
2
private int mFirstFullView = -1;
private int mLastFullView = -1;
И пару методов
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public void setFullViewsRange(int firstFullView, int lastFullView) {
    //Чтобы не перерисовывать на каждый пиксель скрола
    //Будет перерисовывать только если реально что-то поменялось
    if (firstFullView != mFirstFullView || lastFullView != mLastFullView) {
        mFirstFullView = firstFullView;
        mLastFullView = lastFullView;
        notifyDataSetChanged();
    }
}
 
private boolean isFullView(int position) {
    return position >= mFirstFullView && position <= mLastFullView;
}
Потом вешаем на RecyclerView onScrollListener

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);
        //Достаем LayoutManager
        LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();
        //Находим первую и последнюю вьюшку, которые видно полностью
        int first = manager.findFirstCompletelyVisibleItemPosition();
        int last = manager.findLastCompletelyVisibleItemPosition();
        //И передаем в адаптер
        ((CustomAdapter) recyclerView.getAdapter()).setFullViewsRange(first, last);
    }
});
Ну и осталось в адаптере в методе onBindViewHolder проверять полностью видно вьюшку или нет

Java
1
2
3
4
5
if (isFullView(position)) {
    holder.gif.startAnimation();//Такого метода нет, просто для наглядности
} else {
    holder.gif.stopAnimation();
}
И еще нужно будет, чтобы метод startAnimation не начинал анимацию заново, если она уже идет.
1
Zanexess
111 / 84 / 28
Регистрация: 22.10.2010
Сообщений: 227
19.02.2016, 13:30  [ТС] #3
Spelcrawler,
Спасибо, все отлично заработало!
Дальше разберусь.

Хотя все же интересно, а есть какой-то классический способ отслеживать не полное отображение, а наполовину, или в другом отношении? Может знаете?
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,654
Завершенные тесты: 1
19.02.2016, 13:48 #4
Цитата Сообщение от Zanexess Посмотреть сообщение
а есть какой-то классический способ отслеживать не полное отображение, а наполовину, или в другом отношении?
Можно в том же onScrollListener'e
Java
1
2
3
4
5
6
7
8
9
if (recyclerView.getChildCount() == 0) return;//Чтобы не вылетало, если список пустой.
View child = recyclerView.getChildAt(0);
int childHeight = child.getHeight();
int childTop = child.getTop();
int parentTop = recyclerView.getTop();
 
int visibleHeight = childHeight - (parentTop - childTop);
 
float visiblePercent = (float) visibleHeight / (float) childHeight;//Это будет процент вьюшки, который реально видно
Тут расчет только для вертикального скролла и для верхней вьюшки, под остальные по аналогии не сложно переделать.
0
19.02.2016, 13:48
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru