hoán đổi đoạn trong một hoạt động thông qua hoạt ảnh


94

Tôi muốn hoán đổi hai phân đoạn trong một hoạt động thông qua hoạt ảnh, Giả sử PageA dành cho phân đoạn A và bên trái trên màn hình và TrangB dành cho phân đoạn B tức là ở bên phải màn hình. Bây giờ tôi muốn rằng khi tôi nhấp vào một nút trên trangA thì TrangA sẽ di chuyển sang phía bên phải của màn hình với một số hoạt ảnh chuyển tiếp.

Tôi đã thử mã bên dưới để thay thế vị trí

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container, new FragB());
fragmentTransaction.commit();

Tìm kiếm một số manh mối.

Cảm ơn trước.


Câu trả lời:


282

Câu hỏi cũ và bạn có thể đã tìm ra nó, nhưng để tham khảo trong tương lai:

đây là những gì bạn sử dụng để đặt hoạt ảnh tùy chỉnh khi bạn thay thế một phân đoạn qua mã:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
ft.replace(R.id.fragment_container, newFragment, "fragment");
// Start the animated transition.
ft.commit();

Đây là một ví dụ về hoạt ảnh slide_in_left:

<?xml version="1.0" encoding="utf-8"?>
<set>
  <translate xmlns:android="http://schemas.android.com/apk/res/android"
   android:fromXDelta="-100%"
   android:toXDelta="0"
   android:interpolator="@android:anim/decelerate_interpolator"
   android:duration="500"/>
</set>

Lưu ý rằng đây là hoạt ảnh nếu bạn đang sử dụng thư viện tương thích. Thay vào đó, nếu bạn đang sử dụng và SDK có hỗ trợ gốc cho FragmentManager thì hoạt ảnh của bạn sẽ giống như sau:

<?xml version="1.0" encoding="utf-8"?>
<set>
  <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="x" 
    android:valueType="floatType"
    android:valueFrom="-1280"
    android:valueTo="0" 
    android:duration="500"/>
</set>

Điều này là do thư viện tương thích không hỗ trợ kiểu objectAnimator mới và thay vào đó chỉ triển khai khung hoạt hình cũ.


92
Đây chắc chắn là câu trả lời đúng. Lưu ý rằng thứ tự quan trọng! Bạn cần có lệnh gọi setCustomAnimations () trước các lệnh gọi thêm / thay thế!
theelfismike

2
Vì vậy, bạn nên sử dụng cách tiếp cận nào nếu bạn muốn comp tốt nhất?
basickarl 24/09/13

17
Những hình ảnh động khác nhau này không hoàn toàn bằng nhau. Bạn đang giả định chiều rộng của đoạn của bạn bằng 1280 bằng cách sử dụng giá trị Từ -1280. Nếu chiều rộng lớn hơn, nó sẽ không bắt đầu hoàn toàn ngoài màn hình.
egfconnor

53
Thay vào đó, bạn có thể sử dụng các hoạt ảnh được xác định trước từ không gian tên android: transaction.setCustomAnimations (android.R.anim.slide_in_left, android.R.anim.slide_out_right);
Jordy

2
Các hoạt ảnh được xác định trước sẽ kích hoạt ngoại lệ thời gian chạy, FWIW, vì chúng dựa vào thẻ "dịch".
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.