2015-07-14 3 views
9

У меня есть общий элемент переход между двумя видами деятельности, которая работает следующим образом:Android: ускорение разделяемого переходного элемента между деятельностью

Intent someintent = new Intent(this, someclass.class); 

     if (Build.VERSION.SDK_INT >= 21) { 

      ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this 
        , new Pair<>(viewClicked.findViewById(R.id.someimage), "someimage") 
        , new Pair<>(viewClicked.findViewById(R.id.someicon), "someicon") 
      ); 
      startActivity(someintent, options.toBundle()); 
     } 
     else { 
      startActivity(someintent); 
     } 

это работает отлично, но переход мучительно медленно. Когда изображение сначала нажимается, оно, кажется, останавливается на секунду или два до перехода. Это связано с «весом» загружаемой активности или настраиваемой задержкой?

+0

С каким видом вы переходите? Я видел задержки, когда я использую изображение, которое нужно захватить из Интернета, и в этом случае я задерживаю переход ввода (часть API), пока изображение не будет полностью загружено/отображено. – Booger

+0

@Booger Я перехожу из активности, которая содержит переработку изображений для другого действия, содержащего фрагмент, который имеет одно и то же изображение внутри него. Само представление представляет собой обычный ImageView. – Jon

+0

http://www.androiddesignpatterns.com/2015/03/activity-postponed-shared-element-transitions-part3b.html. – Sakiboy

ответ

11

Пробовали ли вы продолжительность смены в enterTransition и returntransition:

private Transition enterTransition() { 
     ChangeBounds bounds = new ChangeBounds(); 
     bounds.setDuration(2000); 

     return bounds; 
    } 

    private Transition returnTransition() { 
     ChangeBounds bounds = new ChangeBounds(); 
     bounds.setInterpolator(new DecelerateInterpolator()); 
     bounds.setDuration(2000); 

     return bounds; 
    } 

И в onCreate:

getWindow().setSharedElementEnterTransition(enterTransition()); 
getWindow().setSharedElementReturnTransition(returnTransition()); 
+0

спасибо - я пробовал использовать это как inActivity, так и inActivity в процессе перехода, и это не влияет на скорость. Итак, если это единственный способ изменить время перехода, я предполагаю, что вес фрагмента вызывает задержку. Большое спасибо за вашу помощь. – Jon

+0

Молния быстро - спасибо! – danwilkie

4

Другой способ, который может помочь некоторым, что уже есть настройки Transitions в своих стилях:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    getWindow().getSharedElementEnterTransition().setDuration(2000); 
    getWindow().getSharedElementReturnTransition().setDuration(2000) 
     .setInterpolator(new DecelerateInterpolator()); 
} 
Смежные вопросы