android 上实现 控件平滑移动(smooth move) 研究


关于控件的平滑移动在国外著名网站stack overflow上有很多人问,最终也没人给个确切的回答。

在平板及基于android的智能电视上控件的平滑移动效果对用户的体验至关重要,最近研究了一下。


android 本身并没有对控件平滑移动的支持(可能有,我还不知道),实现控件的平滑移动需借助其动画框架(animation)及经过 扩展的framelayout。

首先看framelayout控件特点:

framelayout 是android布局中自检单的一个,是一个view的容器,只是简单的把每个view放在左上角,每当新添加一个view到framelayout容器时会遮挡先前添加的view。


这就给我们实现平滑移动提供了基础,我们可以在framelayout里添加两个子容器 linearlayout,一个linearlayout负责管理要添加的子控件,另一个linearlayout管理一个imageView控件,滑动时通过在此imageview上附着动画(animation)以达到平滑移动的效果。


在看android上的动画支持,android 2.2之前动画支持两种,view 动画和 帧动画,在包 android.view.animation中实现,android 3.0之后动画框架又添加了重量级动画框架property animation,在包android.animation中实现,代码位置在frmework/base/core/java/android/animation目录,对于控件平滑移动,用view动画中的一种即可

view动画 有四种,其中 translate动画可以控制控件水平或垂直坐标的变化,

所以 通过指定控件(imageView)的y坐标在某一时间段内完成从一个值到另一个值得变化即达到动画的效果,同时也可以指定变化的速度(加速,减速,匀速及组合)。


对于控件的focus,点击事件的处理,由于我们实际操作的是处于上方的imageview控件,所以不能直接控制其下面的控件,所以对于focus及点击事件需要提供监听接口,

然后通过给监听接口返回view实例及其位置,然后通过第一个linearlayout访问处于下面的具体控件。


原理基本这样,后续把实现代码奉上 :)



来自 csdn lidp ,转载著名出处,谢谢。



你可能感兴趣的:(android)