Android:View.animate()无法使用ImageButton的自定义背景

时间:2013-08-10 20:37:57

标签: android android-layout android-animation

在最近的Android DevBytes video中,我们解释了如何使用InterpolatorsView.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所以也许这就是为什么它不起作用?知道我应该在这做什么吗?

注意:将XML中的android:background更改为我自己的图像可以正常工作。

1 个答案:

答案 0 :(得分:2)

我通过调用ImageButton的父视图的animate方法解决了这个问题:

((View)imageButtonView.getParent()).animate().setInterpolator(sDecelerator).
                                scaleX(.7f).scaleY(.7f);