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

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

Войти
Регистрация
Восстановить пароль
 
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
#1

Показать кнопки при клике на нужный элемент - Программирование Android

18.12.2015, 20:14. Просмотров 510. Ответов 10
Метки нет (Все метки)

Добрый вечер!

Проблема: мне нужно на начальном этапе сделать кнопки "скрытыми", и как только нажимают на нужный элемент - сделать кнопки видимыми.

Делаю так, как посоветовали:

(Этот кусок кода я прописываю в методе onCreate)
Java
1
2
final ImageButton btn1 = (ImageButton) this.findViewById(R.id.btn);
        btn1.setVisibility(View.GONE);
отлично, кнопки скрывает.
Вешаю на картинку обработчик клика - "если на тебя нажали - покажи мне эти кнопки".

Java
1
2
final ImageButton btn1 = (ImageButton) this.findViewById(R.id.btn);
        btn1.setVisibility(View.VISIBLE);
Но проблема в том, что кнопки не показываются. Да, кнопки "типа сдвигаются", типа там где-то существуют, но не отображаются. Попробовала скрытие кнопок убрать на другой элемент, т.е.:
нажимаем на другой элемент -> кнопки скрываются.
нажимаем на нужную картинку - кнопки показываются.

А как сделать так, чтобы сразу кнопки были скрыты и по клику отображались?

Обработчик клика (находится в onCreate):
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
final ImageView imgTep = (ImageView) this.findViewById(R.id.imgt);
 
        imgTep.setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View arg0, MotionEvent event) {
                // Нажатие
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    final ImageButton btn1 = (ImageButton) findViewById(R.id.btn);
                    btn1.setVisibility(View.VISIBLE); 
                }
 
                return true;
            }
        });
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2015, 20:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Показать кнопки при клике на нужный элемент (Программирование Android):

Оставить нажатое состояние кнопки при клике - Программирование Android
Не могу найти по всему инету простую вещь - как оставить нажатое состояние кнопки при клике - скажем она меняет картинку на ON , при...

Переход на нужный фрагмент по нажатию кнопки назад - Программирование Android
Здравствуйте, у меня есть 2 фрагмента со списком ListFragment (выбираю категорию и подкатегорию) и еще другие информационные фрагменты, на...

Как определить, что элемент RecyclerView пересекает при перемещении регион кнопки? - Программирование Android
У меня есть recyclerview а внизу экрана есть кнопка. На recyclerview повешен TouchListener и у него есть метод public boolean onTouch(View...

Показать/скрыть элемент при клике на checkbox - jQuery
http://jsfiddle.net/alex_japson/ePCp5/ как исправить? хочу чтобы при клике на checkbox появлялся input с вводом старой фамилии ...

Скрыть лист и перейти на нужный при клике на кнопке или гиперссылку EXcel - MS Excel
Всем привет. Очень нужна помощь. Пример: Есть лист1 лист2 лист3 лист4 Заходим в документ, и открыт только лист1 все остальные...

Показать блок при клике на ссылку - JavaScript
Друзья, помогите пожалуйста, js не знаю, а проблему нужно решить чем быстрее, тем лучше <div class="comments"...

10
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
18.12.2015, 20:22 #2
Java
1
2
3
4
5
6
        imgTep.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                findViewById(R.id.btn).setVisibility(View.VISIBLE);
            }
        });
