Android的动画可以分为视图动画和属性动画

1. View Animation(Tween Animation)----- 视图动画

        不改变原有动画属性

2. Drawable Animation(Frame Animation)----- 属性动画


button旋转效果

        效果图1

      

代码编辑

public class MainActivity extends AppCompatActivity implements View.OnClickListener {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        findViewById(R.id.button).setOnClickListener(this);    }    @Override    public void onClick(View v) {        //属性动画(旋转360度)        v.animate().rotation(360).setDuration(1000).start();    }}

XML配置

res中Animator文件夹(没有就新建),配置动画文件 animate.xml:

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

MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        findViewById(R.id.button).setOnClickListener(this);    }    @Override    public void onClick(View v) {//        //属性动画(旋转360度)        //-----1------代码编辑//        v.animate().rotation(360).setDuration(1000).start();        //-----2------XML编辑        //对象动画        ObjectAnimator animatior = (ObjectAnimator) AnimatorInflater.loadAnimator(this, R.animator.animate);        animatior.setTarget(v);        animatior.start();    }}


透明度 + 平移

        效果图2

        

animator_set.xml

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

MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        findViewById(R.id.button).setOnClickListener(this);    }    @Override    public void onClick(View v) {//        //属性动画(旋转360度)        //-----1------代码编辑//        v.animate().rotation(360).setDuration(1000).start();        //-----2------XML编辑        //对象动画//        ObjectAnimator animatior = (ObjectAnimator) AnimatorInflater.loadAnimator(this, R.animator.animate);//        animatior.setTarget(v);//        animatior.start();        //-----3------使用动画集合        AnimatorSet animator = (AnimatorSet) AnimatorInflater.loadAnimator(this,R.animator.animator_set);        animator.setTarget(v);        animator.start();    }}


修改 animator_set.xml,添加动画执行顺序选项:

    效果图3

      


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


使用代码编辑对象动画,修改 MainActivity.java

    效果图4

      


rotation可定制化程度较高,先旋转90度,后从90到360度:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        findViewById(R.id.button).setOnClickListener(this);    }    @Override    public void onClick(View v) {//        //属性动画(旋转360度)        //-----1------代码编辑//        v.animate().rotation(360).setDuration(1000).start();        //-----2------XML编辑        //对象动画//        ObjectAnimator animatior = (ObjectAnimator) AnimatorInflater.loadAnimator(this, R.animator.animate);//        animatior.setTarget(v);//        animatior.start();        //-----3------使用动画集合----XML//        AnimatorSet animator = (AnimatorSet) AnimatorInflater.loadAnimator(this,R.animator.animator_set);//        animator.setTarget(v);//        animator.start();        //-----4-------旋转,相较于1,可订花程度较高-----代码编辑        ObjectAnimator.ofFloat(v,"rotation",0,90,90,360).setDuration(1000).start();    }}


使用代码编辑动画集合,修改 MainActivity.java

    效果图5

      


这里每段动画时间设为2000ms

public class MainActivity extends AppCompatActivity implements View.OnClickListener {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        findViewById(R.id.button).setOnClickListener(this);    }    @Override    public void onClick(View v) {//        //属性动画(旋转360度)        //-----1------代码编辑(1、2、4)//        v.animate().rotation(360).setDuration(1000).start();        //-----2------XML编辑(1、2、4)        //对象动画//        ObjectAnimator animatior = (ObjectAnimator) AnimatorInflater.loadAnimator(this, R.animator.animate);//        animatior.setTarget(v);//        animatior.start();        //-----3------使用动画集合----XML//        AnimatorSet animator = (AnimatorSet) AnimatorInflater.loadAnimator(this,R.animator.animator_set);//        animator.setTarget(v);//        animator.start();        //-----4-------旋转,相较于1,可订花程度较高-----代码编辑(1、2、4)//        ObjectAnimator.ofFloat(v,"rotation",0,90,90,360).setDuration(1000).start();        //-----5-------动画集合,设置动画顺序等--------代码编辑(3、5)        AnimatorSet set = new AnimatorSet();        set.setDuration(2000);        set.playSequentially(ObjectAnimator.ofFloat(v, "alpha", 0, 1),                ObjectAnimator.ofFloat(v, "translationY", 0, 200));        set.start();    }}


具体代码点击



Fragment 进出入动画

 效果图


一、设置主界面

设置 activity_main.xml ,层叠布局

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

再来 MainActivity.java,打开新的Fragment

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        getFragmentManager().beginTransaction().add(R.id.fragment, new FragmentOne()).commit();    }}


