Android(安卓)动画效果(三):overridePendingTransition(界面切换动画)与LayoutTransition(布局动画)
一、overridePendingTransition
我们之前讲的动画都是针对View的动画,其实在我们开启一个Activity的时候,我们也可以产生动画效果,动画效果可以直接使用我们在 Android 动画效果(一): 四种动画基础(Alpha、Translate、Rotate、Scale) 中所介绍的,编写xml文件,通过overridePendingTransition来为我们Activity的载入添加动画效果。下面来看下它的具体使用步骤。
使用步骤
1、在res下创建anim(该名称固定)文件,编写xml动画(需要编写进入动画,与退出动画)
2、开启activity,通过overridePendingTransition(enterAnim, exitAnim) 添加进出动画。
进入动画:
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:fromXScale="0" android:toXScale="1" android:fromYScale="0" android:toYScale="1" android:duration="2000" /> <alpha android:fromAlpha="0" android:toAlpha="1" /></set>
退出动画:
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:fromXScale="1" android:toXScale="0" android:fromYScale="1" android:toYScale="0" android:duration="2000" /> <alpha android:fromAlpha="1" android:toAlpha="0.2" android:interpolator="@android:anim/overshoot_interpolator" /></set>
开启activity,设置动画:
Intent intent=new Intent(getApplicationContext(),MainActivity.class); startActivity(intent); //设置动画 overridePendingTransition(R.anim.activity_in,R.anim.activity_out);
二、布局动画(两种方式)
(1)LayoutTransition
使用步骤:
编写xml动画
创建LayoutTransition对象,并设置动画
LayoutTransition transition=new LayoutTransition(); transition.getDuration(2000);transition.setAnimator(LayoutTransition.APPEARING, AnimatorInflater.loadAnimator(getApplicationContext(), R.animator.animator_scale));
将动画效果添加到布局中
mlinearlayout.setLayoutTransition(transition);
1、布局(只有一个Button按钮)
2、动画(放缩动画)
(这里使用了属性动画ObjectAnimator【对属相动画的使用不了解的参看 Android 属性动画(二):ObjectAnimator与ValueAnimator 】,也可以使用四种基础的动画进行编写)
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="together"> <objectAnimator android:duration="1000" android:propertyName="scaleX" android:valueFrom="0.5" android:valueTo="1.0" ></objectAnimator> <objectAnimator android:duration="1000" android:propertyName="scaleY" android:valueFrom="0.5" android:valueTo="1" > </objectAnimator></set>
3、、MainActivity
public class Mainactivity_layout extends Activity{ private Button mbtn_add; //用于向linearlayout中动态添加按钮 private LinearLayout mlinearlayout; private int count;@Overrideprotected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_layoutani); mbtn_add=(Button) findViewById(R.id.button_add); mlinearlayout=(LinearLayout) findViewById(R.id.linearlayout); //创建LayoutTransition LayoutTransition transition=new LayoutTransition(); //设置动画时间 transition.getDuration(2000); //第一个参数可以有多种:APPEARING:表示设置进入时动画//CHANGE_APPEARING、CHANGE_DISAPPEARING、CHANGING、DISAPPEARING//第二个参数是设置的动画,由于使用的是属性动画//因此通过AnimatorInflater.loadAnimator获得transition.setAnimator(LayoutTransition.APPEARING, AnimatorInflater.loadAnimator(getApplicationContext(), R.animator.animator_scale));//注:不要忘记将设置的布局动画添加到布局中 mlinearlayout.setLayoutTransition(transition); //按钮监听,每次点击,添加一个按钮 mbtn_add.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { count++; Button btn=new Button(Mainactivity_layout.this); ViewGroup.LayoutParams params=new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); btn.setLayoutParams(params); btn.setText("按钮"+count); //当按钮被点击时将被删除 btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { v.setVisibility(View.GONE); } }); mlinearlayout.addView(btn); } });}
(2)LayoutAnimationController
使用步骤:
①编写View进入时的动画
②创建LayoutAnimationController对象(此处使用的是基本的四种动画写的)
注:如果编写的是基本动画使用AnimationUtils.loadAnimation
进行载入动画,如果编写的是属性动画使用AnimatorInflater.loadAnimator
载入动画。
//布局动画控制器LayoutAnimationController layoutcontroller=new LayoutAnimationController(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.activity_in));
③向布局添加动画
//设置动画进入的顺序为随机(此处还有多种顺序可选) layoutcontroller.setOrder(LayoutAnimationController.ORDER_RANDOM); //添加动画 mlistview.setLayoutAnimation(layoutcontroller); //开启动画 mlistview.startLayoutAnimation();
1、布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="wrap_content" > </ListView></LinearLayout>
2、MainActivity
private ListView mlistview; private List<String> mlist=new ArrayList<String>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_layoutc); mlistview=(ListView) findViewById(R.id.listView); for(int i=0;i<15;i++){ mlist.add("View"+i); } ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,mlist); mlistview.setAdapter(adapter); //布局动画控制器 LayoutAnimationController layoutcontroller=new LayoutAnimationController(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.activity_in)); layoutcontroller.setOrder(LayoutAnimationController.ORDER_RANDOM); mlistview.setLayoutAnimation(layoutcontroller); mlistview.startLayoutAnimation(); }
更多相关文章
- Android中MenuInflater实例
- 【Android(安卓)基础】Android(安卓)LayoutInflater 简单入门
- Android布局排版
- android 小练习(一) ---仿微信UI主界面
- Android(安卓)Fragment的三种应用方式
- android RecyclerView实现列表定位
- Android(安卓)dialog用法(二)
- Android(安卓)ListView不同的item布局实现
- Android四大布局之百分比布局