0
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
18.12.2015, 21:12  [ТС] #3
нет, это сокращение кода и да, я даже проверила - оно мне не помогло.
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
18.12.2015, 21:50 #4
это вообще другой слушатель
что там тебе не помогло - я не знаю, тут каждый день появляются люди, которые на словах такое рассказывают что заслушаешься, а начинаешь задавать вопросы - все делалось вообще не так
0
DemD10
58 / 47 / 12
Регистрация: 03.09.2013
Сообщений: 442
18.12.2015, 22:47 #5
Я бы не стал критиковать создателя поста, так как люди все разные и каждый по разному усваивают материал, ну бывает такое не понятно что да как, надо объяснить. По существующему куску кода, сложно что либо сказать. Вы если хотите, могу объяснить , это не такие сложные вопросы, так что пишите в личку, я помогу чем смогу. По поводу того чтобы все кнопки были заранее скрыты, это можно в разметке задать. Вообщем, либо давайте больше инфы и мы будем подымать хайп на достаточно простой теме(что не нужно). Либо пишите в личку, я чет добрый перед выходными, и подскажу.
0
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
19.12.2015, 22:15  [ТС] #6
Хорошо, возможно тут моя вина, что я говорила "как сделать по клику" и, наш советчик Паблито, меня не правильно понял.

Итак, немного гугла с оф.сайта:
View.OnClickListener
android.view.View.OnClickListener

Для чего: Interface definition for a callback to be invoked when a view is clicked.

Методы:
1)Public Methods
abstract void onClick(View v) Для чего: Called when a view has been clicked.
и

View.OnTouchListener
android.view.View.OnTouchListener

Для чего: Interface definition for a callback to be invoked when a touch event is dispatched to this view. The callback will be invoked before the touch event is given to the view.


Методы:
1) Public Methods
abstract boolean onTouch(View v, MotionEvent event), Для чего: Called when a touch event is dispatched to a view.

Параметры (особенно второй):
Parameters
1) v - The view the touch event has been dispatched to.
2) event - The MotionEvent object containing full information about the event.
Ранее была тема, где мне посоветовали как сделать. Кнопкам нужны координаты, чтобы их хорошо подвинуть.

Да, я это реализовала, проблема именно "почему так криво скрывает и потом не показывает?". Т.е., если сначала не скрою, а только потом в действиях - скрывает и отображает, если в разметке или в onCreate - не показывает.

И даже если я не заметила setOnClickListener - проблемы это не поменяло, я ранее указала код, не нужно методы менять только из-за слова "клик", "обработчик клика". Сомневаетесь в чём-то? - спросите.
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,654
Завершенные тесты: 1
19.12.2015, 22:44 #7
Nullik, вообще хорошо бы все нужные элементы, с которыми будут какие-то действия производиться инициализировать в onCreate(). Если что-то должно быть скрытым сразу - нужно скрывать это в разметке (разницы в поведении никакой, но не будет перерисовываться несколько раз, особенно если применяется View.GONE). Далее, если нужно обработать клик, то нужно вешать именно onClickListener т.к. у некоторых виджетов тач ивенты не стандартные и можно что-то поломать. Ну а почему кнопки не появляются не понятно, нужно весь код посмотреть.
0
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
20.12.2015, 15:43  [ТС] #8
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Ну а почему кнопки не появляются не понятно, нужно весь код посмотреть.
Ну если скидывать весь код, то выйдет примерно так:

Урезанная часть XML файла. где нужны необходимые элементы.
1) ImageView
android:id="@+id/img"
Это большая картинка (карта). Статична, не двигается, на весь экран по размеру слоя.

2) ImageView
android:id="@+id/imgt"
Это мелкая картинка (здания) - по нажатию на этой картинке - должны появляться кнопки (переключатели этажа). Причём не просто нажатию, а именно с координатами = точка, где было нажатие + несколько пикселей левее + пополам, чтобы две кнопки были по середине.

3 и 4) ImageButton - кнопки для переключения этажей. начальное положение (0, 0) и (45, 0).
Здесь в разметке нет View.GONE.

