Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
lavan
53 / 53 / 8
Регистрация: 21.03.2009
Сообщений: 371
#1

Перерисовка layout

27.05.2015, 14:42. Просмотров 576. Ответов 1
Метки нет (Все метки)

здравствуйте,может кто сталкивался с такой проблемой
имею такой xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 <RelativeLayout
                          android:layout_width="match_parent"
                          android:layout_height="match_parent"
                          android:background="@android:color/black"
                          android:visibility="visible"
                          android:id="@+id/lb_lobby_center_layout">
 
 
 
                <include layout="@layout/lb_top_banner"
                         android:layout_height="115dp"
                         android:layout_width="match_parent"
                         android:layout_below="@+id/lb_top_menu_parent"
                        />
                <include layout="@layout/lb_top_menu"
                         android:layout_height="65dp"
                         android:layout_width="match_parent"
                        />
                <include layout="@layout/lb_ctg_game"
                         android:layout_height="match_parent"
                         android:layout_width="match_parent"
                         android:layout_below="@+id/lb_top_banner_ll_parent"/>
            </RelativeLayout>
layout под названием lb_top_banner поднимается вверх по оси Y(иммитация скролла) т.е этот lb_top_banner исчезнет когда его bottom сравняется с 0 на оси координат.layout (lb_ctg_game)который под ним должен изменить сою высоту на размер убранного layout(lb_top_banner ). имею следующее:
layout(lb_ctg_game) меняет свой topmargin но не меняет свою высоту.т.е между поледним layout(lb_ctg_game) и физическим дном телефона остаётся пустое место, высотой равной убранному layout(lb_top_banner ) .
вопрос как заставить layout (lb_ctg_game)занять по высоте всё пространство?
(если вызывать requestLayout() то эти два layout просто проподают)
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
80
 private void replaceView(int deltaY)
    {
        RelativeLayout.LayoutParams bannersParam = (RelativeLayout.LayoutParams) disappearView.getLayoutParams();
        RelativeLayout.LayoutParams gameContainerParams = (RelativeLayout.LayoutParams) gameContainer.getLayoutParams();
        int top =0, bottom = 0;
        if (isGoUp)
        {
            top = disappearView.getTop();
            bottom = disappearView.getBottom();
            if ((bottom - deltaY) > topBorder)
            {
                bannersParam.topMargin = top - deltaY;
                bannersParam.bottomMargin = bottom - deltaY;
                //disappearView.setLayoutParams(params2);
                disappearView.layout(disappearView.getLeft(),bannersParam.topMargin,disappearView.getRight(),bannersParam.bottomMargin);
                //disappearView.requestLayout();
                gameContainerParams.topMargin =bannersParam.bottomMargin;
                int yyy = gameContainer.getBottom() + deltaY;
                //gameContainer.setLayoutParams(listParams);
                gameContainer.layout(gameContainer.getLeft(),gameContainerParams.topMargin,gameContainer.getRight(),yyy);//gameContainer.getBottom()
                //layout(getLeft(),getTop(),getRight(),yyy);//getBottom()
                gameContainer.forceLayout();
                //gameContainer.requestLayout();
            }
            else
            {
                bannersParam.bottomMargin = topBorder -10;
                bannersParam.topMargin= bannersParam.bottomMargin -  disappearView.getHeight();
                disappearView.layout(disappearView.getLeft(),bannersParam.topMargin,disappearView.getRight(),bannersParam.bottomMargin);
                //disappearView.requestLayout();
                gameContainerParams.topMargin =topBorder;
                int yyy = gameContainer.getBottom() + disappearView.getHeight();
                //yyy = listParams.topMargin+yyy;
                //gameContainer.setLayoutParams(gameContainerParams);
                int th = gameContainer.getHeight();
                gameContainer.layout(gameContainer.getLeft(),gameContainerParams.topMargin,gameContainer.getRight(),yyy);//
                //layout(getLeft(),getTop(),getRight(),yyy);//getBottom()
                gameContainer.forceLayout();
                //gameContainer.requestLayout();
 
            }
        }
        else
        {
            int d = getFirstVisiblePosition();
            if (getFirstVisiblePosition() != 0)
                return;
            top = disappearView.getTop();
            bottom = disappearView.getBottom();
            if ((top + deltaY)<topBorder)
            {
                bannersParam.topMargin = top + deltaY;
                bannersParam.bottomMargin = bottom + deltaY;
                //disappearView.setLayoutParams(params2);
                disappearView.layout(disappearView.getLeft(),bannersParam.topMargin,disappearView.getRight(),bannersParam.bottomMargin);
                disappearView.forceLayout();
                gameContainerParams.topMargin =bannersParam.bottomMargin;
                gameContainer.layout(gameContainer.getLeft(), gameContainerParams.topMargin, gameContainer.getRight(), gameContainer.getBottom());
                //layout(getLeft(),listParams.topMargin,getRight(),getBottom());
                gameContainer.forceLayout();
               // gameContainer.invalidate();
 
            }
            else
            {
                bannersParam.topMargin= initionalY;
                bannersParam.bottomMargin = bannersParam.topMargin +  disappearView.getHeight();
                disappearView.layout(disappearView.getLeft(),bannersParam.topMargin,disappearView.getRight(),bannersParam.bottomMargin);
                disappearView.forceLayout();
                gameContainerParams.topMargin = bannersParam.bottomMargin;
                int yyy = gameContainer.getBottom();
                gameContainer.layout(gameContainer.getLeft(), gameContainerParams.topMargin, gameContainer.getRight(), gameContainer.getBottom());
                //layout(getLeft(),listParams.topMargin,getRight(),getBottom());
                gameContainer.forceLayout();
               // gameContainer.invalidate();
 
            }
 
        }
    }
перемещение происходит по событию onTouch()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2015, 14:42
Ответы с готовыми решениями:

Анимированный дизайн смены Layout или просто выдвигаемый layout
Ну, думаю тут и так всё понятно. Я просто не знаю, какие ключевые слова вводить...

At android.widget.LinearLayout.setChildFrame Layout в Layout-те
Нужен совет бывалых. У меня есть активити которое запускается с мейн активити,...

Не хочет работать в layout, но включается в layout-land
доброе утро ! пишу первое приложение. обычный мейн.хмель выглядит вот так :...

Добавить layout на layout
Нашёл такой код: layout.add(view); только не понимаю куда его писать. Нужно...

Перерисовка картинки
Нужно перерисовывать секундную стрелку часов. Запихнул всё в timetask и...

1
lavan
53 / 53 / 8
Регистрация: 21.03.2009
Сообщений: 371
28.05.2015, 14:54  [ТС] #2
после внимательного debug выяснилось,что по каким то непонтным причинам android игнорировл явное задание view.settopY(), и задавал topY как сумму topMargin и topY. чтобы этого не происходило надо каждый раз создавть новый layoutparams
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2015, 14:54

Layout
Здравствуйте! На layout кидаю изображение через ImaageView, при эмуляции по...

Очистить layout
Доброго времени суток! У меня есть очень большая анкета(около 120 EditText и...

layout 9 inch
Всем привет. Делаю аппликацию для таблета. изначально делал ее на 7 инч. а...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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