Material Design 初步

Material Design 初步

1、Activity设置主题

android:theme="@style/AppTheme.main"

<style name="AppTheme.main" parent="android:Theme.Material.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

2、主题中设置过渡动画

<style name="AppTheme.Details" parent="android:Theme.Material.Light.NoActionBar">
	<!-- 指定进入和退出transitions -->  
    <item name="android:windowEnterTransition">@transition/explode</item>  
    <item name="android:windowExitTransition">@transition/explode</item>  

    <item name="android:windowEnterTransition">@transition/details_window_enter_transition</item>
    <item name="android:windowReturnTransition">@transition/details_window_return_transition</item>
</style>

3、编写动画文件

<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
           android:transitionOrdering="together"
           android:duration="500">
    <fade>
        <targets>
            <target android:excludeId="@android:id/statusBarBackground" />
            <target android:excludeId="@android:id/navigationBarBackground" />
        </targets>
    </fade>
    <slide android:slideEdge="top">
        <targets>
            <target android:targetId="@id/details_header_container" />
        </targets>
    </slide>
    <slide android:slideEdge="bottom">
        <targets>
            <target android:targetId="@id/details_text_container" />
        </targets>
    </slide>
</transitionSet>

4、共享元素设置TransitionName

  • 第一个Activity

      ImageView mAlbumImage = (ImageView) itemView.findViewById(R.id.main_card_album_image);
    

    mAlbumImage.setTransitionName("Pablo Honey");

  • 第二个Activity

      ImageView mAlbumImage = (ImageView) rootView.findViewById(R.id.details_album_image);
      mAlbumImage.setTransitionName("Pablo Honey");
    

    也可使用标签设置

      android:transitionName="shareName"  
    

5、启动Activity

1、一个共享元素

startActivity(intent,
	ActivityOptions.makeSceneTransitionAnimation(MainActivity.this,mAlbumImage, 
		mAlbumImage.getTransitionName()).toBundle());

2、多个共享元素

ActivityOptions.makeSceneTransitionAnimation(this,  
    Pair.create(view1, "agreedName1"), Pair.create(view2, "agreedName2")); 

6、 若要暂时延迟Transition的使用,等待共享元素加载和

第一个界面

在Activity 的onCreate()中调用postponeEnterTransition(),暂时阻止启动共享元素 Transition。


第二个界面
在共享元素准备好后调用	startPostponedEnterTransition来恢复过渡效果。 

mAlbumImage.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
		@Override
		public boolean onPreDraw() {
			mAlbumImage.getViewTreeObserver().removeOnPreDrawListener(this);
			getActivity().startPostponedEnterTransition();
			return true;
		}
	});

以延迟共享元素返回 Transition

@Override
public void onActivityReenter(int requestCode, Intent data) {
    super.onActivityReenter(requestCode, data);
    postponeEnterTransition();
    mRecyclerView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
            mRecyclerView.getViewTreeObserver().removeOnPreDrawListener(this);
            // TODO: figure out why it is necessary to request layout here in order to get a smooth transition.
            mRecyclerView.requestLayout();
            startPostponedEnterTransition();
            return true;
        }
    });
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值