XML
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
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="1973dp"
    android:layout_height="1700dp"
    android:background="#ffffff"
    android:gravity="center"
    android:id="@+id/maprl">
 
    <RelativeLayout
        android:background="#ffffff"
        android:layout_width="1973dp"
        android:layout_height="1700dp"
        android:id="@+id/zoomrl"
        android:gravity="center">
 
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/img"
            android:background="#ffffff"
            android:scaleType="center"
            android:src="@drawable/maina5" />
 
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/imgt"
            android:background="#ffffff"
            android:layout_marginTop="407dp"
            android:layout_marginLeft="1428dp"
            android:scaleType="center"
            android:src="@drawable/t6" />
 
        <ImageButton
            android:id="@+id/flooruptep"
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:src="@drawable/up"
            android:background="@drawable/floorbtn"
            android:layout_marginTop="0dp"
            android:layout_marginLeft="0dp" />
 
        <ImageButton
            android:id="@+id/floordowntep"
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:src="@drawable/down"
            android:background="@drawable/floorbtn"
            android:layout_marginTop="45dp"
            android:layout_marginLeft="0dp"/>
 
    </RelativeLayout>
 
</RelativeLayout>
Далее код java:
К сожалению весь код всё равно не могу показать, покажу только наиболее важные (значимые) участки кода, где происходят изменения картинки.

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package c.ru.co;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.Toast;
 
public class Map extends Activity{
 
    // Размеры изображения, в данном случае - карты первого этажа (самая большая неизменяемая картинка)
    int bitmapWidth = 1973;
    int bitmapHeight = 1700;
 
    ImageButton fluptep, fldowntep; // кнопки переключения этажей
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        // Отключили ActionBar
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        // Отключили Title приложения
        requestWindowFeature(Window.FEATURE_NO_TITLE);
 
        setContentView(R.layout.map_layout);
 
        fluptep = (ImageButton) findViewById(R.id.flooruptep);
        fldowntep = (ImageButton) findViewById(R.id.floordowntep);
 
// сделали невидимой только 1 кнопку. верхнюю
        fluptep.setVisibility(View.GONE);
 
 
        ////////////////////////////////////////////////////////
        // Слой RelativeLayout, scroll, scale
        ////////////////////////////////////////////////////////
 
        final RelativeLayout zoomRl = (RelativeLayout) this.findViewById(R.id.zoomrl);
 
        zoomRl.setOnTouchListener(new View.OnTouchListener() {
 
            public boolean onTouch(View arg0, MotionEvent event) {
 
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN: // Нажатие
 
 
// делает две кнопки невидимыми
                        fluptep.setVisibility(View.GONE);
                        fldowntep.setVisibility(View.GONE);
 
                        break;
 
                    case MotionEvent.ACTION_MOVE: // Движение
                        
                        break;
 
                    case MotionEvent.ACTION_UP: // Отпускание
                       
 
                        break;
                }
 
                return true;
            }
        });
 
       
 
        ////////////////////////////////////////////////////////
        // Картинка здания
        ////////////////////////////////////////////////////////
 
        final ImageView imgTep = (ImageView) this.findViewById(R.id.imgt);
 
        imgTep.setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View arg0, MotionEvent event) {
                // Нажатие
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
 
                    Toast.makeText(getBaseContext(), "Теплофак", Toast.LENGTH_SHORT).show();
 
                    RelativeLayout.LayoutParams btnParams1 = new RelativeLayout.LayoutParams(fluptep.getWidth(), fluptep.getHeight());
                    btnParams1.leftMargin = (int) event.getX() + (int) (1435 * appDensity);
                    btnParams1.topMargin = (int) event.getY() + (int) (367 * appDensity);
                    fluptep.setLayoutParams(btnParams1);
 
                    RelativeLayout.LayoutParams btnParams2 = new RelativeLayout.LayoutParams(fldowntep.getWidth(), fldowntep.getHeight());
                    btnParams2.leftMargin = (int) event.getX() + (int) (1435 * appDensity);
                    btnParams2.topMargin = (int) event.getY() + (int) (412 * appDensity);
                    fldowntep.setLayoutParams(btnParams2);
 
 
// картинки показываются, но т.к. первая картинка из onCreate скрыта - не показывается. Нижняя показывается.
                    fluptep.setVisibility(View.VISIBLE);
                    fldowntep.setVisibility(View.VISIBLE);
                }
 
                return true;
            }
        });
 
    }
}