二、新建 FragmentOne.java

public class FragmentOne extends Fragment implements View.OnClickListener {    private View rootView;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        rootView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_layout,null);        rootView.findViewById(R.id.btnAnotherFragment).setOnClickListener(this);        return rootView;    }    @Override    public void onClick(View v) {        getFragmentManager().beginTransaction()                .setCustomAnimations(R.animator.animator_enter,R.animator.animator_exit,R.animator.animator_enter,R.animator.animator_exit)                .addToBackStack("OtherFragment")                .replace(R.id.fragment, new OtherFragment())                .commit();    }}

以及 OtherFragment.java

public class OtherFragment extends Fragment {    private View rootView;    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        rootView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_other,null);        return rootView;    }}

三、设置Fragment切换动画


MainActivity.java中添加 Fragment 后退栈

//设置Fragment后退栈    @Override    public void onBackPressed() {        if (getFragmentManager().getBackStackEntryCount() > 0) {            getFragmentManager().popBackStack();        } else {            super.onBackPressed();        }    }


res/animator 中新建 进入和退出 动画

animator_enter.xml

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

以及 animator_exit.xml

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

具体代码点击


Fragment切换动画——3D


由于模拟器的限制,效果图在真机上运行才有效果,这里就不放了。


一、界面布局,MainActivity.java

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //载入FragmentOne        getFragmentManager().beginTransaction().add(R.id.fragment, new FragmentOne()).commit();    }}

此时界面显示 FragmentOne,下面,设置 FragmentOne

FragmentOne.java
设置按钮监听器,切换动画。

public class FragmentOne extends Fragment implements View.OnClickListener {    private View rootView;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        rootView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_one, null);        //按钮监听        rootView.findViewById(R.id.button1).setOnClickListener(this);        return rootView;    }    /*两个Fragment顺时针转入转出*/    @Override    public void onClick(View v) {        getFragmentManager().beginTransaction()                .setCustomAnimations(R.animator.animator_two_enter, R.animator.animator_one_exit)                .replace(R.id.fragment, new FragmentTwo())                .commit();    }}


这里 3D切换的效果其实是使用的旋转效果:FragmentTwo转入,FragmentOne转出,皆为顺时针。
 FragmentTwo 的 enter动画效果,res/animator 下 animator_two_enter.xml,

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

FragmentOne 的exit 动画效果,animator_one_exit.xml,

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

设置 FragmentTwo.java,这时候是反向逆时针旋转:

public class FragmentTwo extends Fragment implements View.OnClickListener {    private View rootView;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        rootView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_two, null);        rootView.findViewById(R.id.button2).setOnClickListener(this);        return rootView;    }    /*两个Fragment逆时针转入转出*/    @Override    public void onClick(View v) {        getFragmentManager().beginTransaction()                .setCustomAnimations(R.animator.animator_one_enter, R.animator.animator_two_exit)                .replace(R.id.fragment, new FragmentOne())                .commit();    }}


FragmentOne 的 enter 动画效果,animator_one_enter.xml

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

FragmentTwo 的exit 动画效果,animator_two_exit.xml

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


具体代码点击



更多相关文章

  1. Android如何在java代码中设置margin
  2. Android全屏显示 无标题栏、全屏、设置为横屏
  3. Android(安卓)Gallery3D效果 教程 案例 代码
  4. Android(安卓)Activity界面切换添加动画特效
  5. 【30篇突击 android】源码统计二
  6. Android(安卓)学习资料
  7. Android常用动画alpha和rotate同时使用
  8. Android为按钮添加相应事件的代码
  9. Android(安卓)studio 不能预览布局文件

随机推荐

  1. .Net 转战 Android(安卓)4.4 日常笔记(10)-
  2. ubuntu 下编译android libjpeg-turbo-1.5
  3. Android(安卓)requires compiler complia
  4. 终于找到一个类似wince 远程桌面控制andr
  5. android布局属性总结备用
  6. Android快速开发框架Android_BaseLib,集成
  7. windows系、公司内网环境 如何下载androi
  8. android RXJava2.0(一)
  9. Android属性动画Property Animation系列
  10. Android(安卓)使用ActivityOptions实现Ac