Android: переход активности / анимация в ActivityGroup - PullRequest
0 голосов
/ 15 мая 2011

Я использую ActivityGroup для управления действиями, я хочу добавить анимацию при изменении активности, код, который я использовал для перехода к следующему виду деятельности:

Intent intent = new Intent(getParent(), AnotherActivity.class);
TabGroupActivity parentActivity = (TabGroupActivity) getParent();
parentActivity.startChildActivity("AnotherActivity", intent);

А внутри startChildActivity:

Window window =getLocalActivityManager().startActivity(Id,intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
if (window != null) {
    View view = window.getDecorView();
    mIdList.add(Id);
    setContentView(view);
}

TabGroupActivity - это просто ActivityGroup, предоставляет несколько полезных методов. С помощью приведенного выше кода, что / где я могу добавить, чтобы включить анимацию?

1 Ответ

2 голосов
/ 15 мая 2011

Мне нужно было реализовать мастер с переходами по страницам некоторое время назад. И я использовал подход ActivityGroup. Он имел Wizard (унаследовано от AcitivtyGroup) и WizardPage (унаследовано от Activity). WizardPage имел код, который обрабатывал анимации, тогда как Wizard отвечал за вызов этих анимаций в подходящее время.

WizardPage класс:

/**
 * Called to animate appearance of this activity 
 * as if somebody clicked next on previous activity 
 * and ended up to this activity.
 * 
 * Animation:  <---- 
 */
void onAnimateOpenAsNext()
{           
    animateTransition(android.R.attr.activityOpenEnterAnimation);
}

/**
 * Called to animate appearance of this activity 
 * as if somebody clicked back on previous activity 
 * and ended up to this activity.
 * 
 * Animation:  ----> 
 */
void onAnimateOpenAsPrev()
{
    animateTransition(android.R.attr.activityCloseEnterAnimation);
}   

/**
 * Called to animate disappearance of this acitivity 
 * when "next" button was clicked
 * 
 * Animation:  <-- 
 */
void onAnimateCloseOnNext()
{   
    animateTransition(android.R.attr.activityOpenExitAnimation);
}


/**
 * Called to animate disappearance of this activity 
 * when "prev" button was clicked
 * 
 * Animation:  --> 
 */ 
void onAnimateCloseOnPrev()
{       
    animateTransition(android.R.attr.activityCloseExitAnimation);
}

private void animateTransition(int animAttributeId)
{       
    TypedValue animations = new TypedValue();       
    Theme theme = this.getTheme();

    theme.resolveAttribute(android.R.attr.windowAnimationStyle, animations, true);      
    TypedArray animationArray = obtainStyledAttributes(animations.resourceId, 
                                                        new int[] {animAttributeId});

    int animResId = animationArray.getResourceId(0, 0);
    animationArray.recycle();

    if(animResId != 0)
    {
        try
        {
            Animation anim = AnimationUtils.loadAnimation(this, animResId);             
            getWindow().getDecorView().startAnimation(anim);
        }
        catch(Resources.NotFoundException ex)
        {
            //didn't find animation resource, ignore error
        }
    }               
}

Wizard имел startPage метод, который был вызван для фактических переходов активности:

public void startPage(int i)
{
    int prevIndex = getCurrentPageIndex();
    m_pageIndex = i;        

    WizardPage currentPage = getCurrentPage();  
    if(currentPage != null)
    {
        if(prevIndex <= i)
        {
            currentPage.onAnimateCloseOnNext();
        }
        else
        {
            currentPage.onAnimateCloseOnPrev();
        }
    }

    LocalActivityManager manager =  getLocalActivityManager();        

    m_startingActivity = true;
    Window activityWindow = manager.startActivity(Integer.toString(i), m_pageIntens.get(i));
    m_startingActivity = false;

    setContentView(activityWindow.getDecorView());


    currentPage = getCurrentPage();  
    if(currentPage != null)
    {
        if(prevIndex <= i)
        {
            getCurrentPage().onAnimateOpenAsNext();
        }
        else
        {
            getCurrentPage().onAnimateOpenAsPrev();
        }
    }
}
...