Я пытаюсь анимировать набор кнопок, чтобы они исчезали последовательно по клику, а затем выполняет действие, основанное на нажатой кнопке. Действие назначается слушателю анимации, который запускается на конце анимации. Это прекрасно работает.ViewPropertyAnimator петли неожиданно
Проблема в том, что я хочу, чтобы кнопки снова появлялись последовательно, когда активность возобновляется. По какой-то причине действие, назначенное прослушивателю анимации, снова запускается даже после установки анимации в значение null. Что мне не хватает?
public class MainMenu extends ActionBarActivity {
private MenuItemBuilder menuItemBuilder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_menu);
init();
}
private void init() {
menuItemBuilder = new MenuItemBuilder(this);
}
@Override
protected void onResume() {
super.onResume();
if (menuItemBuilder != null) {
menuItemBuilder.animateAllViewsEnter();
}
}
Ниже приведено меню. У меня есть три пункта меню: загрузка базы данных, прайс-лист и многое другое. Этот класс управляет всеми анимациями.
public MenuItemBuilder(Context context) {
this.context = context;
init();
}
private void init() {
initLoadDatabase();
initPriceList();
initAbout();
}
private View getViewFromId(int res) {
return ((Activity) context).findViewById(res);
}
private ImageButton getImageButtonFromId(int res) {
return (ImageButton) ((Activity) context).findViewById(res);
}
private void initLoadDatabase() {
final ImageButton button = getImageButtonFromId(R.id.imageLoadDatabase);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
animateAllViewsExit(ButtonType.LOAD_DATABASE);
}
});
}
private void initPriceList() {
final ImageButton button = getImageButtonFromId(R.id.imagePriceList);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
animateAllViewsExit(ButtonType.PRICE_LIST);
}
});
}
private void initAbout() {
final ImageButton button = getImageButtonFromId(R.id.imageAbout);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
animateAllViewsExit(ButtonType.ABOUT);
}
});
}
private List<View> getAnimatedViews() {
List<View> viewList = new ArrayList<>();
viewList.add(getViewFromId(R.id.imageLoadDatabase));
viewList.add(getViewFromId(R.id.priceListContainer));
viewList.add(getViewFromId(R.id.imageAbout));
return viewList;
}
public void animateAllViewsEnter() {
List<View> viewList = getAnimatedViews();
for (int i = 0; i < viewList.size(); i++) {
View view = viewList.get(i);
view.animate()
.setStartDelay((viewList.size() - i) * 250)
.alpha(1.0f);
}
}
private void animateAllViewsExit(ButtonType buttonType) {
List<View> viewList = getAnimatedViews();
for (int i = 0; i < viewList.size(); i++) {
View view = viewList.get(i);
ViewPropertyAnimator animator = view.animate()
.setStartDelay(i * 250)
.alpha(0.0f);
if (i == viewList.size() - 1) {
lastAnimation = animator;
}
}
setAnimationAction(buttonType);
}
private void setAnimationAction(final ButtonType buttonType) {
if (lastAnimation != null) {
lastAnimation.setListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
performAction(buttonType);
lastAnimation = null;
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
}
}
private void performAction(ButtonType buttonType) {
switch (buttonType) {
case LOAD_DATABASE:
// TODO to be done
break;
case PRICE_LIST:
context.startActivity(new Intent(context, PriceList.class));
break;
case ABOUT:
context.startActivity(new Intent(context, About.class));
break;
}
}
private enum ButtonType {
LOAD_DATABASE,
PRICE_LIST,
ABOUT
}