PathMenu 中 将ViewGroup 的子类setVisibility无效。
来源:互联网 发布:全职高手周边u盘淘宝网 编辑:程序博客网 时间:2024/05/21 05:40
不知道什么原因,在处理那个pathview的时候,将viewsetVisibility(View.GONE)一直无效,具体原因还未找出,但找到了一个解决方案,先记录一下。
import android.content.Context;import android.util.Log;import android.view.View;import android.view.ViewGroup;import android.view.ViewGroup.MarginLayoutParams;import android.view.animation.Animation;import android.view.animation.AnticipateInterpolator;import android.view.animation.OvershootInterpolator;import android.view.animation.RotateAnimation;import android.view.animation.TranslateAnimation;public class PathAnimations{private final String TAG = "MYAnimation";private float maxOffset = 160;private double maxAngle= Math.PI/2;public void initOffset(Context context) {//初始化maxOffset = context.getResources().getDimension(R.dimen.set_fly_dimens);}public PathAnimations(long duration ,float maxOffset){this.duration = duration;this.maxOffset = maxOffset;}private long duration = 500;public void setDuration(long time){duration = time;}public void setOffset(float offset){maxOffset =offset;}public static Animation getRotateAnimation(float fromDegrees,float toDegrees, int durationMillis) {RotateAnimation rotate = new RotateAnimation(fromDegrees, toDegrees,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);rotate.setDuration(durationMillis);rotate.setFillAfter(true);return rotate;}/** * 围绕90度旋转 * @param viewgroup * @param durationMillis */public void startAnimationsOut(ViewGroup viewgroup) {viewgroup.setVisibility(View.VISIBLE);int counts = viewgroup.getChildCount();Log.i(TAG,counts+",out");double singleAngle;if(counts>1)singleAngle = maxAngle/(counts-1);else{singleAngle = maxAngle;}float xOffset,yOffset;for (int i = 0; i < counts; i++) {xOffset = (float) Math.cos(singleAngle*i)*maxOffset;yOffset = (float) Math.sin(singleAngle*i)*maxOffset;Log.i(TAG,xOffset+",yOffset:"+yOffset);View inoutimagebutton = (View) viewgroup.getChildAt(i);inoutimagebutton.setVisibility(View.VISIBLE);MarginLayoutParams mlp = (MarginLayoutParams) inoutimagebutton.getLayoutParams();Animation animation = new TranslateAnimation( xOffset, 0F, yOffset, 0F);animation.setFillAfter(true);animation.setDuration(duration);animation.setStartOffset((i * 100)/ (-1 + viewgroup.getChildCount()));animation.setInterpolator(new OvershootInterpolator(2F));inoutimagebutton.startAnimation(animation);}}/** * 飞入 * @param viewgroup * @param durationMillis */public void startAnimationsIn(final ViewGroup viewgroup ) {final int counts = viewgroup.getChildCount();double singleAngle;if(counts>1)singleAngle = maxAngle/(counts-1);else{singleAngle = maxAngle;}float xOffset,yOffset;for (int i = 0; i < counts; i++) {xOffset = (float) Math.cos(singleAngle*i)*maxOffset;yOffset = (float) Math.sin(singleAngle*i)*maxOffset;final View inoutimagebutton = viewgroup.getChildAt(i);Animation animation = new TranslateAnimation(0F, xOffset, 0F, yOffset);animation.setFillAfter(true);animation.setDuration(duration);animation.setStartOffset(((counts- i) * 100)/ (-1 + viewgroup.getChildCount()));// 顺序倒一下比较舒服animation.setInterpolator(new AnticipateInterpolator(2F));animation.setAnimationListener(new Animation.AnimationListener() {@Overridepublic void onAnimationStart(Animation arg0) {}@Overridepublic void onAnimationRepeat(Animation arg0) {}@Overridepublic void onAnimationEnd(Animation arg0) {Log.i(TAG,"onAnimationEnd");if(viewgroup.getChildAt(0)==inoutimagebutton){Log.i(TAG,"0 child 相等");}if(viewgroup.getChildAt(1)==inoutimagebutton){Log.i(TAG,"1 child 相等");}if(viewgroup.getChildAt(counts-1)==inoutimagebutton){inoutimagebutton.setVisibility(View.GONE);Log.i(TAG,inoutimagebutton.getVisibility()+"'");//viewgroup.setVisibility(View.GONE);//无奈之举。。。当所有子都设置完后,将布局文件也设置为GONE.return ;}inoutimagebutton.setVisibility(View.GONE);//单独设置这个压根没用Log.i(TAG,inoutimagebutton.getVisibility()+"'");}});inoutimagebutton.startAnimation(animation);//inoutimagebutton.setVisibility(View.GONE);//即使在这里设置也毫无效果。}}}
下面是我的布局文件。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <RelativeLayout android:id="@+id/hide_fly_relative" android:layout_width="match_parent" android:clipChildren="false" android:clipToPadding="false" android:layout_height="match_parent" > <ImageView android:id="@+id/trans_type" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginRight="@dimen/set_fly_dimens" android:src="@drawable/trans_logo_youdao" android:visibility="gone" /> <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginBottom="@dimen/set_fly_dimens" android:src="@drawable/ic_launcher" android:visibility="gone" /> </RelativeLayout> <EditText android:id="@+id/search_content" android:layout_width="match_parent" android:layout_height="@dimen/right_bar_width" android:ems="10" android:visibility="gone" > <requestFocus /> </EditText> <RelativeLayout android:id="@+id/select_bar" android:layout_width="@dimen/right_bar_width" android:layout_height="match_parent" android:layout_gravity="right" android:layout_alignParentRight="true" android:orientation="vertical" > <ImageView android:id="@+id/search" android:layout_width="match_parent" android:layout_height="@dimen/right_bar_width" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:src="@drawable/ic_action_search" /> <ImageView android:id="@+id/imageView2" android:layout_below="@id/search" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <ImageView android:id="@+id/set" android:layout_width="wrap_content" android:layout_height="@dimen/right_bar_width" android:layout_alignParentBottom="true" android:src="@drawable/set" /> </RelativeLayout></RelativeLayout>
PathAnimation中的传入的ViewGroup 是hide_fly_relative。我试过其他的,PathMenu,其实他也没处理好这个问题。有时间得去看看源码。找找原因。
额,前几天找到原因了,其实是因为设置了Animation的setFillAfter(true)。所以在动画结束的时候,那个被施加动画的View 还在继续被动画占用。如果想要取消占用,自然考虑取消动画咯。view.clearAnimation()。结构,就ok了咯
- PathMenu 中 将ViewGroup 的子类setVisibility无效。
- android中setVisibility方法无效的可能原因与解决办法
- Android ScrollView中view.setVisibility(View.VISIBLE)无效的问题
- setvisibility无效
- 关于 View setVisibility()无效的情况
- setVisibility(View.GONE)无效的解决方案
- android setVisibility 无效
- Android view.setVisibility()后调用layout()方法无效的问题
- 不能在viewgroup及其子类的构造函数中中获取child
- ViewGroup 子类 LinearLayout 的measure 流程
- clearAnimation()解决setVisibility()无效问题
- android setVisibility(View.Gone)无效
- 在代码中,子view设置的属性在viewGroup中无效的问题解决
- Android的setVisibility(View.GONE)无效的问题及原因分析
- Android的setVisibility(View.GONE)无效的问题及原因分析
- setVisibility 中visible invisible 和gone的区别
- 安卓之setVisibility无效问题
- ViewGroup setVisibility 为GONE 子View依然占用地方,其中的子EditText会出现点击焦点占用
- 线段树(2)
- 跟我一起写 Makefile
- ServletContext
- 软件项目管理
- 离职的感想吧
- PathMenu 中 将ViewGroup 的子类setVisibility无效。
- 程序员学习能力提升三要素
- 2012 Epiphone les Paul custom plus ex/gx
- bootloader
- C/C++栈的实现
- Swing动态刷新,repaint,updateUI区别
- 开源 免费 java CMS - FreeCMS1.2-标签 questionPage
- A good blog about how to write an Hadoop MapReduce program in Python
- C/C++队列实现