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

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

Войти
Регистрация
Восстановить пароль
 
yura91
30 / 28 / 2
Регистрация: 23.10.2013
Сообщений: 2,275
#1

Определить достижение конца экрана - Программирование Android

16.03.2016, 16:15. Просмотров 323. Ответов 7
Метки нет (Все метки)

У меня есть GridView и в нем изображения как при скролинге определить когда будет достигнут конец экрана устройства и выполнить некоторые действия? Я знаю можно реализовать интерфейс OnScrollListener. А в каком его методе и как определить достижение конца экрана ?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2016, 16:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить достижение конца экрана (Программирование Android):

Проверка на достижение локации на карте - Программирование Android
Хотелось бы динамически получать координаты и выводить их в виде тоста. @Override protected void onCreate(Bundle...

Программно определить разрешение экрана - Программирование Android
Нужно узнать разрешение экрана полностью. Когда я определяю у меня выводит, что-то вроде 1216 вместо 1280, не считает какой-то тулбар или...

Проверка на достижение конца файла не рао - C++
ofstream f("tmp"); ifstream idx(idxAdress); int index; idx.seekg(0, ios::end); ios::pos_type endPos = idx.tellg(); ...

Растянуть div до конца экрана - jQuery
Здравствуйте, подскажите как при щелчке на кнопку растянуть div до конца именно экрана, а не страницы.

Растягивать блоки по высоте до конца экрана - HTML, CSS
Доброго времени суток! Ребят мне нужно чтобы <div> растягивались по высоте экрана автоматически, даже если в них нет содержимого, как...

Подсчитать расстояние от верхнего конца экрана и задать поведение меню - jQuery
Хочу сделать так, что бы горизонтальное меню, которое находится в центре сайта прилеплялось к верху браузера при прокрутке вниз. Для этого,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kylych
13 / 13 / 2
Регистрация: 10.07.2015
Сообщений: 80
16.03.2016, 19:19 #2
GridView у тебя в каком то листе, ListView или RecyclerView или сам по себе, выложи код
0
yura91
30 / 28 / 2
Регистрация: 23.10.2013
Сообщений: 2,275
16.03.2016, 19:34  [ТС] #3
Сам по себе. А разве можно GridView добавить в ListView? Его же помоему только в RecyclerView через LayoutManager можно добавлять? Вот код активити и адаптера
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
public class MainActivity extends Activity  implements LoaderManager.LoaderCallbacks<List<String>> {
 
 
    private GridView mGridView;
 
    Context context;
 
   private List<String> mGridData;
    static final int LOADER_TIME_ID = 1;
   ImageAdapter mGridAdapter;
 
 
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gridview);
 
 
        context = MainActivity.this;
        mGridView = (GridView) findViewById(R.id.gridView);
 
 
 
        //Initialize with empty data
        mGridData = new ArrayList<String>();
        Bundle bndl = new Bundle();
 
 
        Loader<List<String>> loader;
 
        loader = getLoaderManager().initLoader(LOADER_TIME_ID, bndl, this);
 
        loader.forceLoad();
 
 
 
    }
 
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        Log.d("Func", "onSaveInstanceState");
    }
 
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        Log.d("Func", "onRestoreInstanceState");
    }
 
    @Override
    public Loader<List<String>> onCreateLoader(int id, Bundle args) {
 
        Loader<List<String>> loader = null;
        loader = new TimeLoader(this, args);
        Log.d("Func", "onCreateLoader: " + loader.hashCode());
        return loader;
    }
 
    @Override
    public void onLoadFinished(Loader<List<String>> loader, List<String> data) {
 
 
        mGridData = data;
 
        mGridAdapter = new ImageAdapter(context, mGridData);
        mGridView.setAdapter(mGridAdapter);
        Log.d("Func", "onLoadFinished for loader " + loader.hashCode());
 
    }
 
    @Override
    public void onLoaderReset(Loader<List<String>> loader) {
 
        Log.d("Func", "onLoaderReset for loader " + loader.hashCode());
    }
 
 
}
Добавлено через 32 секунды
Адаптер
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
public class ImageAdapter extends BaseAdapter {
 
 
 
    private Context mContext;
    private List<String> itemList;
 
 
    public ImageAdapter(Context c, List<String> itemList) {
        this.mContext = c;
        this.itemList = itemList;
    }
 
