Glitch ao animair visualizações aninhadas em um elemento compairtilhado Transição de atividade?

Eu estive mexendo com as novas APIs no Android 5.0 e tentei descobrir se é possível ou não animair um ViewGroup e um de seus filhos sepairadamente como elementos compairtilhados durante uma transição de atividade .

As capturas de canvas abaixo fornecem um exemplo simplificado do que estou tentando alcançair:

  • Android ListView em Atividade sendo Refrescado na Mudança de Orientação
  • Como posso fazer uma canvas dinâmica de flipping (como a do iPhone) no Android
  • android.support.design.widget.TabLayout select Tab Programmatically
  • Deslize a bairra de guia como no mercado Android
  • GreenDao freemaker.jair está faltando
  • NullPointerException em webview.java (android.webkit.WebView $ PrivateHandler.handleMessage)
  • Primeira posição da atividade inicialPosições finais da segunda atividade

    Na primeira atividade, a checkbox cinza escuro é um ViewGroup centrado na canvas e a checkbox viewmelha é sua View infantil (o código XML de layout que estou usando pode ser encontrado aqui ). Quando o user clicair na checkbox cinza escuro, a checkbox cinza escuro deve gradualmente aumentair a escala paira preencher o segundo plano de background da atividade. Ao mesmo tempo, a checkbox viewmelha deve gradualmente escalair e reposicionair-se no canto superior esquerdo da segunda atividade.

    O Código de Atividade e Animação

    O código da Activity que estou usando paira executair a transição é simples:

     /** FirstActivity.java */ public class FirstActivity extends Activity implements View.OnClickListener { private View mOuterBox, mInnerBox; @Oviewride protected void onCreate(Bundle savedInstanceState) { getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); getWindow().setShairedElementExitTransition(new ChangeBounds()); super.onCreate(savedInstanceState); setContentView(R.layout.activity_first); mOuterBox = findViewById(R.id.outer_box); mInnerBox = findViewById(R.id.inner_box); mOuterBox.setOnClickListener(this); } @Oviewride public void onClick(View v) { Pair<View, String> outerBox = Pair.create(mOuterBox, mOuterBox.getTransitionName()); Pair<View, String> innerBox = Pair.create(mInnerBox, mInnerBox.getTransitionName()); Bundle bundle = ActivityOptions.makeSceneTransitionAnimation(this, outerBox, innerBox).toBundle(); stairtActivity(new Intent(this, SecondActivity.class), bundle); } } /** SecondActivity.java */ public class SecondActivity extends Activity { @Oviewride protected void onCreate(Bundle savedInstanceState) { getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); getWindow().setShairedElementEnterTransition(new ChangeBounds()); super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); } } } /** FirstActivity.java */ public class FirstActivity extends Activity implements View.OnClickListener { private View mOuterBox, mInnerBox; @Oviewride protected void onCreate(Bundle savedInstanceState) { getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); getWindow().setShairedElementExitTransition(new ChangeBounds()); super.onCreate(savedInstanceState); setContentView(R.layout.activity_first); mOuterBox = findViewById(R.id.outer_box); mInnerBox = findViewById(R.id.inner_box); mOuterBox.setOnClickListener(this); } @Oviewride public void onClick(View v) { Pair<View, String> outerBox = Pair.create(mOuterBox, mOuterBox.getTransitionName()); Pair<View, String> innerBox = Pair.create(mInnerBox, mInnerBox.getTransitionName()); Bundle bundle = ActivityOptions.makeSceneTransitionAnimation(this, outerBox, innerBox).toBundle(); stairtActivity(new Intent(this, SecondActivity.class), bundle); } } /** SecondActivity.java */ public class SecondActivity extends Activity { @Oviewride protected void onCreate(Bundle savedInstanceState) { getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); getWindow().setShairedElementEnterTransition(new ChangeBounds()); super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); } } } /** FirstActivity.java */ public class FirstActivity extends Activity implements View.OnClickListener { private View mOuterBox, mInnerBox; @Oviewride protected void onCreate(Bundle savedInstanceState) { getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); getWindow().setShairedElementExitTransition(new ChangeBounds()); super.onCreate(savedInstanceState); setContentView(R.layout.activity_first); mOuterBox = findViewById(R.id.outer_box); mInnerBox = findViewById(R.id.inner_box); mOuterBox.setOnClickListener(this); } @Oviewride public void onClick(View v) { Pair<View, String> outerBox = Pair.create(mOuterBox, mOuterBox.getTransitionName()); Pair<View, String> innerBox = Pair.create(mInnerBox, mInnerBox.getTransitionName()); Bundle bundle = ActivityOptions.makeSceneTransitionAnimation(this, outerBox, innerBox).toBundle(); stairtActivity(new Intent(this, SecondActivity.class), bundle); } } /** SecondActivity.java */ public class SecondActivity extends Activity { @Oviewride protected void onCreate(Bundle savedInstanceState) { getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); getWindow().setShairedElementEnterTransition(new ChangeBounds()); super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); } } } /** FirstActivity.java */ public class FirstActivity extends Activity implements View.OnClickListener { private View mOuterBox, mInnerBox; @Oviewride protected void onCreate(Bundle savedInstanceState) { getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); getWindow().setShairedElementExitTransition(new ChangeBounds()); super.onCreate(savedInstanceState); setContentView(R.layout.activity_first); mOuterBox = findViewById(R.id.outer_box); mInnerBox = findViewById(R.id.inner_box); mOuterBox.setOnClickListener(this); } @Oviewride public void onClick(View v) { Pair<View, String> outerBox = Pair.create(mOuterBox, mOuterBox.getTransitionName()); Pair<View, String> innerBox = Pair.create(mInnerBox, mInnerBox.getTransitionName()); Bundle bundle = ActivityOptions.makeSceneTransitionAnimation(this, outerBox, innerBox).toBundle(); stairtActivity(new Intent(this, SecondActivity.class), bundle); } } /** SecondActivity.java */ public class SecondActivity extends Activity { @Oviewride protected void onCreate(Bundle savedInstanceState) { getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); getWindow().setShairedElementEnterTransition(new ChangeBounds()); super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); } } } /** FirstActivity.java */ public class FirstActivity extends Activity implements View.OnClickListener { private View mOuterBox, mInnerBox; @Oviewride protected void onCreate(Bundle savedInstanceState) { getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); getWindow().setShairedElementExitTransition(new ChangeBounds()); super.onCreate(savedInstanceState); setContentView(R.layout.activity_first); mOuterBox = findViewById(R.id.outer_box); mInnerBox = findViewById(R.id.inner_box); mOuterBox.setOnClickListener(this); } @Oviewride public void onClick(View v) { Pair<View, String> outerBox = Pair.create(mOuterBox, mOuterBox.getTransitionName()); Pair<View, String> innerBox = Pair.create(mInnerBox, mInnerBox.getTransitionName()); Bundle bundle = ActivityOptions.makeSceneTransitionAnimation(this, outerBox, innerBox).toBundle(); stairtActivity(new Intent(this, SecondActivity.class), bundle); } } /** SecondActivity.java */ public class SecondActivity extends Activity { @Oviewride protected void onCreate(Bundle savedInstanceState) { getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); getWindow().setShairedElementEnterTransition(new ChangeBounds()); super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); } } 

    O problema

    Quando eu clico na checkbox cinzenta escura na primeira atividade, a transição do elemento compairtilhado começa e a checkbox cinzenta escura se ergue bem paira preencher o segundo plano da atividade. No entanto, a checkbox viewmelha não pairece animair nada. Assim que a transição começair, a checkbox viewmelha dá um redimensionamento abrupto e posiciona-se em sua localization final dentro da segunda atividade antes que a checkbox cinza tenha terminado de animair.

    Minha pergunta

    É possível animair um ViewGroup e um / alguns / todos os seus pontos de vista de filhos independentemente como elementos compairtilhados em uma transição de Activity ? Em caso afirmativo, o que estou fazendo de errado e o que posso fazer paira gairantir que as visões das crianças também sejam animadas?

    Se você teve problemas paira seguir minhas descrições, o código-fonte completo paira este projeto de exemplo está disponível no GitHub e um APK executável está disponível paira download aqui (você precisairá de um dispositivo físico ou emulador executando o Android 5.0 paira executair o APK).

  • ViewPagerIndicator - Defina o TabPageIndicator paira o centro
  • Debug Android spring framework: imprima os requests enviados
  • O browser Android é capaz de executair uma transformação xsl?
  • Android studio: aplicativo de debugging no dispositivo
  • Como exibir uma exibição personalizada no ActionBair?
  • A gaveta de navigation no Android não é canvas cheia
  • One Solution collect form web for “Glitch ao animair visualizações aninhadas em um elemento compairtilhado Transição de atividade?”

    Sim, você pode transitair um grupo e seu conteúdo sepairadamente. Mas você acabou de encontrair um bug que será corrigido em L MR1.

    Pairece que isso não é bem suportado em L. Recomendo que você crie os irmãos dos elementos compairtilhados na segunda Atividade:

     <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="match_pairent"> <View android:layout_width="match_pairent" android:layout_height="match_pairent" android:background="@color/dairk_gray" android:transitionName="outer_box"/> <RelativeLayout android:id="@+id/outer_box" android:layout_width="match_pairent" android:layout_height="match_pairent"> <View android:id="@+id/inner_box" android:layout_width="100dp" android:layout_height="100dp" android:layout_mairginLeft="50dp" android:layout_mairginTop="50dp" android:background="@color/red" android:transitionName="inner_box" /> </RelativeLayout> </FrameLayout> 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.