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

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

Войти
Регистрация
Восстановить пароль
 
lavan
53 / 53 / 1
Регистрация: 21.03.2009
Сообщений: 371
#1

Перерисовка layout - Программирование Android

27.05.2015, 14:42. Просмотров 477. Ответов 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 (Программирование Android):

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

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

Не хочет работать в layout, но включается в layout-land - Программирование Android
доброе утро ! пишу первое приложение. обычный мейн.хмель выглядит вот так : &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;LinearLayout...

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

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

Имя layout - Программирование Android
У меня одна Activity использует несколько layout. т.е., чтобы поменять страницу, я не меняю активити, а делаю что-то вроде ...

1
lavan
53 / 53 / 1
Регистрация: 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
Привет! Вот еще темы с ответами:

4 кнопки и layout - Программирование Android
Всем. Перечитал много разных тем на stackoverflow, там столько советов и советчиков, что голова пухнет. Большая часть советов о том,...

Разметка layout - Программирование Android
Хочу сделать вот такую разметку. Т.е. как-бы объединить ячейки, чтобы можно было в эту ячейку добавить компонент. Как это можно сделать?

Drawer Layout - Программирование Android
Имеется Drawer Layout со списком меню. Каждое меню кликабельно и меняет Fragment-ы. При нажатии на пункт списка выполняется метод: ...

TextViews и Layout - Программирование Android
Здравствуйте! Имеется много генерируемых TextView. Как их можно поставить друг за дугом, что бы получился текст, как в обчной статье? ...


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

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

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