Как кодировать кнопку с различными эффектами при многократном нажатии

1

Я, возможно, задаю основной вопрос, но, если честно, у меня нет реальных разработок или знания кода. Меня попросили сделать прототип некоторого базового приложения, которое должно быть главным образом кнопками на экранах, активируемыми или отключаемыми. Я написал что-то вроде TL; DR, если мои объяснения плохие

Я кодировал это на Android Studio 3.0, мне (вряд ли) удалось разместить файлы PNG на экране, сделав их похожими на кнопку. Дело в том, что в то время как некоторые части приложения в основном состоят из независимых кнопок, которые можно переключать. Там часть, где нажатие кнопки должно отменить выбор других. И, если эта кнопка нажата второй раз, откройте другие действия.

Здесь часть моего кода я использую.

Этот для независимых кнопок

indbutton1.setOnTouchListener(new View.OnTouchListener(){
        // track if the image is selected or not
        boolean isSelected = true;

        public boolean onTouch(View v, MotionEvent event) {
            if(isSelected) {
                indbutton1.setImageResource(R.drawable.indbutton1slct);
            } else {
                indbutton1.setImageResource(R.drawable.indbutton1nosl);
            }
            // toggle the boolean
            isSelected = !isSelected;
            return false;
        }
    });

И этот для перехода в другие виды деятельности

  movements.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent gestesActivity = new Intent (getApplicationContext(), movements.class);
            startActivity(movementsActivity);
            finish();
        }
    });

TL; DR Как мне продолжить, чтобы сочетание кнопок нажималось, отключались другие, а затем при повторном нажатии я перехожу к другому занятию.

Спасибо за любую помощь :) -Pliskin

Теги:
android-studio-3.0
imageview
togglebutton

1 ответ

1
Лучший ответ

Вот как я это сделаю. Допустим, у вас есть 4 кнопки.

// your class fields
boolean [] alreadyTouched = new boolean[4];

Для каждой из 4 кнопок:

button0.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if(!alreadyTouched[0]){
            setAlreadyTouched(0);
            // one click actions here
        }else{
            // second click action
        }       


    }
});

Теперь вы делаете приватный метод в своем классе:

private void setAlreadyTouched(int index){
    for (int i = 0; i< alreadyTouched.length; i++)
        alreadyTouched[i] = false;
    if(index != -1)
        alreadyTouched[index] = true;
}

И для сброса вашего логического массива, когда кнопка теряет фокус:

button0.setOnFocusChangeListener(new View.OnFocusChangeListener(){
    @Override
    public void onFocusChange(View view, boolean hasFocus){
        if(!hasFocus)
            setAlreadyTouched(-1);
    }
});

Вы можете сделать то же самое, но с массивом int, если вы хотите более двух кликов с небольшими изменениями. Например:

// your class fields
int[] alreadyTouched = new int[4];

Ваш приватный метод:

private void setAlreadyTouched(int index){
    if(index == -1){
        for (int i = 0; i< alreadyTouched.length; i++)
            alreadyTouched[i]=0;
    }else
        alreadyTouched[index] = alreadyTouched[index] +1 ;
}

Затем просто добавьте несколько if в свои onClickListeners:

button0.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        setAlreadyTouched(0);
        switch(alreadyTouched[0]){            
            case 1:
            // one click actions here
            break:
            case 2:
            // second click action
            break:
            // ... and so on
            default:
            // action for max number of clicks here.
        }                   
    }
});
  • 0
    Спасибо за Ваш ответ. Поскольку я не обладаю большими знаниями (я Macgyvered целое приложение, я даже не знаю, как мне удалось заставить его работать), я не уверен, должны ли все эти коды помещаться в одном файле. Я поместил все в один файл .java. Почему-то я чувствую, что это не правильно, но я не в курсе и единственный, кому небезразлично разработать концепцию. Есть еще какие-то подробности о том, где я должен разместить эти детали? Извините, что потратил ваше время, сначала я не разработчик: / Я объединил все это. Позвольте мне загрузить скриншот, который я отредактирую здесь через минуту
  • 0
    Ух, просто в тот момент, когда я нажимаю кнопку «Изменить», меня отменяет какой-то обратный отсчет. Puu.sh/BVYsb/3f9fcc9d9b.png не рассматривает красные нерешенные символы как ... нерешенные, но в данный момент они снова глючат.
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню