42

Tôi đang sử dụng thư viện tương thích Android v4 để phát triển giao diện người dùng máy tính bảng sử dụng phân đoạn dành riêng cho thiết bị Android 2.2 trở lên.Chuyển tiếp tiêu chuẩn phân đoạn không hoạt ảnh

Mọi thứ đều hoạt động đúng cách, ngoại trừ việc tôi không thể làm bất kỳ hoạt ảnh nào hoạt động, ngay cả hoạt ảnh chuẩn.

Code:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
    ABCFragment abcFragment = new ABCFragment(); 
    ft.replace(R.id.main_frame_layout_fragment_holder,abcFragment);  
    ft.addToBackStack(null); 
    ft.commit(); 

Thay vì sử dụng một hình ảnh động quá cảnh, đoạn đóng băng trong khoảng một giây và chỉ biến mất và cái mới xuất hiện.

Sử dụng:

ft.setCustomAnimations(android.R.anim.slide_in_left,android.R.anim.slide_out_right); 

không hoạt động hoặc.

XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res/com.synergygb.mycustomapp" 
android:id="@+id/LinearLayout01" android:layout_width="fill_parent" 
android:layout_height="fill_parent" android:orientation="vertical" 
android:gravity="bottom"> 
<FrameLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/main_frame_layout_fragment_holder"> 
</FrameLayout> 
<!-- OTHER FIXED UI ELEMENTS--> 
</RelativeLayout> 

tôi đọc rằng hoạt hình tùy chỉnh đã bị phá vỡ trong thư viện phù hợp, nhưng không ai có vẻ gặp vấn đề với quá trình chuyển đổi tiêu chuẩn. Tôi đã thử nghiệm này trên 3.2.1 Motorola Xoom, Galaxy Tab 2.3 7" , 2.2 giả lập, và thậm chí trên HTC G2 với 2.3.4.

Điều gì có thể sai ở đây?

+0

Dalvik (trình gỡ rối) có cung cấp cho bạn bất cứ điều gì không? – IAmYourFaja

+0

Bạn có bất kỳ đầu ra logcat nào để cung cấp cho chúng tôi không? –

+0

Không có gì, đó là lý do tại sao im bị mất. Không có lỗi. Logcat không hiển thị gì cả. Chỉ cần gọi lại thường xuyên của hệ thống, không có gì liên quan đến những thay đổi trong ứng dụng đang diễn ra. Kiểm tra giá trị của mTransition nó cho = 4099. Giá trị này được đặt bởi: ft.setTransition (FragmentTransaction.TRANSIT_FRAGMENT_FADE); – blindstuff

Trả lời

35

cuối cùng tôi nhận được điều này. làm việc sau nhiều lần thử và e rror. Đầu tiên và quan trọng nhất là lấy ACL mới nhất, nó đã sửa chữa các hình động tùy chỉnh, và trong khi điều này không phải là vấn đề chính xác của tôi, một khi chúng hoạt động, tôi đã sử dụng chúng thay vì chuyển tiếp tiêu chuẩn.

Ngay bây giờ im sử dụng:

ft.setCustomAnimations(android.R.anim.fade_in,android.R.anim.fade_out,android.R.anim.fade_in,android.R.anim.fade_out); 

Chìa khóa để làm cho nó hoạt động trên cả Android 2.1, 2.2 và 2.3, cũng như Android 3.0+ là phải làm như sau:

  • Make chắc chắn bạn đang sử dụng các API CHỈ có sẵn cho API thấp nhất mà bạn muốn hỗ trợ (trong trường hợp của tôi là 2.1).
  • Biên dịch bằng Android 3.0.
  • Trong tệp kê khai, đặt android:hardwareAccelerated="true" bên trong thẻ ứng dụng của bạn.

Hoạt ảnh phân đoạn giờ đây hoạt động trên tất cả các thiết bị. Nếu bạn không thiết lập thông tin bổ sung trong thẻ ứng dụng, hoạt ảnh sẽ phát ra, nhưng theo một cách rất rất nhòe, làm cho nó có vẻ như nó không xảy ra chút nào.

Hy vọng điều này sẽ giúp ai đó trong tương lai!

Lưu ý, có một số công cụ kiểm tra API để bạn chắc chắn rằng bạn không sử dụng bất kỳ API nào không có sẵn cho bạn. Tôi thích làm việc trên 2.1 vì vậy IDE không hiển thị bất cứ điều gì tôi không thể sử dụng, một khi tôi có mã ổn định tôi nhảy trở lại để biên soạn trên 3.0

