上一篇博文,有个小bug,就是点了后如果图片都隐藏了,此时再次点击那些按钮存在的位置时,还是会显示出来。
这里原因是图片隐藏了,但是图片的属性还在原来的位置,点击后还是会触发相应的方法,该怎么解决呢,有2中方法:
1、利用viewgroup的特点,获取它的每个子view,然后设置子view在旋转后不可选中。
package com.yuanlp.youkudemo; import android.view.View; import android.view.ViewGroup; import android.view.animation.RotateAnimation; /** * Created by 原立鹏 on 2017/7/3. * 控制level的指定的看控件 */ class Tools { public static void hideView(ViewGroup view){ //参数解释:第一个蚕食是从多少开始,第二个是旋转多少度,第三个以及第四个是相对于控件来说,旋转中心的位置,即控件宽度的一半以及高度 hideView(view,0); } public static void showView(ViewGroup view) { //参数解释:第一个蚕食是从多少开始,第二个是旋转多少度,第三个以及第四个是相对于控件来说,旋转中心的位置,即控件宽度的一半以及高度 RotateAnimation ra=new RotateAnimation(180,360,view.getWidth()/2,view.getHeight()); ra.setDuration(500); //设置动画的时间,不然的话直接就没了,没有视觉效果 ra.setFillAfter(true); //动画停留在完成的状态 view.startAnimation(ra); //启动动画 //-----------------------------------------------------------------------------// //这里解决之前说的bug,获取 for (int j=0 ;j<view.getChildCount();j++){ //循环每个子组件,在隐藏时,设置为不可点击 View childView=view.getChildAt(j); childView.setEnabled(true); } //-----------------------------------------------------------------------------------// } /** * view和viewgroup的区别在与是否可以操作子组件 * @param view * @param i */ public static void hideView(ViewGroup view, int i) { //参数解释:第一个蚕食是从多少开始,第二个是旋转多少度,第三个以及第四个是相对于控件来说,旋转中心的位置,即控件宽度的一半以及高度 RotateAnimation ra=new RotateAnimation(0,180,view.getWidth()/2,view.getHeight()); ra.setDuration(500); //设置动画的时间,不然的话直接就没了,没有视觉效果 ra.setStartOffset(i); //延迟多久后播放动画 ra.setFillAfter(true); //动画停留在完成的状态 view.startAnimation(ra); //启动动画 //----------------------------------------------------------------------------// for (int j=0 ;j<view.getChildCount();j++){ //循环每个子组件,在隐藏时,设置为不可点击 View childView=view.getChildAt(j); childView.setEnabled(false); } //---------------------------------------------------------------------------------// } }
第二种方法是利用属性动画,暂时还没有研究这个,后面会补上属性动画的解决方案
具体可以详见 郭霖大神的博客:http://blog.csdn.net/guolin_blog/article/details/43536355
也可以购买他的书 《第一行代码-第二版》,新手入门书