动画后移动imageview(更新位置)

我试图在屏幕底部到中间的图像视图上进行翻译动画。 完成动画后,我希望图像视图保持不变。 我不想要setFillAfter(true),因为我希望更新imageview的实际位置。

我目前通过2个图像视图(一个在动画开始,一个在结尾)来做,我玩setVisibility来实现这一点。 这是正确的做事方式吗? 这是我使用的代码:

  TranslateAnimation translate = new TranslateAnimation(0, mDestLoc1[0]-mSrcLoc1[0], 0, mDestLoc1[1]-mSrcLoc1[1]); translate.setDuration(2000); translate.setAnimationListener(new AnimationListener(){ @Override public void onAnimationStart(Animation animation) {} @Override public void onAnimationEnd(Animation animation) { ivMiddle.setVisibility(View.VISIBLE) ivStart.setVisibility(View.INVISIBLE) } @Override public void onAnimationRepeat(Animation animation) {} }); ivStart.startAnimation(translate); 

然后,您必须为View设置新的LayoutParams ,这是动画。 动画完成后,在onAnimationEnd部分中,设置View新位置。

  TranslateAnimation translate = new TranslateAnimation(0, mDestLoc1[0]-mSrcLoc1[0], 0, mDestLoc1[1]-mSrcLoc1[1]); translate.setDuration(2000); translate.setAnimationListener(new AnimationListener(){ @Override public void onAnimationStart(Animation animation) {} @Override public void onAnimationEnd(Animation animation) { RelativeLayout.LayoutParams par = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); par.topMargin = mDestLoc1[1]-mSrcLoc1[1]; par.leftMargin = mDestLoc1[0]-mSrcLoc1[0]; view.setLayoutParams(par); } @Override public void onAnimationRepeat(Animation animation) {} }); view.startAnimation(translate); 

Snake使用我的代码这将帮助你,

 //Call this in your onCreate private void StartAnimationsDtoU() { Animation anim = AnimationUtils.loadAnimation(this, R.anim.alphadtou); anim.reset(); RelativeLayout l=(RelativeLayout) findViewById(R.id.lin_lay); l.clearAnimation(); l.startAnimation(anim); anim = AnimationUtils.loadAnimation(this, R.anim.translate); anim.reset(); ImageView iv = (ImageView) findViewById(R.id.logo); iv.setImageResource(R.drawable.earth); iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE); iv.clearAnimation(); iv.startAnimation(anim); } 

这是您的线性布局,图像将从屏幕的下方移动到中间。

   

这将是你的xml文件进行翻译,即translate.xml …

  

这将是你的alphadtou.xml …

  

并像这样覆盖onAttachedToWindow方法……

 @Override public void onAttachedToWindow() { // TODO Auto-generated method stub super.onAttachedToWindow(); Window window = getWindow(); window.setFormat(PixelFormat.RGBA_8888); } 

希望这会帮助你。

如果你想要图像视图的实际起始位置,你可以在animationStart时获得它,你可以使用setFillAfter(true)setFillAfter(true)将在动画结束后更新位置。

如果需要新位置,可以使用setFilter(true) 。 如果您还没准备好使用setFillAfter(true) (如果您需要较旧的位置),那么您已经通过两个图像视图做了正确的事情。 但最好在animationStart获取位置并使用setFillAfter(true)

在开始动画之前添加此行translate.setFillAfter(true);