解决 Android 中 View 的 setPivotX 和 setPivotY 不生效的问题以及设置缩放中心的方法
来源:互联网 发布:centos7 软件管理器 编辑:程序博客网 时间:2024/06/07 00:53
背景是这样的:有一个需求要对下方的关注按钮实现如下动画,动画的最后要根据滑动位置对关注按钮进行缩放,缩放结束时整体大小为控件原始大小的90%,最终效果图如下所示(模拟器是 4.2 的系统,最上面的沉浸式有点问题,忽略之):
如图,关注按钮向上滑动到某临界位置时,按钮需要缩小;同样,向下滑动到相同的临界位置时,需要放大。
在布局文件中,关注按钮整体布局为RelativeLayout
,爱心ImageView
和文字TextView
居中。
由于动画需要根据滑动位置动态计算,因此不能用缩放动画实现。当滑动到临界位置时,我做如下处理:
float scale = 1- 0.1f * (scrollY - 100) / 10; //scale范围:1.0~0.9mLayoutFollow.setPivotX(1.0f);mLayoutFollow.setPivotY(1.0f);mLayoutFollow.setScaleX(scale);mLayoutFollow.setScaleY(scale);
上述代码中,缩放比例scale
的值是根据滑动距离scrollY
动态计算出来的,其取值范围为1.0~0.9
;设置setPivotX(1.0f)
和setPivotY(1.0f)
的目的,是想让关注按钮(RelativeLayout
)的缩放轴点为右下角,但是悲剧的是,这样的设置并没有生效,缩放的中心始终为左上角。这与 xml 中设置PivotX
和PivotY
属性是相矛盾的(在 xml中,都设置为0.0f,则缩放中心为控件左上角;都设置为0.5f,则缩放中心为控件中心;都设置为1.0f,则缩放中心为控件右下角,详见博文 图解 Android 动画中 android:pivotX 和 android:pivotY 属性的含义)。
测试后发现,只要 setPivotX(float x) 或 setPivotY(float y) 中有一个值为 0,最后的结果都是缩放中心为左上角;而当不设置这两个值时(即去掉setPivotX/Y
这两行代码),缩放中心为控件中心。(奇怪,为什么呢?。。)
想到 xml 中还可以将PivotX
属性设置为整数,于是这样设置:
mLayoutFollow.setPivotX(100);mLayoutFollow.setPivotY(0.0f);
发现,缩放中心变为控件最上方,但偏右一些,说明setPivotX(100)
生效了。
据此启发,于是,得到最终设置缩放中心为右下角的方法如下:
float scale = 1- 0.1f * (scrollY - 100) / 10;//范围:1.0~0.9mLayoutFollow.setPivotX(X); //X为控件宽度的px值,以实际情况为准mLayoutFollow.setPivotY(Y); //Y为控件宽度的px值,以实际情况为准mLayoutFollow.setScaleX(scale);mLayoutFollow.setScaleY(scale);
设置缩放中心为其他位置的方法亦类似。
但是还是不知道为什么是这样的。。╮(╯▽╰)╭尴尬~~抛砖引玉,还望知道的小伙伴告知~
- 解决 Android 中 View 的 setPivotX 和 setPivotY 不生效的问题以及设置缩放中心的方法
- Android中setHeight不生效的问题
- 关于HOSTS设置不生效的解决小方法
- 关于HOSTS设置不生效的解决小方法
- 解决httpclient超时设置不生效的问题
- 解决 AndroidStudio 中 gradle 的 buildTypes 配置不生效问题
- 解决jquery中全选点击第二次不生效的问题
- 解决在Thymeleaf中layout:fragment不生效的问题
- 如何解决.gitignore不生效的问题
- 百度地图动态的设置中心坐标和缩放级别
- 设置tr的border-bottom不生效解决
- 解决java修改的类编译不生效的问题
- 设置View的可见以及不可见
- 解决div的高度定义在IE6中不生效的问题
- 解决adb push ODEX 后缀文件不生效的问题
- 解决C#代码修改Windows注册表不生效的问题
- 解决ListView的getView()方法中View设置监听position错乱的问题
- unity build设置固定分辨率不生效的问题
- 线性代数 04.01 n维向量
- Ajax-用户名验证简单例子(详解)
- java:23种设计模式详解
- Ubuntu 使用HugePage 加速应用
- Eclipse rcp 开发中常用快捷键和相关功能
- 解决 Android 中 View 的 setPivotX 和 setPivotY 不生效的问题以及设置缩放中心的方法
- 安全(主要XSS与CSRF)
- 数据分析框架
- 解决eclipse中maven项目build的时候,console显示teminated,没有任何打印信息
- clone 克隆
- 数据存储全方案--详解持久化技术
- Maven学习笔记
- JS封装类或对象的最佳方案
- linux 工作服务器环境切换