• 关于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();  

     }  

    }

  • 相关阅读:
    第07组 Beta冲刺(2/5)
    第07组 Beta冲刺(1/5)
    第07组 Alpha事后诸葛亮
    第07组 Alpha冲刺(6/6)
    【Beta】软件使用说明——致社长
    【Beta】“北航社团帮”发布声明——小程序v2.0与网页端v1.0
    【Beta】“北航社团帮”测试报告——小程序v2.0与网页端v1.0
    [技术博客] 小程序扫码登录网页端原理
    [技术博客] 用户验证码验证机制---redis缓存数据库的使用
    [技术博客] 如何避免在代码中多重render
  • 原文地址:https://www.cnblogs.com/kingqinwang/p/5135059.html
Copyright © 2020-2023  润新知