LINUX.ORG.RU

Очень странное поведение listView

 


0

1

Я пытаюсь сделать паралакс эффект, и наконец я его вроде сделал, проблема в том что он работает для верхних элементов, а для нижних(чем ниже тем хуже) не работает. Вот код

listView.setOnScrollListener(new AbsListView.OnScrollListener() {

            //int lastTop = 0;
            HashMap<Integer, Integer> lastBottom = new HashMap<Integer, Integer>();
            int SIZE = 400;

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                                 int visibleItemCount, int totalItemCount) {

//
                int pos = view.getFirstVisiblePosition();
                Log.e("what", "first visible position :" + pos + " visibleItemCount :" + visibleItemCount);  // На нижних элементах это работает. 

                for(int i = pos; i < pos+visibleItemCount; i++){
                    View child = view.getChildAt(i);
                    if(child != null) {
                        int bottom = SIZE - child.getBottom();
                        if(lastBottom.get(i) == null){ lastBottom.put(i, 0); }
                        if (lastBottom.get(i) != bottom) {
                            TextView textView = (TextView) child.findViewById(R.id.textView);
                            ImageView imageView = (ImageView) child.findViewById(R.id.imageView);
                            textView.setText("bottom : " + bottom); // На нижних элементах текст не обновляется.
                            FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) textView.getLayoutParams();
                            

                            FrameLayout.LayoutParams params1 = (FrameLayout.LayoutParams) imageView.getLayoutParams();
                            params1.setMargins(0,0,0, -bottom / 10);
                            imageView.setLayoutParams(params1);


                            lastBottom.put(i, bottom);
                        }
                    }
                }
            }

            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {

            }
        });

Элементов 10, каждый элемент представляет собой такое

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/frameLayout"
    android:layout_width="match_parent"
    android:layout_height="300px">



    <ImageView
        android:layout_width="match_parent"
        android:layout_height="600px"
        android:layout_gravity="bottom"
        android:id="@+id/imageView" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:layout_gravity="bottom"
        android:textSize="30sp"
        android:textColor="#fff"
        android:paddingTop="30sp"
        android:background="@drawable/gradient"
        android:id="@+id/textView" />
</FrameLayout>
★★★

Бл*ть! Я дал тебе ссылку на либу, почему ты попрежнему жуешь кактус и спрашиваешь про это на ЛОРе, а не на каком-нибудь стаковерфлоу? И 2: Паралакс ни разу не вписывается в гайдлайны гугла, выкинь его нафиг.

Jefail ★★★★
()
Ответ на: комментарий от Jefail

Паралакс ни разу не вписывается в гайдлайны гугла, выкинь его нафиг.

+1

andreyu ★★★★★
()

View child = view.getChildAt(i);
if(child != null) {

похоже просто у тебя эта шляпа null, т.к. в цикле в котором ты бежишь

for(int i = pos; i < pos+visibleItemCount; i++){

pos это позиция первого элемента в адаптере, а не вьюшки в listview

koirn
()

Столько гемора, ради такого простого эффетка...

Чувак, забудь про ведроид с его говённым сдк, посмотри лучше не ютубе видео о том, как легко и непринуждённо создавать приложения в firefox os.

anonymous
()
Ответ на: комментарий от Jefail

Паралакс ни разу не вписывается в гайдлайны гугла, выкинь его нафиг.

Это тестовое задание на работу

abs ★★★
() автор топика

iOS'еры, скажите, ваш UI фреймфорк такой же уродский? Может это оправдано, что такие простые вещи делаются через задницу?

anonymous
()
Ответ на: комментарий от Jefail

Паралакс ни разу не вписывается в гайдлайны гугла, выкинь его нафиг.

Пруф? Открой в приложении гугл плея страницу любого приложения и поскроль экран - параллакс.

kazufukurou
()

// На нижних элементах текст не обновляется.

А зачем ему обновляться? У тебя же фоновая картинка двигается.

anonymous
()
Ответ на: комментарий от kazufukurou

А ты не думал что работадатель может читать ЛОР?)

Так я что, олимпиаду решаю? Я спокойно себе могу пользоваться гуглом или спрашивать. Я же не прошу за меня реализовать что-то, просто подсказать в чем проблема. Я просто писал на libGDX под android, а во всяких списках и прочем UI слабо разбираюсь.

abs ★★★
() автор топика
Ответ на: комментарий от abs

вот например firstVisiblePosition это попзиция в адаптере, а не в контейнере, а ты по ней смотришь в контейнере.

iOS'еры, скажите, ваш UI фреймфорк такой же уродский? Может это оправдано, что такие простые вещи делаются через задницу?

Причем здесь фрэймвок, тут дело в опыте.

kazufukurou
()
Ответ на: комментарий от kazufukurou

Причем здесь фрэймвок, тут дело в опыте.

Непредсказуемое поведение плохо

abs ★★★
() автор топика
Ответ на: комментарий от abs

Ты пробовал библиотеку, которую я кидал в соседнем треде? А вообще такое тестовое задание - бред. Если не секрет, что за контора просит сделать такое тестовое задание?

Jefail ★★★★
()
Последнее исправление: Jefail (всего исправлений: 1)
Ответ на: комментарий от Jefail

Если не секрет, что за контора просит сделать такое тестовое задание?

Разместил резюме на rabota.ua , мне написали на почту, попросили выполнить тестовое задание.

abs ★★★
() автор топика
Ответ на: комментарий от Jefail

Ты пробовал библиотеку, которую я кидал в соседнем треде?

Нет, попробую, у меня фобия пользоваться другими библиотеками(понимаю что это ужасно и борюсь с этим)

abs ★★★
() автор топика
Ответ на: комментарий от abs

Эмм, почему? Я даже в простом проекте использовал OkHttp ибо стандартный HTTP клиент в ведре - это синоним к слову боль. И EventBus, потому-что по дефолту там адовый callback hell. В сторонних либах вся прелесть андроида, они залатывают узкие места в гугловском SDK.

Jefail ★★★★
()
Ответ на: комментарий от Jefail

EventBus

Это как goto, при неаккуратном использовании код превращается в лапшу. Но все же лучше, чем LocalBroadcastManager.

anonymous
()
Ответ на: комментарий от kazufukurou

Причем здесь фрэймвок

Он требует лезть в свои самые глубокие внутренности чтобы сделать тривиальные вещи.

anonymous
()
Ответ на: комментарий от anonymous

Где здесь глубокие внутренности? Ставишь колбэк на скролл и меняешь margin по нему. Если убрать ненужные сущности, которые нагородил ТС то все влезет в 5-7 строк.

kazufukurou
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.