Android: View.animate() не работает с пользовательским фоном для ImageButton

В недавнем видео Android DevBytes было объяснено, как можно анимировать кнопку, используя Interpolators и View.animate() метод, чтобы сделать его более мультипликационным.

Код ниже:

public class LiveButton extends Activity {

    DecelerateInterpolator sDecelerator = new DecelerateInterpolator();
    OvershootInterpolator sOvershooter = new OvershootInterpolator(10f);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_overshoot);

        final Button clickMeButton = (Button) findViewById(R.id.clickMe);
        clickMeButton.animate().setDuration(200);

        clickMeButton.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View arg0, MotionEvent arg1) {
                if (arg1.getAction() == MotionEvent.ACTION_DOWN) {
                    clickMeButton.animate().setInterpolator(sDecelerator).
                            scaleX(.7f).scaleY(.7f);
                } else if (arg1.getAction() == MotionEvent.ACTION_UP) {
                    clickMeButton.animate().setInterpolator(sOvershooter).
                            scaleX(1f).scaleY(1f);
                }
                return false;
            }
        });

    }
}

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

Я меняю фон ImageButton как это:

view.setBackgroundResource(resID);

Я думаю, что это меняет android:src а не android:background так может поэтому не работает? Есть идеи, что мне здесь делать?

Примечание: изменение android:background внутри XML для моего собственного изображения работает.

1 ответ

Решение

Я решил проблему, вызвав метод animate родительского представления ImageButton как это:

((View)imageButtonView.getParent()).animate().setInterpolator(sDecelerator).
                                scaleX(.7f).scaleY(.7f);
Другие вопросы по тегам