2012-01-26 50 views
10

Tôi đang sử dụng thư viện hỗ trợ android-support-v4-googlemaps của Peter Doyle để triển khai Hoạt động sử dụng cả Phân đoạn và Google Maps và dường như không có hoạt ảnh FragmentTransaction hoạt động. Tôi đã thử sử dụng phương pháp setCustomAnimations(int enter, int exit) cũng như phương pháp setTransition(int transit) nhưng không có kết quả. Bất kỳ ai cũng có thể tạo hoạt ảnh để làm việc hoặc cũng gặp sự cố khi tải hoạt ảnh?Thư viện hỗ trợ: Hoạt ảnh FragmentTransaction không hoạt động

Một số hình ảnh động tôi đã cố gắng:

setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) 

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

setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right) 
+1

Tôi tin rằng tôi đã làm việc trên Galaxy S2 nhưng không phải là những người khác. Tôi sẽ quay lại để cập nhật cho bạn về điều này khi tôi làm việc vào sáng mai. – RobGThai

+1

Kiểm tra câu hỏi này. Câu trả lời được chấp nhận đã giúp tôi. http://stackoverflow.com/questions/7718111/android-fragment-standard-transition-not-animating – Sababado

Trả lời

1

Các bạn đã thử FragmentTransaction.remove() và sau đó FragmentTransaction.add(), thay vì FragmentTransaction.replace()? Tôi đã thấy trong các chủ đề khác than phiền về replace() không hoạt động như mong đợi.

Tôi đã không được sử dụng thư viện android-support-v4-googlemaps, nhưng tôi có thể xác nhận mã dưới đây làm việc với android-support-v4.jar:

FragmentTransaction tx = getSupportFragmentManager().beginTransaction(); 
tx.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right); 
tx.replace(R.id.fragment_container, new Fragment2()); 
tx.addToBackStack(null); 
tx.commit(); 
+0

Cảm ơn phản hồi Andres. Thật không may tôi không thể có được hình ảnh động để làm việc (trừ 'setTransition (FragmentTransaction.TRANSIT_FRAGMENT_OPEN)' và 'setTransition (FragmentTransaction.TRANSIT_FRAGMENT_CLOSE)' nhưng gặp phải các vấn đề khác với điều này) để loại bỏ các cuộc gọi phương thức hoạt hình/chuyển tiếp. –

+0

Sử dụng .add() là giải pháp tốt hơn so với việc sử dụng of.replace(). Một ví dụ tốt là việc sử dụng .replace() trong hỗ trợ v27.0.0 với setCustomAnimations, ứng dụng chỉ đơn giản là treo khi phân mảnh được loại bỏ khỏi ngăn xếp. Đối với tôi giải pháp là sử dụng .add(), nhưng giao dịch trong hoạt ảnh bị mất vì @AdilHussain đã nói – Pelanes

11

Bạn nên gọi FragmentTransaction. setCustomAnimations trước và sau đó gọi FragmentTransaction. thay phương pháp như thế này:

 FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); 
     ft.setCustomAnimations(R.anim.fade_out,R.anim.fade_in); 
     ft.replace(R.id.fragmentDetails, detailsFrag); 
+1

OMG !! Tôi không thể tin rằng nó ngu ngốc như vậy! đã cho tôi giờ! –

0

Cố gắng tạo ra một bản chụp của bản đồ google của bạn:

private void snapShot() { 
    SnapshotReadyCallback callback = new SnapshotReadyCallback() { 
     Bitmap bitmap; 

     @Override 
     public void onSnapshotReady(Bitmap snapshot) { 
      // TODO Auto-generated method stub 
      bitmap = snapshot; 
      try { 
       FileOutputStream out = new FileOutputStream(getActivity() 
         .getFilesDir() + "/MapSnapshot.png"); 
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); 
      } catch (Exception e) { 
        e.printStackTrace(); 
      } 
     } 
    }; 

    map.snapshot(callback); 

} 

Các làm một đoạn mới mà chỉ có một hình ảnh của bản đồ. Tải đoạn mới này với thay thế và sau đó thực hiện chuyển đổi trên đoạn bạn muốn thay thế: SnapShotFragment SnapFragment = new SnapShotFragment(); FragmentTransaction transaction = getFragmentManager() .beginTransaction();

     transaction.replace(MapFragment.this.getId(), 
           snapFrag); 
         transaction.addToBackStack(null); 
         transaction.commit(); 
         getFragmentManager().executePendingTransactions(); 
         final boolean roi = isInROI; 

         WayPointDetailActivity waypointFrag = new WayPointDetailActivity(); 
         waypointFrag.setWayPointId(wp.getId()); 
         waypointFrag.setInRoi(roi); 
         transaction = getFragmentManager() 
           .beginTransaction(); 

         transaction.setCustomAnimations(R.anim.enter, 
           R.anim.exit); 

         transaction.replace(snapFrag.getId(), waypointFrag); 
         transaction.addToBackStack(null); 
         transaction.commit(); 
Các vấn đề liên quan