坑人的视图动画

以下是一个用视图动画实现先平移后缩放的动画的xml代码

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true">
    <translate
        android:duration="1500"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="300"
        android:toYDelta="300" />

    <scale
        android:duration="1500"
        android:startOffset="1500"
        android:fromXScale="1"
        android:fromYScale="1"
        android:toXScale="2"
        android:toYScale="2"
        android:pivotY="50%"
        android:pivotX="50%"/>
  </set>

期望的执行结果是先平移后缩放。可是发现在缩放的时候还是会发生移动,这是怎么回事呢?实验了很多次,都是这样。然后我把第二个动画改成了旋转动画,发现旋转的中心点依然在执行该动画的View的最原始的位置。恍然大悟?对,视图动画并没有真正改变View的真实位置(牢记)。

因为View真实的位置并没有改变,所以虽然设置了android:pivotY="50%"android:pivotX="50%",但是此时的缩放中心并不是移动之后所看到的View的中心,而是在视图原来位置的中心。也就是说,此时的缩放中心在你所看到的View的外面。

那么对于缩放中心不处于View上面的时候,它是怎么缩放的呢?

经过我的实验发现:假如该View离缩放中心的距离是s,缩放倍数为n,那么它缩放之后,它距离缩放中心的距离将变成s*n。

解决办法:目前我还没有想到直接用视图动画的解决办法,只能用属性动画了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,376评论 25 709
  • 内容抽屉菜单ListViewWebViewSwitchButton按钮点赞按钮进度条TabLayout图标下拉刷新...
    皇小弟阅读 46,977评论 22 665
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,205评论 4 61
  • 1 背景 不能只分析源码呀,分析的同时也要整理归纳基础知识,刚好有人微博私信让全面说说Android的动画,所以今...
    未聞椛洺阅读 7,655评论 0 10
  • 帝殿雄宏,金銮壁瓦,紫云贯空天南。 似染红砖,景山林外烟连。 遥看螓首蛾眉展,夜落时,神迹天坛。 古街清,环绕凝情...
    沙柳胡杨阅读 1,657评论 0 4