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

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

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

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

18.12.2015, 20:14. Просмотров 398. Ответов 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;
            }
        });
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2015, 20:14     Показать кнопки при клике на нужный элемент
Посмотрите здесь:

Android При нажатии на EditText показать клавиатуры с нужным языком
Android Нужно, чтобы при отмеченном чекбоксе кнопки работали, а при снятии флажка переставали работать
Вылет при нажатии кнопки Android
Android Увеличение изображения при клике на миниатюру
Изменение цвета при клике по layout Android
Android Как найти id записи в SQlite таблице при клике на кнопку расположенную в Listview item?
Android Как показать ProgressDialog при долгом построении UI?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
2021 / 1763 / 548
Регистрация: 12.05.2014
Сообщений: 6,248
Завершенные тесты: 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);
            }
        });
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 297
Завершенные тесты: 1
18.12.2015, 21:12  [ТС]     Показать кнопки при клике на нужный элемент #3
нет, это сокращение кода и да, я даже проверила - оно мне не помогло.
Паблито
2021 / 1763 / 548
Регистрация: 12.05.2014
Сообщений: 6,248
Завершенные тесты: 1
18.12.2015, 21:50     Показать кнопки при клике на нужный элемент #4
это вообще другой слушатель
что там тебе не помогло - я не знаю, тут каждый день появляются люди, которые на словах такое рассказывают что заслушаешься, а начинаешь задавать вопросы - все делалось вообще не так
DemD10
58 / 47 / 12
Регистрация: 03.09.2013
Сообщений: 433
18.12.2015, 22:47     Показать кнопки при клике на нужный элемент #5
Я бы не стал критиковать создателя поста, так как люди все разные и каждый по разному усваивают материал, ну бывает такое не понятно что да как, надо объяснить. По существующему куску кода, сложно что либо сказать. Вы если хотите, могу объяснить , это не такие сложные вопросы, так что пишите в личку, я помогу чем смогу. По поводу того чтобы все кнопки были заранее скрыты, это можно в разметке задать. Вообщем, либо давайте больше инфы и мы будем подымать хайп на достаточно простой теме(что не нужно). Либо пишите в личку, я чет добрый перед выходными, и подскажу.
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 297
Завершенные тесты: 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 - проблемы это не поменяло, я ранее указала код, не нужно методы менять только из-за слова "клик", "обработчик клика". Сомневаетесь в чём-то? - спросите.
Spelcrawler
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
19.12.2015, 22:44     Показать кнопки при клике на нужный элемент #7
Nullik, вообще хорошо бы все нужные элементы, с которыми будут какие-то действия производиться инициализировать в onCreate(). Если что-то должно быть скрытым сразу - нужно скрывать это в разметке (разницы в поведении никакой, но не будет перерисовываться несколько раз, особенно если применяется View.GONE). Далее, если нужно обработать клик, то нужно вешать именно onClickListener т.к. у некоторых виджетов тач ивенты не стандартные и можно что-то поломать. Ну а почему кнопки не появляются не понятно, нужно весь код посмотреть.
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 297
Завершенные тесты: 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;
            }
        });
 
    }
}

Вот такие приколы с этой кнопкой.
Spelcrawler
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 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);
    }
 
 
 
 
}
Maiden
0 / 0 / 0
Регистрация: 23.12.2015
Сообщений: 1
23.12.2015, 15:50     Показать кнопки при клике на нужный элемент #10
Nullik, Есть очень понятная реализация создания и удаления кнопок:
http://startandroid.ru/ru/uroki/vse-...ilozhenii.html
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2015, 16:45     Показать кнопки при клике на нужный элемент
Еще ссылки по теме:

Android Оставить нажатое состояние кнопки при клике
Android Открыть старое активити при клике на уведомление
Элементы ExpandebleListView не меняют свой внешний вид при клике Android
Передать данные при клике на listview в другое activity Android
Как определить, что элемент RecyclerView пересекает при перемещении регион кнопки? Android

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

Или воспользуйтесь поиском по форуму:
Valakin
430 / 96 / 15
Регистрация: 21.02.2015
Сообщений: 724
23.12.2015, 16:45     Показать кнопки при клике на нужный элемент #11
Цитата Сообщение от Nullik Посмотреть сообщение
Вот такие приколы с этой кнопкой
а в чем прикол? если вы знаете как скрывать или отображать кнопки было бы логично для начала
написать что судя по логу строка например
findViewById(R.id.btn).setVisibility(View.VISIBLE);
выполнилась
тогда понятно будет что что то не так с этой строкой (или какой то другой от которой вы ожидаете чего то)
есть такая строка-обманщица?
Yandex
Объявления
23.12.2015, 16:45     Показать кнопки при клике на нужный элемент
Ответ Создать тему
Опции темы

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