你看到的没有你想的那么复杂!案例效果分析

作为大三结束,暑期没事干的准毕业僧 前些时间找实习,有家公司邮件发来一个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();
                    }
                });

大功告成~第一次写简书,有错误大家指正,轻喷。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 今天不像秋天,灿烂的阳光照得大地暖洋洋的,很舒服。 上班路上,看到许多中学生三五成群的去学校,她们脸上的笑容,比阳...
    微凉的露珠阅读 197评论 0 0