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

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;
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.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;
	@Override
	protected 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;

	@Override
	protected 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值