    void add(String path) {
        itemList.add(path);
        Log.d("Func", itemList.get(0));
    }
 
    @Override
    public int getCount() {
        return itemList.size();
    }
 
    @Override
    public Object getItem(int arg0) {
        return itemList.get(arg0);
    }
 
    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }
 
 
    @Override
    public View getView( final int position, View convertView, ViewGroup parent) {
       // final GifImageView imageView;
         final ProportionalImageView imageView;
        if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView = new ProportionalImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(170, 140));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
 
 
        } else {
 
            imageView = (ProportionalImageView)convertView;
 
            imageView.setImageDrawable(null);
        }
 
 
 
 
       Glide.with(mContext).load(itemList.get(position)).diskCacheStrategy(DiskCacheStrategy.SOURCE).into(imageView);
 
 
 
 
        return imageView;
    }
Добавлено через 4 минуты
И как сдесь определить момент когда при скроле будет достигнут конец экрана ? Есть интерфейс ScrollListener у него метод onScroll через него как можно? Мне просто нужно запихнуть не все гифки в адаптер сразу а брать по десять штук и при скроле когда достигнут конец экрана(все видимые картинки закончились) добавлять новые 10 штук вызывать adapter.notifysetdatachanged и так дальше до конца
0
Pablito
2494 / 1939 / 605
Регистрация: 12.05.2014
Сообщений: 6,798
Завершенные тесты: 1
16.03.2016, 19:37 #4
https://gist.github.com/ssinss/e06f12ef66c51252563e
не оно?
реализаций похожихнаписана уже целая куча, я бы на твоем месте не писал свой велосипед, а поискал по словам "infinite scroll"
0
yura91
30 / 28 / 2
Регистрация: 23.10.2013
Сообщений: 2,275
16.03.2016, 19:38  [ТС] #5
Вот я идумаю как правильно в onScroll определить достижение конца экрана?

Добавлено через 58 секунд
Ну почти здесь правда ресиклер а у меня грид чистый
0
Kylych
13 / 13 / 2
Регистрация: 10.07.2015
Сообщений: 80
16.03.2016, 20:14 #6
добавлять новые 10 штук вызывать adapter.notifysetdatachanged и так дальше до конца
Тогда следует определять слушатель в активити, там где ты первый раз добавляешь данные для адаптера.

Добавлено через 20 минут
У тебя листы гридвью, обычный лист оказывается, наверное нет возможности повесить на него слушатель. Тебе нужен полоноценный лист, RecyclerView
0
yura91
30 / 28 / 2
Регистрация: 23.10.2013
Сообщений: 2,275
17.03.2016, 12:20  [ТС] #7
просто у RecyclerView setOnScrollListener уже deprecated что лучше использовать вместо него?
0
Kylych
13 / 13 / 2
Регистрация: 10.07.2015
Сообщений: 80
17.03.2016, 12:24 #8
просто у RecyclerView setOnScrollListener уже deprecated что лучше использовать вместо него?
Java
1
2
3
4
5
6
7
8
9
10
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                if (dy > 0) //check for scroll down
                {
                    // конец списка и какой то код внизу
                    
                } 
            }
        });
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2016, 12:24
Привет! Вот еще темы с ответами:

Изобразить на экране отрезок, вращающийся в плоскости экрана вокруг своего конца - Turbo Pascal
Всем буду презнателен за помощь! Нужно 1) Построить семейство кривых y = f(x) для указанных значений параметра (лямда) ...

Написать программу (мультфильм), в котором двигается робот по горизонтали до конца экрана - Turbo Pascal
Program menu; uses crt, graph; var d, p, y, i, g, x, t, x2, x3, y2, y3: integer; k: char; robot_1, robot_2,...

Программа Очистки экрана в диалоговом режыме(координаты начала и конца вводить с клавиатуры)) - Assembler
В коледже задали курсовую:Розработка и слажывания на Ассемблер программы очистки экрана в диалоговом режыме(координаты начала и конца...

Достижение кроссбраузерности верстки - HTML, CSS
Хочу поднять тему достижения кроссбраузерности верстки. Все что я пока что верстал - исключительно для себя, т.е. для приобретения...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.03.2016, 12:24
Ответ Создать тему
Опции темы

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