自定义控件

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。

posted on 2015-07-26 21:24  二两  阅读(143)  评论(0编辑  收藏  举报

导航