Android 支持库:碎片事务动画不工作
我正在使用Peter Doyle的支持库来实现一个同时使用片段和Google地图的活动,但似乎无法让FragmentTransaction动画正常工作。我尝试过使用Android 支持库:碎片事务动画不工作,android,android-fragments,android-animation,android-maps,Android,Android Fragments,Android Animation,Android Maps,我正在使用Peter Doyle的支持库来实现一个同时使用片段和Google地图的活动,但似乎无法让FragmentTransaction动画正常工作。我尝试过使用setCustomAnimations(int-enter,int-exit)方法以及setTransition(int-transition)方法,但都没有用。有人能够让动画工作,或者在让动画工作时遇到问题吗 我尝试过的一些动画: setTransition(FragmentTransaction.TRANSIT_FRAGMENT_
setCustomAnimations(int-enter,int-exit)
方法以及setTransition(int-transition)
方法,但都没有用。有人能够让动画工作,或者在让动画工作时遇到问题吗
我尝试过的一些动画:
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)
你有没有试过,然后,而不是?我在其他线程中看到过关于replace()
无法按预期工作的抱怨
我没有使用该库,但我可以确认下面的代码可以与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();
您应该先调用FragmentTransaction。setCustomAnimations,然后调用
FragmentTransaction.替换如下方法:
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.fade_out,R.anim.fade_in);
ft.replace(R.id.fragmentDetails, detailsFrag);
尝试为您的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加载此新片段,然后对要替换的片段进行转换:
最终SnapShotFragment snapFrag=新SnapShotFragment();
FragmentTransaction事务=getFragmentManager()
.beginTransaction()
我相信我让它在星系S2上工作,但其他的都没有。我明天早上上班时会回来告诉你最新情况。看看这个问题。被接受的答案帮助了我。谢谢你的回复,安德烈斯。不幸的是,我无法让动画正常工作(除了setTransition(FragmentTransaction.transition\u FRAGMENT\u OPEN)
和setTransition(FragmentTransaction.transition\u FRAGMENT\u CLOSE)
,但遇到了其他问题),因此删除了动画/转换方法调用。使用.add()是比使用.replace()更好的解决方案。一个很好的例子是在支持v27.0.0的setCustomAnimations中使用.replace(),当片段从堆栈中删除时,应用程序就会崩溃。对我来说,解决方案是使用.add(),但正如@AdilHussain所说,动画中的事务丢失了
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();