Trong ứng dụng của tôi, tôi sử dụng trang tính đáy (từ thư viện hỗ trợ) hoạt động tốt. Bây giờ tôi muốn tạo hiệu ứng thay đổi bố cục trong khi trang tính được kéo lên. Đối với điều này tôi đã tạo ra một lớp con của BottomSheetCallback
(đây là normaly một lớp bên trong của một Fragment nên không phải tất cả đối tượng sử dụng trong calss này được khởi tạo ở đây):Thay đổi bố cục animate của trang tính dưới
public class MyBehavior extends BottomSheetBehavior.BottomSheetCallback {
Transition transition;
float lastOffset = 0;
Scene scene;
public PlayerBehavior() {
TransitionInflater inflater = TransitionInflater.from(getContext());
transition = inflater.inflateTransition(R.transition.player);
//transition.setDuration(300);
scene = fullLayout;
transition.setInterpolator(new Interpolator() {
@Override
public float getInterpolation(float v) {
return lastOffset;
}
});
}
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if(newState == BottomSheetBehavior.STATE_DRAGGING) {
TransitionManager.go(scene, transition);
}
}
@Override
public void onSlide(View bottomSheet, final float slideOffset) {
scene = (slideOffset > lastOffset) ? smallLayout : fullLayout;
lastOffset = slideOffset;
}
}
Như bạn có thể thấy tôi cũng tạo ra hai Scene
từ khác nhau tệp bố cục và tùy chỉnh Transition
để tạo hoạt ảnh giữa các cảnh với TransitionManager
. Vấn đề của tôi là Transition
phải dựa trên thông số slideOffset
(trong khoảng 0-1) nhưng TransitionManager
sử dụng lớp Animation
trong nền thường là thời gian dựa trên Android.
Tôi đã cố gắng tạo Intapolator tùy chỉnh nhưng điều này không hoạt động đúng cách. Vậy làm cách nào để tạo một Transition
dựa trên biến số bên ngoài và không đúng giờ?
Bạn có thể cung cấp ví dụ trực quan hay không. Ảnh chụp màn hình chẳng hạn? –
Tôi không nghĩ điều đó là có thể. BottomSheet offset có giá trị từ -1 đến 1 và nó không phải luôn luôn bị trả giữa 0 và 1 hoặc -1 và 0. Trong một số trường hợp, nó sẽ bắt đầu ở 0,3 và tăng lên tới 1,0f. Tôi đã có cùng một vấn đề trong quá khứ. Tôi đã phải lắng nghe các sự kiện thay đổi nhà nước animate dựa trên thời gian. –
Loại animate nào bạn cần. – Khemraj