android动画(3)layout动画,layoutChanged动画及算定义它,ListViewActivity的Layout动画(代码和xm配置两种实现l)

来源:互联网 发布:ios免费漫画软件推荐 编辑:程序博客网 时间:2024/06/03 22:50

1.layout切换动画

代码:

本示例是fragment切换.在它的oncreateView中

public class LayoutAnimationFrgmt extends Fragment {<span style="white-space:pre"></span>@Override<span style="white-space:pre"></span>public View onCreateView(LayoutInflater inflater, ViewGroup container,<span style="white-space:pre"></span>Bundle savedInstanceState) {<span style="white-space:pre"></span>super.onCreateView(inflater, container, savedInstanceState);<span style="white-space:pre"></span>// TODO Auto-generated method stub<span style="white-space:pre"></span>RelativeLayout rl = (RelativeLayout) inflater.inflate(R.layout.fragment_layout_animation, container,<span style="white-space:pre"></span>false);<span style="white-space:pre"></span><span style="white-space:pre"></span>ScaleAnimation sa = new ScaleAnimation(0,1,0,1);<span style="white-space:pre"></span>sa.setDuration(350);<span style="white-space:pre"></span>LayoutAnimationController lac = new LayoutAnimationController(sa,0.5f);//0.5f是第后续控件的间隔 <span style="white-space:pre"></span>lac.setOrder(LayoutAnimationController.ORDER_REVERSE);//设置动画方向,ORDER_REVERSE是反向<span style="white-space:pre"></span>rl.setLayoutAnimation(lac);<span style="white-space:pre"></span>return rl;<span style="white-space:pre"></span>}}

2.layout内容变化时的动画

2.1 在相应的layout的xml里 android:animateLayoutChanges="true"
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"     android:id="@+id/fragment_layout_changed_animation"    <span style="color:#ff0000;">android:animateLayoutChanges="true"</span>>    <TextView        android:id="@+id/flatv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentTop="true"        android:layout_centerHorizontal="true"        android:text="@string/add_button" /></RelativeLayout>

2.2 自定义layoutChanged动画
public class LayoutChangedAnimationFrgmt extends Fragment implements OnClickListener {private RelativeLayout rl;private TextView tv;LayoutTransition mTransition;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreateView(inflater, container, savedInstanceState);rl = (RelativeLayout) inflater.inflate(R.layout.fragment_layout_changed_animation, container,false);mTransition = new LayoutTransition();rl.setLayoutTransition(mTransition);<span style="color:#ff0000;">setupCustomAnimations</span>();//初始化动画tv = (TextView) rl.findViewById(R.id.flatv);return rl;}// LayoutTransition 生成自定义动画      private void <span style="color:#ff0000;">setupCustomAnimations</span>() {        // 动画:CHANGE_APPEARING          // Changing while Adding          PropertyValuesHolder pvhLeft = PropertyValuesHolder.ofInt("left", 0, 1);          PropertyValuesHolder pvhTop = PropertyValuesHolder.ofInt("top", 0, 1);          PropertyValuesHolder pvhRight = PropertyValuesHolder.ofInt("right", 0,                  1);          PropertyValuesHolder pvhBottom = PropertyValuesHolder.ofInt("bottom",                  0, 1);          PropertyValuesHolder pvhScaleX = PropertyValuesHolder.ofFloat("scaleX",                  1f, 0f, 1f);          PropertyValuesHolder pvhScaleY = PropertyValuesHolder.ofFloat("scaleY",                  1f, 0f, 1f);             final ObjectAnimator changeIn = ObjectAnimator.ofPropertyValuesHolder(                this, pvhLeft, pvhTop, pvhRight, pvhBottom, pvhScaleX,                  pvhScaleY).setDuration(                mTransition.getDuration(LayoutTransition.CHANGE_APPEARING));          mTransition.setAnimator(LayoutTransition.CHANGE_APPEARING, changeIn);          changeIn.addListener(new AnimatorListenerAdapter() {            public void onAnimationEnd(Animator anim) {                View view = (View) ((ObjectAnimator) anim).getTarget();                  // View也支持此种动画执行方式了                  view.setScaleX(1f);                  view.setScaleY(1f);              }          });             // 动画:CHANGE_DISAPPEARING          // Changing while Removing          Keyframe kf0 = Keyframe.ofFloat(0f, 0f);          Keyframe kf1 = Keyframe.ofFloat(.9999f, 360f);          Keyframe kf2 = Keyframe.ofFloat(1f, 0f);          PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe(                  "rotation", kf0, kf1, kf2);          final ObjectAnimator changeOut = ObjectAnimator                  .ofPropertyValuesHolder(this, pvhLeft, pvhTop, pvhRight,                          pvhBottom, pvhRotation)                  .setDuration(                          mTransition                                  .getDuration(LayoutTransition.CHANGE_DISAPPEARING));          mTransition                  .setAnimator(LayoutTransition.CHANGE_DISAPPEARING, changeOut);          changeOut.addListener(new AnimatorListenerAdapter() {              public void onAnimationEnd(Animator anim) {                  View view = (View) ((ObjectAnimator) anim).getTarget();                  view.setRotation(0f);              }          });             // 动画:APPEARING          // Adding          ObjectAnimator animIn = ObjectAnimator.ofFloat(null, "rotationY", 90f,                  0f).setDuration(                  mTransition.getDuration(LayoutTransition.APPEARING));          mTransition.setAnimator(LayoutTransition.APPEARING, animIn);          animIn.addListener(new AnimatorListenerAdapter() {              public void onAnimationEnd(Animator anim) {                  View view = (View) ((ObjectAnimator) anim).getTarget();                  view.setRotationY(0f);              }          });             // 动画:DISAPPEARING          // Removing          ObjectAnimator animOut = ObjectAnimator.ofFloat(null, "rotationX", 0f,                  90f).setDuration(                  mTransition.getDuration(LayoutTransition.DISAPPEARING));          mTransition.setAnimator(LayoutTransition.DISAPPEARING, animOut);          animOut.addListener(new AnimatorListenerAdapter() {              public void onAnimationEnd(Animator anim) {                  View view = (View) ((ObjectAnimator) anim).getTarget();                  view.setRotationX(0f);              }          });         }//其它方法略...}


3.ListViewLayout的动画(用代码和xml配置两个方法实现)

3.1 代码实现
public class LayoutAnimInListViewCodeAty extends ListActivity {private ArrayAdapter<String> adapter;private String [] datas;private LayoutAnimationController lac;private TranslateAnimation ta;private ScaleAnimation sa;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//setContentView(R.layout.activity_layout_list_view);ListActivity不用它.datas = new String[]{"hei","bai","hooo","lvv","lann"};adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,datas);setListAdapter(adapter);ta = new TranslateAnimation(0,1,0,1);sa = new ScaleAnimation(0,1,0,1);sa.setDuration(1000);//lac = new LayoutAnimationController(ta,0.5f);lac = new LayoutAnimationController(sa,0.5f);getListView().setLayoutAnimation(lac);}<span style="white-space:pre"></span>//其它略...}

3.2 xmls配置文件实现
代码部分:
public class LayoutAnimInListViewXmlAty extends ListActivity {private ArrayAdapter<String> adapter;private String[] datas;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_layout_anim_in_list_xml_aty);datas = new String[] { "hei", "bai", "hooo", "lvv", "lann" };adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, datas);setListAdapter(adapter);}@Override

aty对应的布局xml: 注意 android:id="@android:id/list" 是必需

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.example.layoutanimation.LayoutAnimInListViewXmlAty" >    <ListView        <span style="font-size:24px;color:#ff0000;">android:id="@android:id/list"</span>        android:layout_width="match_parent"        android:layout_height="match_parent"        <span style="color:#ff0000;">android:layoutAnimation="@anim/listview_anim"</span> >    </ListView></RelativeLayout>

layout动画配置文件:listview_anim.xml
<?xml version="1.0" encoding="utf-8"?><layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"    android:animation="@anim/scale_xml_anim"    android:delay="0.5" ></layoutAnimation>

具体动画效果配置文件:scale_xml_anim.xml
<?xml version="1.0" encoding="utf-8"?><scale xmlns:android="http://schemas.android.com/apk/res/android"    android:duration="1000"    android:fromXScale="0"    android:fromYScale="0"    android:toXScale="1"    android:toYScale="1" ></scale>







0 0
原创粉丝点击