2015-07-14 19 views
9

Tôi có một quá trình chuyển đổi yếu tố chia sẻ giữa hai hoạt động mà làm việc theo cách sau:Android: tăng tốc quá trình chuyển đổi yếu tố được chia sẻ giữa các hoạt động

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

này hoạt động tốt, nhưng quá trình chuyển đổi là agonizingly chậm. Khi hình ảnh được nhấp lần đầu tiên vào hình ảnh có vẻ như sẽ bị trì hoãn trong một hoặc hai giây trước khi quá trình chuyển đổi diễn ra. Đây có phải là do "trọng lượng" của hoạt động đang được tải hoặc cấu hình chậm trễ không?

+0

Bạn đang chuyển sang chế độ xem nào? Tôi đã thấy sự chậm trễ khi tôi đang sử dụng hình ảnh cần được chụp từ web - và trong trường hợp này, tôi trì hoãn quá trình chuyển đổi nhập (một phần của API) cho đến khi hình ảnh được tải xuống/hiển thị đầy đủ. – Booger

+0

@Booger Tôi đang chuyển từ một hoạt động chứa một recyclerview hình ảnh cho một hoạt động khác có chứa một mảnh có cùng một hình ảnh bên trong nó. Chế độ xem chính là một ImageView thông thường. – Jon

+0

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

Trả lời

11

Bạn có cố gắng thay đổi thời gian enterTransitionreturntransition:

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

Và trong onCreate:

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

cảm ơn - Tôi đã thử sử dụng cả hai từ fromActivity và toActivity trong quá trình chuyển đổi và nó không ảnh hưởng đến tốc độ. Vì vậy, nếu đây là cách duy nhất để thay đổi thời gian chuyển tiếp thì tôi đoán rằng trọng lượng của mảnh đó gây ra sự chậm trễ. Cảm ơn rất nhiều vì đã giúp đỡ của bạn – Jon

+0

Hiện tượng sét nhanh - cảm ơn! – danwilkie

4

Một cách khác có thể giúp một số đó đã có các thiết lập chuyển tiếp trong phong cách của họ:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    getWindow().getSharedElementEnterTransition().setDuration(2000); 
    getWindow().getSharedElementReturnTransition().setDuration(2000) 
     .setInterpolator(new DecelerateInterpolator()); 
} 
Các vấn đề liên quan