突破父控件的布局限制,让子view从屏幕边缘滑进屏幕的动画效果

博客讲述了如何在Android中创建一个ImageView从屏幕边缘滑入屏幕中间的动画效果。由于补间动画受限于父控件布局,作者转向使用属性动画,但发现属性动画也无法突破限制。最终,通过创建ImageView的克隆体作为浮窗来实现这一动画效果,当克隆体滑动到预定位置时消失,原ImageView显现。

         遇到一个需求,就是要求让一个ImageView有一个从屏幕上边缘滑入屏幕中间的动画效果,子view的父控件在屏幕中间,要有从屏幕边缘滑入的效果,则必定要求子view的动画不能限制在其父控件的布局之内,但是android的补间动画(Tween Animation)做不到这个效果,补间动画只能让子view在其父控件内实现动画,而强大的属性动画可以突破父控件布局的限制(这个观点后面测试了,是错误的,也就是说属性动画也不能让子view突破父控件的区域,这里道个歉,想让子view不受约束,可能需要将子view放到更上层的布局里面去,感谢同学的指正.属性动画的优势在于view移动到哪,touch事件就是在哪触发,而补间动画则是表面上移动了view,实际上view的touch事件还是只能在原来最初的位置触发),但是android 的属性动画(Property Animation)是在3.0之后才引入的,在android2.3的系统版本里面无法使用这么强大的动画效果,这就有点捉鸡了。

        在看到别人分析的桌面浮窗(类似某卫士的桌面浮窗控件,点击后可以杀死后台任务)实现原理后,找到了灵感,决定采用浮窗绘制出滑入的动画。

        实现方案就是,先让ImageView在父控件内设置为View.INVISIBLE即不可见的效果,另写一个布局文件,内容就是该ImageView,算是个克隆体吧,之后需要使用这个克隆体来实现动画效果。当绘制的克隆体从屏幕上沿滑入,下滑到预定的位置,就gone掉这个克隆体,让原来的ImageView显示出来即可。当然,为了保证动画效果,还需要确保滑入的体位正确╮(╯▽╰)╭,所以还需要计算出克隆体初始的位置。

        主界面的布局:

        

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="120dp"
        android:layout_marginTop="50dp"
        android:layout_alignParentTop="true">
        <LinearLayout
            android:id="@+id/linear_ll"
            android:layout_toRightOf="@+id/relative_rl"
            android:layout_toEndOf="@+id/relative_rl"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_marginLeft="10dp">
            <TextView
                android:layout_height="0dp"
                android:layout_width="match_parent"
                android:layout_weight="1"
                android:gravity="center_vertical"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textStyle="bold"
                android:text="Game of Thrones"/>
            <TextView
                android:layout_height="0dp"
                android:layout_width="match_parent"
                android:layout_weight="1"
                android:gravity="to
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值