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);