Библиотека поддержки: анимация FragmentTransaction не работает
Я использую библиотеку поддержки https://github.com/petedoyle/android-support-v4-googlemaps Питера Дойла для реализации действия, в котором используются как фрагменты, так и карты Google, и похоже, что анимация FragmentTransaction не работает. Я пытался использовать setCustomAnimations(int enter, int exit)
метод, а также setTransition(int transit)
метод, но безрезультатно. Кто-нибудь смог заставить работать анимацию, или также были проблемы с работой анимации?
Некоторые из анимаций, которые я попробовал:
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)
3 ответа
Вы должны вызвать FragmentTransaction. Сначала установите setCustomAnimations, а затем вызовите FragmentTransaction. Замените метод следующим образом:
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.fade_out,R.anim.fade_in);
ft.replace(R.id.fragmentDetails, detailsFrag);
Вы пробовали FragmentTransaction.remove (), а затем FragmentTransaction.add () вместо FragmentTransaction.replace ()? Я видел в других темах жалуется на replace()
не работает, как ожидалось.
Я не использовал библиотеку https://github.com/petedoyle/android-support-v4-googlemaps, но могу подтвердить, что приведенный ниже код работает с 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();
Попробуйте сделать снимок вашей карты Google:
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);
}
Сделайте новый фрагмент, который имеет только изображение карты. Загрузите этот новый фрагмент с помощью replace и затем выполните переход на фрагмент, который вы хотите заменить: final SnapShotFragment snapFrag = new SnapShotFragment(); FragmentTransactionaction = 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();