我想使用翻译动画将我的图像视图从当前位置移动到屏幕上的某个固定位置。 另外我想知道翻译动画是如何工作的以及它接受的参数究竟是什么?
我的代码是......
RelativeLayout.LayoutParams lParams = (LayoutParams) spreadImage
.getLayoutParams();
TranslateAnimation ta
ta = new TranslateAnimation(lParams.leftMargin,
randomLeftMarginsList.get(currentSpreadIndex),
lParams.topMargin,
ta.setAnimationListener(this);
ta.setDuration(ApplicationConstant.PUZZLE_GAME_IMAGE_SPREADING_TIME);
spreadImage.startAnimation(ta);
提前致谢。
答案 0 :(得分:18)
翻译动画控制布局或按钮的位置和位置或应用动画的任何视图。它可以在x方向或y方向上移动对象。
语法:
TranslateAnimation transAnimation= new TranslateAnimation(fromXposition, toXPosition, fromYPosition, toYPosition);
fromXposition - 动画开始的x坐标
toXPosition - 动画结束的x坐标
fromYPosition - 动画开始的y坐标。
toYPosition - 动画结束的y坐标。
1)如果我们只想在X direction
进行翻译,那么我们将 fromYPosition 和 toYPosition 设为零。
2)如果我们只想在Y direction
进行翻译,那么我们将 fromXPosition 和 toXPosition 设置为零。
还有另一种方法,我们在res文件夹中创建一个anim文件夹。在这个文件夹中,我们添加动画xml。我们使用一个translate标签,我们在其中指定属性值。
在下面的xml
中 android:duration
定义动画的执行时间
android:repeatCount
指定号码。动画应该重复的次数,
android:fromYDelta
定义动画应该从哪里开始的坐标
android:toYDelta
定义动画结束的y坐标。
<强> line_translate.xml 强>
<set xmlns:android=”http://schemas.android.com/apk/res/android”>
<translate android:duration=”300″ android:repeatCount=”1 android:fromYDelta=”0.0″ android:toYDelta=”174.0″ />
<强>代码:强>
Animation lineTranslate;
//loading xml from anim folder
Animation localAnimation = AnimationUtils.loadAnimation(this, R.anim.line_translate);
//You can now apply the animation to a view
view.startAnimation(transAnimation);
翻译动画可以改变对象的视觉外观,但是它们无法更改对象本身。也就是说,如果您将转换动画应用于视图,它将移动到新位置,但其点击事件不会被触发,而点击事件仍会在其先前位置被触发。发生这种情况是因为视图仍处于原始位置。
为了克服这个问题,我们可以使用实际移动对象的ObjectAnimation
。对象动画是实际移动对象的唯一动画。您可以使用ObjectAnimator
创建翻译动画。
ObjectAnimator transAnimation= ObjectAnimator.ofFloat(view, propertyName, fromX, toX);
transAnimation.setDuration(3000);//set duration
transAnimation.start();//start animation
查看 - 这是要应用动画的视图
propertyName - 正在设置动画的属性。
FromX,toX - 动画随时间变化的一组值。
希望这会给你很好的理解。
答案 1 :(得分:6)
您只需将视图转换为另一个位置即可。所以需要使用下面的代码来完成你的任务。
imgHeart.animate()
.scaleXBy(-6f)
.scaleYBy(-6f)
.alpha(.1f)
.translationX((heigthAndWidth[0] / 2) - minusWidth) // trying to make my location
.translationY(-((heigthAndWidth[1] / 2) - minusHeight))
.setDuration(1000)
.start();
答案 2 :(得分:2)
您可以使用NineOldAndroids。它有关于翻译动画的例子。