+0

Cảm ơn bạn đã trả lời câu hỏi này, hãy thử nghiệm trên SII, HTC evo, Nexus Galaxy và SIII và thật khủng khiếp khi thấy Nexus bị trễ hoạt ảnh, với thẻ phần cứng hoạt động như mong đợi :) – Goofyahead

+0

@blindstuff sử dụng bất kỳ mã nào ở cấp API cao hơn mức thấp nhất mà bạn đang hỗ trợ, không cần phải biên dịch dựa vào API mới hơn. Điều duy nhất biên dịch dựa trên một API mới hơn cung cấp cho bạn quyền truy cập vào các lớp và phương thức mới. –

+2

Bạn cần biên dịch trong phiên bản 3.0 trở lên để nhận dạng 'android: hardwareAccelerated =" true "'. – blindstuff

32

Hãy thử nhận được nhất ACL gần đây một lần nữa, họ đã cố định nó: http://code.google.com/p/android/issues/detail?id=15623#c19

Ngoài ra tôi nhận thấy rằng cho setCustomAnimations, nó cần phải được thiết lập trước khi giao dịch gọi như thay thế để có hiệu lực

FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
ft.setCustomAnimations(R.anim.in_from_left, R.anim.out_to_right, R.anim.in_from_right, R.anim.out_to_left); 
ft.replace(android.R.id.content, newFrag); 
ft.addToBackStack(null); 
ft.commit(); 
+0

Tôi đã thực hiện cả hai điều mà bạn mô tả, tôi đã nói rằng trong các ý kiến ​​là để cho theo dõi câu hỏi của tôi. Tôi đã có nó để làm việc đã có, nhưng im chỉ cần thử nghiệm trước khi tôi đưa ra một câu trả lời rằng im không chắc chắn 100%. Tôi đã nhận được nó để làm việc với Galaxy Tab, trên XOOM các hình ảnh động trông giống như crap. – blindstuff

+0

xin lỗi, tôi không thể nhận xét về bài đăng của người khác (không đủ danh tiếng). Rất vui được nghe bạn giải quyết nó mặc dù! – dvd

+0

Cảm ơn sự giúp đỡ của bạn, đã +1, rất hữu ích khi sử dụng 'ft.setCustomAnimations (R.anim.in_from_left, R.anim.out_to_right, R.anim.in_from_right, R.anim.out_to_left);' thay vì chỉ 'ft.setCustomAnimations (R.anim.in_from_left, R.anim.out_to_right); ' – blindstuff

0

Hy vọng điều này sẽ giúp một ai đó. Các tài liệu API nói sử dụng objectAnimator cho các hoạt ảnh phân đoạn, nhưng ngay cả với gói tương thích mới nhất objectAnimator trong xml không được trình biên dịch chấp nhận.

này làm việc cho tôi:

Đối với Android 3.0 hoặc cao hơn: khai báo objectAnimator xml trong res thư mục/phim hoạt hình.

Với gói Tương thích dưới 3,0: khai báo hoạt ảnh xml trong thư mục res/anim.

3

để thực hiện hoạt hình top_to_bottom cho mảnh,

theo cùng làm trên xuống dưới

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.setCustomAnimations(R.anim.top_to_bottom_fragment, 
android.R.animator.fade_out); ft.replace(R.id.simple_fragment, 
fragment); 
ft.commit(); 

top_to_bottom_fragment.xml

<objectAnimator android:duration="400" android:valueFrom="-800" 
    android:valueTo="0" android:propertyName="y" 
    android:valueType="floatType" 
    xmlns:android="http://schemas.android.com/apk/res/android" /> 

nơi valueFrom="-800" thấy đáy bố trí mảnh của bạn.

3

Tôi đã thêm hỗ trợ NineOldAndroids vào thư viện Hỗ trợ của Google. Xem http://www.github.com/kedzie/Support_v4_NineOldAndroids để biết chi tiết. Nó cho phép sử dụng các hình động bất động sản cho các chuyển đổi phân đoạn, trình dịch PageTransformers và một số thứ khác.

2

Bạn phải gọi setCustomAnimationstrước bạn thêm đoạn. Điều này cho phép thêm nhiều đoạn với các hoạt ảnh khác nhau.

Các vấn đề liên quan