android动画之TransitionManager
2018-02-07 15:04
99 查看
TransitionManager用于Scene场景之间的过渡
Scene储存着一个根View下的各个View的属性,例如下图就是一个场景
场景过渡有两个触发方式
go() 和 beginDelayedTransition()
常见的过渡效果有
Fade Slide Explode ChangeBounds
go()
使用该方法是进行两个布局之间的切换,提前设置好两个布局,然后进行切换。
如下图是主视图,在Framelayout中插入要进行切换的布局
下面是两个切换的布局
然后就要写代码了
首先需要通过
获得场景,第一个参数ViewGroup是布局的根View
然后通过
进行场景切换
效果图:
该方法第一个参数是要跳转至的场景
第二个参数是切换效果,也可以通过xml文件进行设置
beginDelayedTransition()
通过go()切换场景需要创建布局,不免还是有些繁琐,所以还有一个更简单的方法beginDelayedTransition()
该方法可以在原布局不变的情况下,通过修改View的属性来进行场景过渡
值得注意的是,我们可以通过
获取一个activity的根View,具体参考
https://stackoverflow.com/questions/4486034/get-root-view-from-current-activity
Scene储存着一个根View下的各个View的属性,例如下图就是一个场景
场景过渡有两个触发方式
go() 和 beginDelayedTransition()
常见的过渡效果有
Fade Slide Explode ChangeBounds
go()
使用该方法是进行两个布局之间的切换,提前设置好两个布局,然后进行切换。
如下图是主视图,在Framelayout中插入要进行切换的布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.m.oftransitionmanager.MainActivity" android:orientation="vertical"> <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/root"> <include layout="@layout/demo1"/> </FrameLayout> </LinearLayout>
下面是两个切换的布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="300dp" android:id="@+id/root"> <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/ic_launcher" /> </RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="300dp" android:id="@+id/root"> <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:src="@mipmap/ic_launcher" /> </RelativeLayout>
然后就要写代码了
Scene scene1; Scene scene2; boolean demo1=true; @TargetApi(Build.VERSION_CODES.KITKAT) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button=findViewById(R.id.btn); ViewGroup group=findViewById(R.id.root); scene1=Scene.getSceneForLayout(group,R.layout.demo1,this); scene2=Scene.getSceneForLayout(group,R.layout.demo2,this); button.setOnClickListener(new View.OnClickListener() { @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @Override public void onClick(View v) { TransitionManager.go(demo1?scene2:scene1,new ChangeBounds()); demo1=!demo1; } }); }
首先需要通过
Scene.getSceneForLayout(group,R.layout.demo1,this);
获得场景,第一个参数ViewGroup是布局的根View
然后通过
TransitionManager.go();
进行场景切换
效果图:
该方法第一个参数是要跳转至的场景
第二个参数是切换效果,也可以通过xml文件进行设置
Transition set= TransitionInflater.from(v.getContext()).inflateTransition(R.transition.demo_transition); TransitionManager.go(demo1?scene2:scene1,set);
<?xml version="1.0" encoding="utf-8"?> <transitionSet xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android"> <slide android:slideEdge="top" android:duration="2000" android:interpolator="@android:interpolator/fast_out_slow_in" tools:targetApi="lollipop" /> </transitionSet>
beginDelayedTransition()
通过go()切换场景需要创建布局,不免还是有些繁琐,所以还有一个更简单的方法beginDelayedTransition()
该方法可以在原布局不变的情况下,通过修改View的属性来进行场景过渡
public class DelayedActivity extends AppCompatActivity { ImageView imageView; boolean inite=true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_delayed); imageView=findViewById(R.id.delayed_img); ViewGroup.LayoutParams params= imageView.getLayoutParams(); params.height=100; params.width=100; imageView.setLayoutParams(params); imageView.setOnClickListener(new View.OnClickListener() { @RequiresApi(api = Build.VERSION_CODES.KITKAT) @Override public void onClick(View v) { ViewGroup viewGroup=(ViewGroup) findViewById(android.R.id.content); TransitionManager.beginDelayedTransition(viewGroup,new ChangeBounds()); ViewGroup.LayoutParams params= imageView.getLayoutParams(); if (inite){ params.height=400; params.width=400; }else { params.height=100; params.width=100; } inite=!inite; imageView.setLayoutParams(params); } }); } }
值得注意的是,我们可以通过
findViewById(android.R.id.content)
获取一个activity的根View,具体参考
https://stackoverflow.com/questions/4486034/get-root-view-from-current-activity
相关文章推荐
- Android中播放GIF图片动画
- android按钮点击动画特效,有关注按钮点击效果,有收藏按钮,点赞按钮,评论按钮等各种效果
- android动画 属性动画详解
- Android ActionBar中的按钮添加旋转动画
- Android动画中Interpolator 详解和演示
- Android 开机图片/文字/动画的修改
- 笔记之android动画 初识ValueAnimator 属性动画
- 帧动画,Android中的动画 --Frame Animation
- Android利用温度传感器实现带动画效果的电子温度计
- Android 使用Style分分钟搞定Activit切换的平移动画
- Android学习-使用ViewFlipper实现屏幕切换的动画效果
- Android酷炫动画效果之3D星体旋转效果
- android 动画效果
- Android程序开发之使用Design包实现QQ动画侧滑效果和滑动菜单导航
- Android 动画 ObjectAnimator基本使用
- (转)android 围绕中心旋转动画
- Android Animation动画 控制动画的执行效果,速度等
- Android动画学习笔记-Android Animation
- Android -- 贝塞尔实现水波纹动画(划重点!!)
- android activity进入退出动画自定义