美文网首页Android大法好Android开发感悟Android效果/自定义
你看到的没有你想的那么复杂!案例效果分析

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

作者: 莫离境 | 来源:发表于2016-09-03 14:10 被阅读730次

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

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

相关文章

网友评论

  • We7ex:挺不错的 :+1:
    莫离境:@陌合_莫合 多谢,好多东西其实都不难,要培养分析问题的能力。一起加油

本文标题:你看到的没有你想的那么复杂!案例效果分析

本文链接:https://www.haomeiwen.com/subject/jpikettx.html