【安卓学习ing】你看到的没有你想的那么复杂!案例效果分析

作为大三结束,暑期没事干的准毕业僧 前些时间找实习,有家公司邮件发来一个demo视频演示,让我觉得可以就过去。
当时已经找到合适的了就没有去,但是demo演示看了觉得还不错,详细不展示了,商城类App。其中有个转场动画,效果如下:
demo演示

我当时第一眼觉得 这个可能有点麻烦, 动态模糊且只保留一个ImageView - -,后来再看的时候发现,居然只是转场动画加上两个交替显示。
这个和 【 湫水长天 】 的 教你一分钟实现模糊效果 思路一样
很简单,拆分来看:

这个只是一张模糊图+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();
                    }
                });

大功告成~有错误大家指正,轻喷。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值