自定义控件

1.Relativelayout布局的子布局,在布局中在下面位置的子布局会覆盖上面的子布局

自定义控件

2.对于补间动画(tween animation)而言,当动画移除屏幕,其布局依然在,布局原位置的点击事件依然可以点击,需要遍历设置子布局的enabled为false

 

 1 public class AnimationUtils {

 2 

 3     /**

 4      * 菜单出去动画

 5      * @param layout   需要动画的布局

 6      * @param startOffSet   延迟时间

 7      */

 8     public static void startRotateOutAnimation(RelativeLayout layout,long startOffSet) {

 9         //

10         tweenEnabled(layout, false);

11 

12         RotateAnimation rotateOut = new RotateAnimation(

13                 0, -180,

14                 Animation.RELATIVE_TO_SELF, 0.5f,

15                 Animation.RELATIVE_TO_SELF, 1);

16         rotateOut.setDuration(500);

17         rotateOut.setStartOffset(startOffSet);

18         rotateOut.setFillAfter(true);//设置动画结束时,停留在结束的状态

19         layout.startAnimation(rotateOut);

20 

21     }

22 

23 

24     /**

25      * 菜单进入动画

26      * @param layout   需要动画的布局

27      * @param startOffSet   延迟时间

28      */

29     public static void startRotateInAnimation(RelativeLayout layout,long startOffSet) {

30 

31         tweenEnabled(layout, true);

32 

33         RotateAnimation rotateOut = new RotateAnimation(

34                 -180, 0,

35                 Animation.RELATIVE_TO_SELF, 0.5f,

36                 Animation.RELATIVE_TO_SELF, 1);

37         rotateOut.setDuration(500);

38         rotateOut.setStartOffset(startOffSet);

39         rotateOut.setFillAfter(true);//设置动画结束时,停留在结束的状态

40         layout.startAnimation(rotateOut);

41     }

42 

43     /**

44      * 补间动画移除后布局仍在

45      * @param b

46      */

47     private static void tweenEnabled(RelativeLayout layout, boolean b) {

48         for(int i = 0; i < layout.getChildCount(); i++) {

49             layout.getChildAt(i).setEnabled(b);

50         }

51     }

52 }

 

3.虽然RelativeLayout的子布局因为位置的原因会发生覆盖现象,但是button、checkbox等按钮类具有很强的抢夺事件功能。

4.为了避免双击按钮,产生一个动画没结束第二个动画再次运行,使用动画监听类,保证一个动画结束后才可以开始另一个动画:分别在动画开始&结束中记录一个变量++/--,只要变量不为0,就return。

你可能感兴趣的:(自定义控件)