Android Material Design 极大的提升了用户体验,使UI 展示效果更加平滑和舒适,之前只是 专注于 (Tween动画) ,(属性动画)。最近新项目基于Android L 平台,并决定统一采用Android Studio 开发新项目,旧项目 依然采用Eclipse 维护。 第一次 真正开始接触 Material Design,感觉 自己又要提升一个 level ,为自己加油。
这里记录一下我的Transition 学习心得(Android Transition 详细介绍),我就不BaLaBaLa了,直接切入主题。
首先设置 - Theme android:windowContentTransitions为true - 共享View 设置统一的 android:transitionName
OK, 上代码:
MainActivity
edittext.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this, SearchActivity.class); // 这里采用兼容低版本启动方式 ActivityOptionsCompat activityOptionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(MainActivity.this , Pair.create(findViewById(R.id.edittext_search), "edittextsearch") , Pair.create(findViewById(R.id.imageview_logo), "imageviewlogo") ); ActivityCompat.startActivity(MainActivity.this,intent , activityOptionsCompat.toBundle()); } });SearchActivity
@Override PRotected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); initTransition(); //需要重新设置Transition 或者增加 监听 }如果只是想增加监听,这里以共享动画为例,代码如下
private void initTransition() { getWindow().getSharedElementEnterTransition().addListener(new Transition.TransitionListener() { @Override public void onTransitionStart(Transition transition) { } @Override public void onTransitionEnd(Transition transition) { Log.i(TAG, "onTransitionEnd"); ... your code ... getWindow().getSharedElementEnterTransition().removeListener(this); // 避免返回时再次触发 your code! } @Override public void onTransitionCancel(Transition transition) { } @Override public void onTransitionPause(Transition transition) { } @Override public void onTransitionResume(Transition transition) { } }); }如果要设置Transition,代码如下:
private void initTransition() { /*changeBounds - 改变目标视图的布局边界 changeClipBounds - 裁剪目标视图边界 changeTransform - 改变目标视图的缩放比例和旋转角度 changeImageTransform - 改变目标图片的大小和缩放比例 @android:transition/move - 将上述所有变换同时进行的一个TransitionSet 。 如果共享元素的进入和返回 变换没有特别声明,框架将使用它作为默认的变换。*/ ChangeBounds transition= new ChangeBounds(); getWindow().setSharedElementEnterTransition(transition); transition.addListener(new Transition.TransitionListener() { @Override public void onTransitionStart(Transition transition) { } @Override public void onTransitionEnd(Transition transition) { ... your code ... transition.removeListener(this); // 避免返回时再次触发 your code! } @Override public void onTransitionCancel(Transition transition) { } @Override public void onTransitionPause(Transition transition) { } @Override public void onTransitionResume(Transition transition) { } });}新闻热点
疑难解答