关于Fragment和属性动画(含代码)

fragment新特性(重点)

1.fragment入门

 Android3.0开始引入这个框架,主要用来实现一个多任务的界面。  fragment是activity的子界面了,运行在activity上面的。

   代码:  

 package com.qaa.fragment;

 import android.app.Activity;  

 import android.app.FragmentManager;  

import android.app.FragmentTransaction;  

import android.os.Bundle;  

import android.view.View;    

public class  MainActivity extends Activity {          

private FragmentManager fm;     

@Override     

protected void onCreate(Bundle savedInstanceState) {         

super.onCreate(savedInstanceState);         

setContentView(R.layout.activity_main);                

fm = this.getFragmentManager();       

//开启一个打开界面的事务,保证几个界面同时打开成功,同时打开失败。       

FragmentTransaction ft = fm.beginTransaction();       

Fragment01 f01 = new Fragment01();       

ft.replace(R.id.fm_container, f01);       

ft.commit();                       

}          

public void open01(View view){                  

//开启一个打开界面的事务,保证几个界面同时打开成功,同时打开失败。       

FragmentTransaction ft = fm.beginTransaction();       

Fragment01 f01 = new Fragment01();       

ft.replace(R.id.fm_container, f01);       

ft.commit();            

}       

public void open02(View view){                

 //开启一个打开界面的事务,保证几个界面同时打开成功,同时打开失败。       

FragmentTransaction ft = fm.beginTransaction();       

Fragment02 f02 = new Fragment02();       

ft.replace(R.id.fm_container, f02);       

ft.commit();            

}    

public void open03(View view){     

//开启一个打开界面的事务,保证几个界面同时打开成功,同时打开失败。    

FragmentTransaction ft = fm.beginTransaction();    

Fragment03 f03 = new Fragment03();    

ft.replace(R.id.fm_container, f03);    

ft.commit();  

}  

}

2.fragment的向下兼容

 为了能够向下兼容低版本的API,让所有与fragment相关的API都从support.vx包中导入。

代码:     **

package com.qaa.fragment;

import android.app.Activity;      

import android.os.Bundle;   

import android.support.v4.app.FragmentActivity;   

import android.support.v4.app.FragmentManager;   

import android.support.v4.app.FragmentTransaction;   

import android.view.View;      

public class  MainActivity extends FragmentActivity {      

private FragmentManager fm;    

@Override      

protected void onCreate(Bundle savedInstanceState) {          

super.onCreate(savedInstanceState);          

setContentView(R.layout.activity_main);        

fm = this.getSupportFragmentManager();        

//开启一个打开界面的事务,保证几个界面同时打开成功,同时打开失败。        

FragmentTransaction ft = fm.beginTransaction();        

Fragment01 f01 = new Fragment01();        

ft.replace(R.id.fm_container, f01);        

ft.commit();      

}            

public void open01(View view){        

//开启一个打开界面的事务,保证几个界面同时打开成功,同时打开失败。        

FragmentTransaction ft = fm.beginTransaction();        

Fragment01 f01 = new Fragment01();        

ft.replace(R.id.fm_container, f01);        

ft.commit();              

}         

public void open02(View view){                     

//开启一个打开界面的事务,保证几个界面同时打开成功,同时打开失败。        

FragmentTransaction ft = fm.beginTransaction();        

Fragment02 f02 = new Fragment02();        

ft.replace(R.id.fm_container, f02);        

ft.commit();      

}      

public void open03(View view){     

//开启一个打开界面的事务,保证几个界面同时打开成功,同时打开失败。     

FragmentTransaction ft = fm.beginTransaction();     

Fragment03 f03 = new Fragment03();     

ft.replace(R.id.fm_container, f03);     

ft.commit();   

}   

}

3.fragment的数据传递 从activity中传数据给fragment:    

在activity中调用fragment的方法;

代码:

 //调用fragment的一个方法,把数据传递过去  f01.setInfoToTextView(info);

4.fragment修改activity的数据   从fragment中传递数据给activity:

  在fragment中得到activity的实例对象,掉用它的方法传递数据;

代码:

package com.qaa.fragment;   

import android.os.Bundle;   

import android.support.v4.app.Fragment;   

import android.support.v4.app.FragmentActivity;   

import android.view.LayoutInflater;   

import android.view.View;   

import android.view.View.OnClickListener;   

import android.view.ViewGroup;   

import android.widget.Button;   

import android.widget.EditText;   

import android.widget.TextView;      

public class Fragment01 extends Fragment {       

private TextView tv;    

private Button bt;    

private EditText et_data;       

/**    

* 创建fragment对象时调用这个方法,初始化fragment的界面    

*/    

@Override    

public View onCreateView(LayoutInflater inflater, ViewGroup container,      Bundle savedInstanceState) {     

View view = View.inflate(getActivity(), R.layout.fragment01, null);          

tv = (TextView) view.findViewById(R.id.tv);     

et_data = (EditText) view.findViewById(R.id.et_data);     

bt = (Button) view.findViewById(R.id.bt);          

bt.setOnClickListener(new OnClickListener() {           

 @Override      

public void onClick(View v) {       

//得到运行fragment的activity的实例对象       

FragmentActivity fa = getActivity();       

String data = et_data.getText().toString().trim();       

//得到mainactivity的实例对象       

if(fa instanceof MainActivity){        

//调用mainactivity的方法,传递数据        

((MainActivity) fa).setInfo(data);       

}      

}     

});     

return view;    

}   

}

 5.fragment的生命周期

 onCreate:  