Вот такие приколы с этой кнопкой.
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,654
Завершенные тесты: 1
20.12.2015, 16:09 #9
Nullik, из кода выше не видно никаких проблем. Покажу код, который точно работает:

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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight=".5"
            android:text="Cilck Event"
            android:id="@+id/clickButton"/>
        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight=".5"
            android:text="Touch Event"
            android:id="@+id/touchButton"/>
    </LinearLayout>
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="bottom">
        <ImageView
            android:layout_width="0dp"
            android:layout_height="48dp"
            android:layout_weight=".5"
            android:src="@mipmap/ic_launcher"
            android:id="@+id/firstImage"/>
        <ImageView
            android:layout_width="0dp"
            android:layout_height="48dp"
            android:layout_weight=".5"
            android:src="@mipmap/ic_launcher"
            android:id="@+id/secondImage"/>
    </LinearLayout>
 
 
</FrameLayout>


java

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
public class InvisibleButtonsActivity extends AppCompatActivity {
 
    private Button mTouchButton;
    private Button mClickButton;
    private ImageView mFirstImage;
    private ImageView mSecondImage;
 
    private boolean mIsImagesVisible = false;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        mTouchButton = (Button) findViewById(R.id.touchButton);
        mClickButton = (Button) findViewById(R.id.clickButton);
        mFirstImage = (ImageView) findViewById(R.id.firstImage);
        mSecondImage = (ImageView) findViewById(R.id.secondImage);
 
        changeImagesVisibility();
 
        mTouchButton.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
                    changeImagesVisibility();
                }
 
                return false;
            }
        });
 
        mClickButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                changeImagesVisibility();
            }
        });
 
    }
 
    private void changeImagesVisibility() {
        mIsImagesVisible = !mIsImagesVisible;
        mFirstImage.setVisibility(mIsImagesVisible ? View.VISIBLE : View.GONE);
        mSecondImage.setVisibility(mIsImagesVisible ? View.VISIBLE : View.GONE);
    }
 
 
 
 
}
0
Maiden
0 / 0 / 0
Регистрация: 23.12.2015
Сообщений: 1
23.12.2015, 15:50 #10
Nullik, Есть очень понятная реализация создания и удаления кнопок:
http://startandroid.ru/ru/uroki/vse-...ilozhenii.html
0
Valakin
431 / 97 / 15
Регистрация: 21.02.2015
Сообщений: 731
23.12.2015, 16:45 #11
Цитата Сообщение от Nullik Посмотреть сообщение
Вот такие приколы с этой кнопкой
а в чем прикол? если вы знаете как скрывать или отображать кнопки было бы логично для начала
написать что судя по логу строка например
findViewById(R.id.btn).setVisibility(View.VISIBLE);
выполнилась
тогда понятно будет что что то не так с этой строкой (или какой то другой от которой вы ожидаете чего то)
есть такая строка-обманщица?
0
23.12.2015, 16:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2015, 16:45
Привет! Вот еще темы с ответами:

Показать текст при клике по option - jQuery
Скажите, как вывести текст при клике на определенный option К примеру &lt;select &gt; &lt;option value=&quot;1&quot;&gt;1&lt;/option&gt; &lt;option...

Выпадающее меню: показать и скрыть при клике. - jQuery
Всем доброго времени суток. Есть кусок кода, который при наведении вызывает плавно выпадающее меню Подскажите как сделать, чтобы меню...

Показать/скрыть блок div при клике - jQuery
Добрый день! Пробую сделать штуку на jQuery, чтобы при щелчке мыши по надписи &quot;Показать/скрыть форму заявки&quot; появлялся блок с формой, а при...

При клике на Item в ListBox показать всплывающую подсказку - C# WPF
Здравствуйте! Подскажите пожалуйста, как реализовать всплывающую подсказку при клике на Item в ListBox? Заранее огромное спасибо!


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

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

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