zoukankan      html  css  js  c++  java
  • android:Fragment动画的东西

    最近很多人来Fragment动画是很感兴趣,我将是一个样本给大家看。

    既然做,我会做动画以下类型:

    注入弹出动画:从“”进入。从“上下左右”弹出,当然,你怎么组合都能够。另外你也能够加一些透明度的变化,这就看你的发挥了。

    。。

    1.先写动画的xml文件

    做开发的都知道。在/res/anim/文件夹下,新建xml的动画文件。比方:

    fragment_slide_in_from_bottom.xml

    <?

    xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="800" android:fromYDelta="100.0%p" android:interpolator="@android:anim/decelerate_interpolator" android:toYDelta="0.0" />


    fragment_slide_in_from_left.xml

    <?

    xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="800" android:fromXDelta="-100.0%p" android:interpolator="@android:anim/decelerate_interpolator" android:toXDelta="0.0" />


    fragment_slide_in_from_right.xml

    <?xml version="1.0" encoding="utf-8"?>
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="800"
        android:fromXDelta="100.0%p"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:toXDelta="0.0" />

    fragment_slide_in_from_top.xml

    <?xml version="1.0" encoding="utf-8"?

    > <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="800" android:fromYDelta="-100.0%p" android:interpolator="@android:anim/decelerate_interpolator" android:toYDelta="0.0" />


    上面的是进入动画。至于弹出动画,仅仅须要将from和to的值翻转一下就可以。你们都懂得,不懂得,直接去github上clone,地址在以下。

    2.加入Fragment的时候,使用setCustomAnimations方法。

    直接贴代码。简单明了。

    package com.example.testfragment;
    
    import android.os.Bundle;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentTransaction;
    import android.support.v7.app.ActionBarActivity;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    /**
     * 
     * @author Zheng Haibo
     * @web  http://www.mobctrl.net
     *
     */
    public class MainActivity extends ActionBarActivity {
    
    	private FragmentManager fragmentManager;
    
    	private Button northBtn;
    	private Button southBtn;
    	private Button eastBtn;
    	private Button westBtn;
    	private Button popBtn;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		fragmentManager = getSupportFragmentManager();
    		initButton();
    	}
    
    	private void initButton() {
    		northBtn = (Button) findViewById(R.id.btn_north);
    		southBtn = (Button) findViewById(R.id.btn_south);
    		eastBtn = (Button) findViewById(R.id.btn_east);
    		westBtn = (Button) findViewById(R.id.btn_west);
    		popBtn = (Button) findViewById(R.id.btn_pop);
    		northBtn.setOnClickListener(new OnClickListener() {
    
    			@Override
    			public void onClick(View arg0) {
    				addNorthFragment();
    			}
    		});
    		southBtn.setOnClickListener(new OnClickListener() {
    
    			@Override
    			public void onClick(View arg0) {
    				addSouthFragment();
    			}
    		});
    		eastBtn.setOnClickListener(new OnClickListener() {
    
    			@Override
    			public void onClick(View arg0) {
    				addEastFragment();
    			}
    		});
    		westBtn.setOnClickListener(new OnClickListener() {
    
    			@Override
    			public void onClick(View arg0) {
    				addWestFragment();
    			}
    		});
    
    		popBtn.setOnClickListener(new OnClickListener() {
    
    			@Override
    			public void onClick(View arg0) {
    				fragmentManager.popBackStack();
    			}
    		});
    
    	}
    
    	private void addNorthFragment() {
    		addFragment(R.anim.fragment_slide_in_from_top,
    				R.anim.fragment_slide_out_to_top,
    				R.anim.fragment_slide_in_from_top,
    				R.anim.fragment_slide_out_to_top, 0xa0ff0000);
    	}
    
    	private void addSouthFragment() {
    		addFragment(R.anim.fragment_slide_in_from_bottom,
    				R.anim.fragment_slide_out_to_bottom,
    				R.anim.fragment_slide_in_from_bottom,
    				R.anim.fragment_slide_out_to_bottom, 0xa000ff00);
    	}
    
    	private void addEastFragment() {
    		addFragment(R.anim.fragment_slide_in_from_left,
    				R.anim.fragment_slide_out_to_left,
    				R.anim.fragment_slide_in_from_left,
    				R.anim.fragment_slide_out_to_left, 0xa00000ff);
    	}
    
    	private void addWestFragment() {
    		addFragment(R.anim.fragment_slide_in_from_right,
    				R.anim.fragment_slide_out_to_right,
    				R.anim.fragment_slide_in_from_right,
    				R.anim.fragment_slide_out_to_right, 0xa0ff00ff);
    	}
    
    	/**
    	 * add the fragment
    	 * 
    	 * @param arg0
    	 * @param arg1
    	 * @param arg2
    	 * @param arg3
    	 * @param color
    	 */
    	private void addFragment(int arg0, int arg1, int arg2, int arg3, int color) {
    		FragmentTransaction ft = fragmentManager.beginTransaction();
    		ft.setCustomAnimations(arg0, arg1, arg2, arg3);
    		MyFragment fragment = new MyFragment();
    		Bundle bundle = new Bundle();
    		bundle.putInt("color", color);
    		fragment.setArguments(bundle);
    		ft.add(R.id.rl_container, fragment);
    		ft.addToBackStack(null);
    		ft.commitAllowingStateLoss();
    	}
    
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {
    		getMenuInflater().inflate(R.menu.main, menu);
    		return true;
    	}
    
    	@Override
    	public boolean onOptionsItemSelected(MenuItem item) {
    		int id = item.getItemId();
    		if (id == R.id.action_settings) {
    			return true;
    		}
    		return super.onOptionsItemSelected(item);
    	}
    }
    

    非常炫的GIF效果,我就不贴了,你下载试试就知道了。

    Github: https://github.com/nuptboyzhb/FragmentAnimationDemo

    兴许问题:

    animation的运行是异步的。

    假设你想对animation的运行进行监听,你能够重写fragment里面的例如以下方法

    /**
    	 * if you need add animation listener for the fragment
    	 * please use this method
    	 */
    	@Override
    	public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
    		Animation anim;
    		if (enter) {
    			anim = AnimationUtils.loadAnimation(getActivity(),
    					android.R.anim.fade_in);
    		} else {
    			anim = AnimationUtils.loadAnimation(getActivity(),
    					android.R.anim.fade_out);
    		}
    
    		anim.setAnimationListener(new AnimationListener() {
    			public void onAnimationEnd(Animation animation) {
    				
    			}
    
    			public void onAnimationRepeat(Animation animation) {
    				
    			}
    
    			public void onAnimationStart(Animation animation) {
    				
    			}
    		});
    
    		return anim;
    	}

    然后在回调里,做你想做的事

    -------------------------------------------------------------------

    很多其它交流,Android开发联盟QQ群:272209595



    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    面向对象初识
    day 20 异常
    day 16 正则表达式
    day 13 生成器,推导式
    CSS
    html页面编写
    DAY 17常用模块
    DAY16 模块和包的导入
    DAY15 模块
    DAY14 函数(三)
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4615089.html
Copyright © 2011-2022 走看看