上一篇博文,有个小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.youkuaiyun.com/guolin_blog/article/details/43536355
也可以购买他的书 《第一行代码-第二版》,新手入门书
转载于:https://blog.51cto.com/cm0425/1944909