android animation clipToPadding clipChildren

本文详细介绍了Android中视图的定位方式,包括相对于父容器和屏幕的位置计算方法,并深入探讨了各种动画属性及其效果,如透明度、旋转、平移和缩放等。

位置的学习
event.getX():表示的是触摸的点距离自身左边界的距离 
event.getY():表示的是触摸的点距离自身上边界的距离
event.getRawX:表示的是触摸点距离屏幕左边界的距离
event.getRawY:表示的是触摸点距离屏幕上边界的距离 
View.getWidth():表示的是当前控件的宽度,即getRight()-getLeft()




View.getHeight():表示的是当前控件的高度,即getBottom()-getTop() 
View.getTop():子View的顶部到父View顶部的距离
View.getRight():子View的右边界到父View的左边界的距离 
View.getBottom():子View的底部到父View的顶部的距离 
View.getLeft():子View的左边界到父View的左边界的距离 
View.getTranslationX()计算的是该View在X轴的偏移量。初始值为0,向左偏移值为负,向右偏移值为正。 
View.getTranslationY()计算的是该View在Y轴的偏移量。初始值为0,向上偏移为负,向下偏移为证
 

 

View 提供了如下 5 种方法获取 View 的坐标:
1. View.getTop()、View.getLeft()、View.getBottom()、View.getRight();
2. View.getX()、View.getY();
3. View.getTranslationX()、View.getTranslationY();
4. View.getLocationOnScreen(int[] position);
5. View.getLocationInWindow(int[] position);


1. 这四个方法用于获取View相对于父容器的坐标
2. getX()与getY()方法获取的是View左上角相对于父容器的坐标,当View没有发生平移操作时,getX()==getLeft()、getY==getTop()。
3. translationX与 translationY是View左上角相对于父容器的偏移量:translationX = getX() - getLeft(),当View未发生平移操作时,translationX 与translationY都为0。
4. 获取View相对于整个屏幕的坐标。
5. 获取View相对于Window的坐标(忽略状态栏及ActionBar)

 

 

 


2.动画的值
透明度 0-1 透明到不透明 
旋转的值是-360-360 
平移的值不限制  一般值相对于view的中心
缩放的值0-1从不显示到正常显示  0-2,从不显示放大一倍。


Animation.RELATIVE_TO_PARENT 与 Animation.RELATIVE_TO_SELF  
相对于父布局,相对于自身  




/**
     * Interpolator 定义了动画的变化速度,可以实现匀速、正加速、负加速、无规则变加速等
     * AccelerateDecelerateInterpolator 在动画开始与结束的地方速率改变比较慢,在中间的时候加速
     * AnticipateInterpolator 开始的时候向后然后向前甩
     * AnticipateOvershootInterpolator 开始的时候向后然后向前甩一定值后返回最后的值
     * BounceInterpolator   动画结束的时候弹起
     * CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线
     * DecelerateInterpolator 在动画开始的地方快然后慢
     * LinearInterpolator   以常量速率改变
     * OvershootInterpolator    向前甩一定值后再回到原来位置
     * */

 

 

从Animation类继承的属性
android:duration        动画持续时间,以毫秒为单位 
android:fillAfter          如果设置为true,控件动画结束时,将保持动画最后时的状态
android:fillBefore       如果设置为true,控件动画结束时,还原到开始动画前的状态
android:fillEnabled    与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
android:repeatCount 重复次数
android:repeatMode重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
android:interpolator  设定插值器,其实就是指定的动作效果,比如弹跳效果等