onCreateView:  

onResume:  

onStart:  

onPause:  

onStop:  

onDestroyView:  

onDestroy:

#属性动画

1.为什么使用属性动画

 使用其他的动画对象,让控件在动画期间时不能使事件与控件对象绑定在一起。为了让事件与空间对象绑定在一起,需要使用属性动画来实现。

2.属性动画入门

模版代码:

  //创建一个属性动画对象   

//sport 动画做到哪个目标对象上   

//translationX 哪个属性的变化过程   

//动画过程中使用的属性数值(可变参数,快一些多个值)   

ObjectAnimator oa = ObjectAnimator.ofFloat(sport, "translationX", 20,40,80,120,160,200);   

oa.setDuration(2000);   

oa.setRepeatCount(2);   

oa.setRepeatMode(ObjectAnimator.REVERSE);

  oa.start();

 3.3种常见属性动画

 旋转:rotate  缩放:scale  透明度:alpha

代码:

 package com.qaa.propertyanim;

 import android.animation.Animator;  

import android.animation.AnimatorSet;  

import android.animation.ObjectAnimator;  

import android.app.Activity;  

import android.os.Bundle;  

import android.view.View;  

import android.widget.Button;  

import android.widget.ImageView;  

import android.widget.Toast;    

public class MainActivity extends Activity {     

private ImageView xfj;     

@Override   

protected void onCreate(Bundle savedInstanceState) {    

super.onCreate(savedInstanceState);    

setContentView(R.layout.activity_main);      

xfj = (ImageView) findViewById(R.id.xfj);   

}     

public void trans(View view) {      

// 创建一个属性动画对象    

// sport 动画做到哪个目标对象上    

// translationX 哪个属性的变化过程    

// 动画过程中使用的属性数值(可变参数,快一些多个值)    

ObjectAnimator oa = ObjectAnimator.ofFloat(xfj, "translationX", 20, 40,80, 120, 160, 200);    

oa.setDuration(2000);    

oa.setRepeatCount(2);    

oa.setRepeatMode(ObjectAnimator.REVERSE);      

oa.start();   

}     

public void rotate(View view) {    

// 创建一个属性动画对象    

// sport 动画做到哪个目标对象上    

// translationX 哪个属性的变化过程    

// 动画过程中使用的属性数值(可变参数,快一些多个值)    

ObjectAnimator ra = ObjectAnimator.ofFloat(xfj, "rotation", 30,60,90,120,150,180,210,240,270,300,330,360);    

ra.setDuration(2000);    

ra.setRepeatCount(2);    

ra.setRepeatMode(ObjectAnimator.REVERSE);      

ra.start();   

}         

public void scale(View view) {       

// 创建一个属性动画对象    

// sport 动画做到哪个目标对象上    

// translationX 哪个属性的变化过程    

// 动画过程中使用的属性数值(可变参数,快一些多个值)    

ObjectAnimator sa = ObjectAnimator.ofFloat(xfj, "scaleY", 0.1f,0.3f,0.5f,0.8f,1.0f,1.2f,1.4f,1.6f,1.8f,2.0f);    

sa.setDuration(2000);    

sa.setRepeatCount(2);    

sa.setRepeatMode(ObjectAnimator.REVERSE);      

sa.start();   

}      

public void alpha(View view) {      

// 创建一个属性动画对象    

// sport 动画做到哪个目标对象上   

 // translationX 哪个属性的变化过程    

// 动画过程中使用的属性数值(可变参数,快一些多个值)    

ObjectAnimator aa = ObjectAnimator.ofFloat(xfj, "alpha", 0.1f,0.2f,0.4f,0.6f,0.8f,1.0f);    

aa.setDuration(3000);    aa.setRepeatCount(2);    aa.setRepeatMode(ObjectAnimator.REVERSE);      

aa.start();   }      

public void set(View view) {      

AnimatorSet set = new AnimatorSet();        

ObjectAnimator oa = ObjectAnimator.ofFloat(xfj, "translationX", 20, 40,      80, 120, 160, 200);    oa.setDuration(2000);    oa.setRepeatCount(2);    oa.setRepeatMode(ObjectAnimator.REVERSE);        

ObjectAnimator ra = ObjectAnimator.ofFloat(xfj, "rotation", 30,60,90,120,150,180,210,240,270,300,330,360);    ra.setDuration(2000);    ra.setRepeatCount(2);    ra.setRepeatMode(ObjectAnimator.REVERSE);        ObjectAnimator sa = ObjectAnimator.ofFloat(xfj, "scaleY", 0.1f,0.3f,0.5f,0.8f,1.0f,1.2f,1.4f,1.6f,1.8f,2.0f);    sa.setDuration(2000);    sa.setRepeatCount(2);    sa.setRepeatMode(ObjectAnimator.REVERSE);        ObjectAnimator aa = ObjectAnimator.ofFloat(xfj, "alpha", 0.1f,0.2f,0.4f,0.6f,0.8f,1.0f);    aa.setDuration(3000);    aa.setRepeatCount(2);    aa.setRepeatMode(ObjectAnimator.REVERSE);    

 //  

set.playSequentially(oa,ra,sa,aa);    

//四中动画类型组合一起播放    

set.playTogether(oa,ra,sa,aa);    set.start();  

 }  

}

 

posted @ 2016-01-16 10:07  蜗牛的爬行  阅读(1118)  评论(0编辑  收藏  举报