首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

自定义fragment进出栈时候的动画

2012-08-08 
自定义fragment出入栈时候的动画在fragment出入栈时候添加动画,主要用到FragmentTransaction类中的方法:?p

自定义fragment出入栈时候的动画

在fragment出入栈时候添加动画,主要用到FragmentTransaction类中的方法:

?

public abstract?FragmentTransaction?setCustomAnimations?(int enter, int exit)Since:?API Level 11

Set specific animation resources to run for the fragments that are entering and exiting in this transaction. These animations will not be played when popping the back stack.

?

public abstract?FragmentTransaction?setCustomAnimations?(int enter, int exit, int popEnter, int popExit)Since:?API Level 13

Set specific animation resources to run for the fragments that are entering and exiting in this transaction. The?popEnter?and?popExit?animations will be played for enter/exit operations specifically when popping the back stack.

?

相关的方法还有(可直接设置标准的动画):

?

public abstract?FragmentTransaction?setTransition?(int transit)Since:?API Level 11

Select a standard transition animation for this transaction. May be one of?TRANSIT_NONE,?TRANSIT_FRAGMENT_OPEN, or?TRANSIT_FRAGMENT_CLOSE

public abstract?FragmentTransaction?setTransitionStyle?(int styleRes)Since:?API Level 11

Set a custom style resource that will be used for resolving transit animations.

?

下面看一个示例:

1.主activity布局文件:

?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:padding="4dip"    android:gravity="center_horizontal"    android:layout_width="match_parent" android:layout_height="match_parent">    <FrameLayout            android:id="@+id/simple_fragment"            android:layout_width="match_parent"            android:layout_height="0px"            android:layout_weight="1">    </FrameLayout>    <Button android:id="@+id/new_fragment"        android:layout_width="wrap_content" android:layout_height="wrap_content"        android:layout_weight="0"         android:text="@string/new_fragment">        <requestFocus />    </Button></LinearLayout>
?

?

2.主activity,包括一个fragment类:CountingFragment

?

public class FragmentCustomAnimations extends Activity {    int mStackLevel = 1;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.fragment_stack);        // Watch for button clicks.        Button button = (Button)findViewById(R.id.new_fragment);        button.setOnClickListener(new OnClickListener() {            public void onClick(View v) {                addFragmentToStack();            }        });        if (savedInstanceState == null) {            // Do first time initialization -- add initial fragment.            Fragment newFragment = CountingFragment.newInstance(mStackLevel);            FragmentTransaction ft = getFragmentManager().beginTransaction();            ft.add(R.id.simple_fragment, newFragment).commit();        } else {            mStackLevel = savedInstanceState.getInt("level");        }    }    @Override    public void onSaveInstanceState(Bundle outState) {        super.onSaveInstanceState(outState);        outState.putInt("level", mStackLevel);    }    void addFragmentToStack() {        mStackLevel++;        // Instantiate a new fragment.        Fragment newFragment = CountingFragment.newInstance(mStackLevel);        // Add the fragment to the activity, pushing this transaction        // on to the back stack.        FragmentTransaction ft = getFragmentManager().beginTransaction();        ft.setCustomAnimations(R.animator.fragment_slide_left_enter,                R.animator.fragment_slide_left_exit,                R.animator.fragment_slide_right_enter,                R.animator.fragment_slide_right_exit);        ft.replace(R.id.simple_fragment, newFragment);        ft.addToBackStack(null);        ft.commit();    }    public static class CountingFragment extends Fragment {        int mNum;        /**         * Create a new instance of CountingFragment, providing "num"         * as an argument.         */        static CountingFragment newInstance(int num) {            CountingFragment f = new CountingFragment();            // Supply num input as an argument.            Bundle args = new Bundle();            args.putInt("num", num);            f.setArguments(args);            return f;        }        /**         * When creating, retrieve this instance's number from its arguments.         */        @Override        public void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            mNum = getArguments() != null ? getArguments().getInt("num") : 1;        }        /**         * The Fragment's UI is just a simple text view showing its         * instance number.         */        @Override        public View onCreateView(LayoutInflater inflater, ViewGroup container,                Bundle savedInstanceState) {            View v = inflater.inflate(R.layout.hello_world, container, false);            View tv = v.findViewById(R.id.text);            ((TextView)tv).setText("Fragment #" + mNum);                     return v;        }    }}
?

?

2.用户fragment出入站时候的动画文件(在res/animator目录下的四个文件):

? ?fragment_slide_left_enter.xml

?

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">    <objectAnimator        android:interpolator="@android:interpolator/decelerate_quint"        android:valueFrom="100dp" android:valueTo="0dp"        android:valueType="floatType"        android:propertyName="translationX"        android:duration="@android:integer/config_mediumAnimTime" />    <objectAnimator        android:interpolator="@android:interpolator/decelerate_quint"        android:valueFrom="0.0" android:valueTo="1.0"        android:valueType="floatType"        android:propertyName="alpha"        android:duration="@android:integer/config_mediumAnimTime" /></set>

?

?fragment_slide_left_exit.xml

?

<set xmlns:android="http://schemas.android.com/apk/res/android">    <objectAnimator        android:interpolator="@android:interpolator/decelerate_quint"        android:valueFrom="0dp" android:valueTo="-100dp"        android:valueType="floatType"        android:propertyName="translationX"        android:duration="@android:integer/config_mediumAnimTime" />    <objectAnimator        android:interpolator="@android:interpolator/decelerate_quint"        android:valueFrom="1.0" android:valueTo="0.0"        android:valueType="floatType"        android:propertyName="alpha"        android:duration="@android:integer/config_mediumAnimTime" /></set>

?

?fragment_slide_right_enter.xml:

?

<set xmlns:android="http://schemas.android.com/apk/res/android">    <objectAnimator        android:interpolator="@android:interpolator/decelerate_quint"        android:valueFrom="-100dp" android:valueTo="0dp"        android:valueType="floatType"        android:propertyName="translationX"        android:duration="@android:integer/config_mediumAnimTime" />    <objectAnimator        android:interpolator="@android:interpolator/decelerate_quint"        android:valueFrom="0.0" android:valueTo="1.0"        android:valueType="floatType"        android:propertyName="alpha"        android:duration="@android:integer/config_mediumAnimTime" /></set>

?

?fragment_slide_right_exit.xml

?

<set xmlns:android="http://schemas.android.com/apk/res/android">    <objectAnimator        android:interpolator="@android:interpolator/decelerate_quint"        android:valueFrom="0dp" android:valueTo="100dp"        android:valueType="floatType"        android:propertyName="translationX"        android:duration="@android:integer/config_mediumAnimTime" />    <objectAnimator        android:interpolator="@android:interpolator/decelerate_quint"        android:valueFrom="1.0" android:valueTo="0.0"        android:valueType="floatType"        android:propertyName="alpha"        android:duration="@android:integer/config_mediumAnimTime" /></set>
?

?

3.fragment中的createView()方法用到的布局文件hello_world.xml:

?

<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/text"    android:layout_width="match_parent" android:layout_height="match_parent"    android:gravity="center_vertical|center_horizontal"    android:textAppearance="?android:attr/textAppearanceMedium"    android:text="@string/hello_world"/>
?

?

问题:objectAnimator是什么?怎么使用?

热点排行