android:fromXScale    起始的X方向上相对自身的缩放比例,浮点值,比如1.0代表自身无变化,0.5代表起始时缩小一倍,2.0代表放大一倍;
android:toXScale        结尾的X方向上相对自身的缩放比例,浮点值;
android:fromYScale    起始的Y方向上相对自身的缩放比例,浮点值,
android:toYScale        结尾的Y方向上相对自身的缩放比例,浮点值;
android:pivotX            缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,当为数值时,表示在当前View的左上角,即原点处加上50px,做为起始缩放点;如果是50%,表示在当前控件的左上角加上自己宽度的50%做为起始点;如果是50%p,那么就是表示在当前的左上角加上父控件宽度的50%做为起始点x轴坐标。(具体意义,后面会举例演示)
android:pivotY           缩放起点Y轴坐标,取值及意义跟android:pivotX一样。


android:fromAlpha   动画开始的透明度,从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明
android:toAlpha       动画结束时的透明度,也是从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明

rotate标签——旋转
android:fromDegrees     开始旋转的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
android:toDegrees         结束时旋转到的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
android:pivotX               缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲
android:pivotY               缩放起点Y轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%pz


translate标签 —— 平移
android:fromXDelta     起始点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲
android:fromYDelta    起始点Y轴从标,可以是数值、百分数、百分数p 三种样式;
android:toXDelta         结束点X轴坐标
android:toYDelta        结束点Y轴坐标

 

 

 

clipToPadding : 取值为boolean类型,默认为true,表示子控件的绘制区域在padding里面(true的情况下如果你设置了padding那么绘制的区域就往里缩)   
false 就会在padding区域绘制。滚动布局用的比较多。

clipChildren : 是否限制子View在其范围内,我们将其值设置为false后那么当子控件的高度高于父控件时也会完全显示,而不会被压缩。其实很简单,只要用了这个神奇的属性后这个效果很容易就可以实现,下面是注意点:
1、只需在根节点设置android:clipChildren为false即可,默认为true,注意:一定是在布局文件的父节点设置,否则不起作用
2、可以通过android:layout_gravity控制超出的部分如何显示
3、android:clipChildren的意思:是否限制子View在其范围内,我们将其值设置为false后那么当子控件的高度高于父控件时也会完全显示,而不会被压缩 。

`android:clipToPadding="false"` 是 Android 中用于控制 **View 是否裁剪其内容到 padding 区域** 的一个属性,通常用在 `ViewGroup`(如 `ScrollView`、`RecyclerView`、`FrameLayout` 等)上。 --- ### ✅ 作用详解: - **默认值**:`true`,表示内容不会绘制到 padding 区域。 - **设为 `false`**:允许内容绘制到 padding 所定义的区域内。 通俗点说: 如果你给一个 `ScrollView` 设置了 `android:paddingBottom="50dp"`,并且设置了 `android:clipToPadding="false"`,那么它的内容可以“延伸”到这 50dp 的 padding 区域内绘制,而不是被裁剪掉。 --- ### ✅ 使用场景举例: #### 场景一:`ScrollView` 底部留白,但想让内容“顶到底部 padding” ```xml <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="50dp" android:clipToPadding="false"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <!-- 内容 --> </LinearLayout> </ScrollView> ``` - 这样即使设置了 `paddingBottom`,内容仍然可以延伸到底部 padding 区域,不会出现“空白被遮挡”的情况。 --- #### 场景二:`RecyclerView` 实现 item 间距,但想让第一个/最后一个 item 贴边 ```xml <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingStart="16dp" android:paddingEnd="16dp" android:clipToPadding="false" /> ``` - 这样可以让 item 的内容延伸到 padding 区域,视觉上更连贯。 --- ### ✅ 和 `android:clipChildren` 的区别: | 属性 | 作用对象 | 含义 | |------|----------|------| | `android:clipToPadding` | 自身 | 是否裁剪自己的内容到 padding 区域 | | `android:clipChildren` | 子 View | 是否允许子 View 超出自己的边界绘制(如超出 padding) | --- ### ✅ 总结 - `android:clipToPadding="false"` 让内容可以绘制到 padding 区域内; - 常用于 `ScrollView`、`RecyclerView` 等容器; - 配合 `padding` 使用,可以实现更灵活的布局效果; - 不会影响子 View 的布局位置,只影响绘制行为。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值