作为大三结束,暑期没事干的准毕业僧 前些时间找实习,有家公司邮件发来一个demo视频演示,让我觉得可以就过去。
当时已经找到合适的了就没有去,但是demo演示看了觉得还不错,详细不展示了,商城类App。其中有个转场动画,效果如下:
demo演示
我当时第一眼觉得 这个可能有点麻烦, 动态模糊且只保留一个ImageView - -,后来再看的时候发现,居然只是转场动画加上两个View交替显示。
这个和 【 湫水长天 】 的 教你一分钟实现模糊效果 思路一样
很简单,拆分来看:
这个只是一张模糊图+ImageView
这个只是用一张布局和后面差不多的图片模糊掉 来做的,然后来个属性动画将后面清晰的布局显示出来。
这个和上面保持风格相同头像位置一致
比较可知 头像位置相同,其他的大致一样就行。所以很容易就实现了~~~
仿做demo:
模仿demo
是不是差不多~~~
这demo本身没什么好说的,技术难点没有。
布局就是 Framelayout 放置两个布局差不多的LinearLayout,第一个背景是模糊的图片,
第二个是自己的布局,但是头像位置和第一个保持一致,并整体设置透明度为0.0;
启动Activity之后 播放属性动画 将第二个布局显示出来即可。
代码:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/front_back"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/front"
android:gravity="center_horizontal">
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:transitionName="head_image"
android:layout_marginTop="130dp"
android:background="@drawable/head" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/back_back"
android:layout_marginTop="1dp"
android:alpha="0.0"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/back"
android:gravity="center_horizontal">
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginTop="130dp"
android:background="@drawable/head" />
</RelativeLayout>
</FrameLayout>
转场动画:
head_image.setTransitionName("head_image");
TransitionSet transitionSet = new TransitionSet();
transitionSet.addTransition(new ChangeTransform());
transitionSet.addTransition(new ChangeBounds());
transitionSet.addTarget("head_image");
transitionSet.setDuration(1000);
Intent intent = new Intent(this, MainActivity.class);
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, head_image, "head_image");
startActivity(intent, options.toBundle());
第二个Activity进入后开始设置透明度:
Observable.timer(700, TimeUnit.MILLISECONDS)
.compose(this.<Long>bindToLifecycle())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Long>() {
@Override
public void call(Long aLong) {
ObjectAnimator
.ofFloat(back_back, "alpha", 0.0F, 1.0F)
.setDuration(700)
.start();
}
});
大功告成~第一次写简书,有错误大家指正,轻喷。