Двигать текст рядом с движением кнопки

У меня есть маленькая проблема в рисунке кнопки для моего приложения Android. Я создал кнопку с эффектом 3D как тот, который появляется в следующем изображении:

enter image description here (1-ый Нормальный, 2-ой Нажатый.)

Но, если ты понял, когда нажимается кнопка, текст не двигается с оставшейся частью элементов вниз, если не, что упорствует в том же сайте и это делает потеряло эффект кнопки. У него было бы, что я повернул как в следующем изображении:

enter image description here

У кого-то какая-то идея есть как мочь решать это?

Это мой код:

activity_main.xml




    

    

Это код эффекта 3D кнопки:

button3d.xml



    
        
            
                
                    
                    
                
            
            
                
                    
                    
                
            
        
    
    
        
            
                
                    
                    
                
            
            
                
                    
                    
                
            
        
    

Заранее спасибо.

ОБНОВЛЕНИЕ:

Ответ x4mp73r - подлинное чудо, но я нашел неудачи, которые к вам пришло бы хорошо знать, даже в x4mp73r.

Первый их появляется, когда ты осуществил функцию setOnTouchListener(), потому что, когда ты нажимаешь на кнопку, эффект текста появляется правильно, но когда, не посылая пальца экрана, ты это тащишь наружу кнопки, сам возвращается к Вашей нормальной и текст остается с padding что он касается, потому что ты еще касаешься экрана. Он - обманщик объяснения и я не могу показывать это вам с изображениями, но если кто-то использует это, что пытается нажимать кнопку и не посылая, таща пальца наружу кнопки, и он поймет себя верно.

Простое решение состояло в том, чтобы отделять код файла button3d.xml в двух и делать, что метод OnTouch кнопки он будет манипулировать изменением padding и background следующей формы:

button3d_normal.xml

 

    
        
            
                
                    
                    
                
            
            
                
                    
                    
                
            
        
     

button3d_pressed.xml



    
        
            
                
                    
                    
                
            
            
                
                    
                    
                
            
        
    

activity_main.xml

Только он изменил бы кнопку:

MainActivity.java

btStart = (Button) findViewById(R.id.btStart);
btStart.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    btStart.setBackground(ContextCompat.getDrawable(getApplicationContext(), R.drawable.button3d_pressed));
                    btStart.setPadding(0, px, 0, 0);
                } else if (event.getAction() == MotionEvent.ACTION_UP) {
                    btStart.setBackground(ContextCompat.getDrawable(getApplicationContext(), R.drawable.button3d_normal));
                    btStart.setPadding(0, 0, 0, px);
                }
                return false;
            }
        });

Последняя проблема была что, если он осуществлял views OnTouchListener и OnClickListener в классе и он распределял два в кнопку (в том же порядке), setOnClickListener оно я не функционировало.

Решение принесло меня из головы, но было очень простой. Метод onTouch возврати стоимость booleano, если мы возвращаем эту стоимость как true, он будет означать, что уже мы покончили с любым действием этой кнопки, и что не будет осуществлено ничто более отдельное, но если мы возвратим false это будет все противоположность и мы можем продолжать применять к нему больше функций к той же кнопке.

Я надеюсь, что он подает вас в весь, эти кнопки остаются гениальными в приложении.

3
задан 13.04.2017, 16:00
1 ответ

Я думаю, что существуют много решений, одна из них состоит в том, чтобы использовать setPadding посредством onTouchListener в тебя botГіn:

tuBotón.setOnTouchListener(new View.OnTouchListener() {  
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
        if (event.getAction == MotionEvent.ACTION_UP) { 
            //Colocas el padding que necesites          
        } else if (event.getAction == MotionEvent.ACTION_DOWN){
            //Colocas el padding que necesites               
        }   
        return true; 
    } 
}); 

padding могут быть более или менее asГ-:

setPadding(left, top, right, bottom); // Botón normal
setPadding(left, top + x, right, bottom - x); // Botón presionado

Другая opciГіn - это пробуя добавлять это свойство в тебя botГіn:

android:gravity="bottom|center"

или:

android:layout_weight="0"

Ждал и тебе будьте полезен.

0
ответ дан 24.11.2019, 14:19

Теги

Похожие вопросы