Android中利用TranslateAnimation移动时,不设置mTranslateAnimation.setFillAfter(true);,而利用视图的setLayoutParams来重新定位。。。。因为mTranslateAnimation.setFillAfter(true);之后,视图的事件消失,并且还有很多其他的问题。
而我们采用Animation.AnimationListener,在onAnimationEnd的方法中改变当前视图利用LayoutParams的setMargins方法重新定位位置。
代码段,仅供参考。
public void move() { jqkjScroll.setEnabled(true); Animation mTranslateAnimation = new TranslateAnimation(0, 0, 0, -showheight);// 移动 mTranslateAnimation.setDuration(minute); // mAnimationSet.setFillAfter(true); // mTranslateAnimation.setFillAfter(true); mTranslateAnimation .setAnimationListener(new Animation.AnimationListener() { public void onAnimationStart(Animation animation) { if (isNoMenu == false) { curent.setVisibility(View.GONE); } } public void onAnimationEnd(Animation animation) { RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( contentLayout.getLayoutParams()); contentImg.setImageResource(R.drawable.open); params.setMargins(0, endY - startY, 0, 0); contentLayout.clearAnimation(); contentLayout.setLayoutParams(params); jqkjScroll.scrollTo(0, 0); isMoveORShowing = false; } public void onAnimationRepeat(Animation animation) { } }); contentLayout.startAnimation(mTranslateAnimation); } public void show() { jqkjScroll.setEnabled(false); Animation mTranslateAnimation = new TranslateAnimation(0, 0, 0, showheight);// 移动 mTranslateAnimation.setDuration(minute); mTranslateAnimation .setAnimationListener(new Animation.AnimationListener() { public void onAnimationStart(Animation animation) { if (isNoMenu == false) { curent.setVisibility(View.VISIBLE); } } public void onAnimationEnd(Animation animation) { contentImg.setImageResource(R.drawable.close); isMoveORShowing = false; contentLayout.clearAnimation(); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( contentLayout.getLayoutParams()); params.setMargins(0, showheight + endY - startY, 0, 0); contentLayout.setLayoutParams(params); } public void onAnimationRepeat(Animation animation) { } }); contentLayout.startAnimation(mTranslateAnimation); }