package com.example.fragmentanimation;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.KeyEvent;
import com.example.fragmentanimation.OneFragment.OnNewFragemntListener;
public class MainActivity extends FragmentActivity implements OnNewFragemntListener {
private static final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findView();
}
private void findView() {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.setCustomAnimations(R.anim.push_left_in,R.anim.push_left_in);
OneFragment oneFragment = (OneFragment) manager.findFragmentByTag("one");
if(oneFragment==null){
oneFragment = new OneFragment();
Log.e(TAG, "new OneFragment");
}
ft.replace(R.id.fl_container, oneFragment, "one");
ft.commit();
}
@Override
public void onNewFragemnt() {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
//设置替换和退栈的动画
ft.setCustomAnimations(R.anim.push_left_in,R.anim.push_left_in,R.anim.back_left_in,R.anim.back_right_out);
// ft.setCustomAnimations(R.anim.push_left_in,R.anim.push_left_in);
TwoFragment twoFragment = (TwoFragment) manager.findFragmentByTag("two");
if(twoFragment==null){
Log.e(TAG, "new TwoFragment");
twoFragment = new TwoFragment();
}
ft.replace(R.id.fl_container, twoFragment, "two");
ft.addToBackStack(null);
ft.commit();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
FragmentManager fm = getSupportFragmentManager();
int count = fm.getBackStackEntryCount();
if(keyCode==KeyEvent.KEYCODE_BACK && count>0){
Log.e(TAG, "back to list "+count);
fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
return true;
}
return super.onKeyDown(keyCode, event);
}
}
同时设置 enter/exit 和popEnter/popExit动画
package com.example.fragmentanimation;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
public class OneFragment extends Fragment implements OnClickListener {
private static final String TAG = OneFragment.class.getSimpleName();
private OnNewFragemntListener mCallback;
@Override
public void onAttach(Activity activity) {
try {
mCallback = (OnNewFragemntListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnNewFragemntListener");
}
super.onAttach(activity);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.e(TAG, "onCreateView");
View view = inflater.inflate(R.layout.fragment_one, null);
findView(view);
return view;
}
private void findView(View view) {
Button bt_open = (Button) view.findViewById(R.id.bt_open);
bt_open.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_open:
Log.e(TAG, "open TwoFragment");
//回调Activity中的方法
mCallback.onNewFragemnt();
break;
default:
break;
}
}
/**
* 后退 回调接口
*/
public interface OnNewFragemntListener {
public void onNewFragemnt();
}
}
package com.example.fragmentanimation;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
public class TwoFragment extends Fragment implements OnClickListener {
private static final String TAG = TwoFragment.class.getSimpleName();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.e(TAG, "onCreateView");
View view = inflater.inflate(R.layout.fragment_two, null);
findView(view);
return view;
}
private void findView(View view) {
Button bt_back = (Button) view.findViewById(R.id.bt_back);
bt_back.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_back:
Log.e(TAG, "back to previous");
//后退
getActivity().getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
break;
default:
break;
}
}
}
工程源码下载:http://download.csdn.net/detail/fx_sky/6607155