Анимация нажатой кнопки будет длиннее - PullRequest
1 голос
/ 30 марта 2012

У меня есть эта кнопка xml, когда она будет нажата, нажатое изображение (b) будет дольше отображаться, прежде чем оно вернется к нормальной кнопке.

Вот мой xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/a" />
<item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/b" />
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/b" />
<item android:drawable="@drawable/a" />

У кого-нибудь есть идеи по этому поводу?

Для исправления.Я использовал это.

closeButton.setOnTouchListener(new View.OnTouchListener() {

        public boolean onTouch(final View v, MotionEvent event) {
            switch(event.getAction())
            {
            case MotionEvent.ACTION_DOWN:
                v.setPressed(true);
                return true;
            case MotionEvent.ACTION_UP:
                v.setPressed(false);
                try {
            Thread.sleep(150);
        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        return true;
        }
            return false;  

        }
 });

Ответы [ 2 ]

3 голосов
/ 26 ноября 2013

Вы можете анимировать изменения состояния, используя exitFadeDuration

<selector xmlns:android="http://schemas.android.com/apk/res/android"
        android:exitFadeDuration="@android:integer/config_mediumAnimTime">
    <item android:state_activated="true" android:drawable="@android:drawable/list_selector_background_selected" />
    <item android:drawable="@color/transparent" />
</selector>

Это приведет к исчезновению изменений состояния входа / выхода на вашем селекторе, вы можете изменить время на другое.

1 голос
/ 30 марта 2012

Попробуй вот так ..

Handler handler=new Handler();
mybutton.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            v.setPressed(true);
           handler.postDelayed(new Runnable() {
 @Override
 public void run() {
v.setPressed(false);
 }
 }, 2000);<-- you can set for how much time the button should be in pressed state..2 seco9nds in this case
            return true;
        }
    });
...