android:Fragment動畫那點事,androidfragment

來源:互聯網
上載者:User

android:Fragment動畫那點事,androidfragment

最近很多人對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;@Overrideprotected 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() {@Overridepublic void onClick(View arg0) {addNorthFragment();}});southBtn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {addSouthFragment();}});eastBtn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {addEastFragment();}});westBtn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {addWestFragment();}});popBtn.setOnClickListener(new OnClickListener() {@Overridepublic 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();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic 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 */@Overridepublic 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




Android 怎給Fragment中的控制項添加監聽?

跟activity一樣的設定
package com.huaao.fragment;

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
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 BtFragment extends Fragment implements OnClickListener {
private Button login;
private Button reg;

@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
Log.i("i"," Fragment 執行onAttach");

}
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Log.i("i"," Fragment 執行onCreate");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
Log.i("i"," Fragment 執行onCreateView");
View view = inflater.inflate(R.layout.main1, null, false);
login = (Button) view.findViewById(R.id.login);
reg = (Button) view.findViewById(R.id.reg);
login.setOnClickListener(this);
reg.setOnClickListener(this);
return view;
}

@Override
public void onActivityCreated(Bundle savedInst......餘下全文>>
 
Android fragment 替換的動畫應該怎做?總是不成功,解答哇 , ,折騰好久好久了,,,,,

這是一個側滑加替換的效果,可以研究一下。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.