我有几个ImageView
S IN一个RelativeLayout
。 现在,当用户点击任何一个ImageView的,我希望它被移动到微妙的动画指定位置。
例如; 我已经初始设定边距LayoutParams
与相关联ImageView
作为layoutparams1.setMargins(90,70,0,0);
然后把它添加到布局。
当ImageView的被窃听,我想它的新位置是200,200
,与动画。
所以,这可能吗? 如果是,那么如何?
请注意,我有两个RelativeLayout
及其所有子的ImageView
小号编程方式创建。
而我新,所以一个煞费苦心的答案,预计Android开发。
TranslateAnimation animation = new TranslateAnimation(0, 50, 0, 100);
animation.setDuration(1000);
animation.setFillAfter(false);
animation.setAnimationListener(new MyAnimationListener());
imageView.startAnimation(animation);
UPDATE:问题是, View
实际还处于它的老位置。 因此,我们必须当动画完成后移动它。 为了检测当动画完成后,我们必须建立我们自己的animationListener
(我们的内部activity
类):
private class MyAnimationListener implements AnimationListener{
@Override
public void onAnimationEnd(Animation animation) {
imageView.clearAnimation();
LayoutParams lp = new LayoutParams(imageView.getWidth(), imageView.getHeight());
lp.setMargins(50, 100, 0, 0);
imageView.setLayoutParams(lp);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationStart(Animation animation) {
}
}
所以onClickEvent
将得到再次发射它的新的地方。 动画现在进入它更是下跌,所以你可能要保存x
和y
在一个变量,因此,在onAnimationEnd()
你不将它移动到一个固定的位置。
也就是用更好的ObjectAnimator
。 在新的岗位这一举动视图。 例如 :
ImageView splash ;
@Override
public boolean onTouchEvent(MotionEvent event) {
float tx = event.getX();
float ty = event.getY();
int action = event.getAction();
switch(action) {
case MotionEvent.ACTION_DOWN:
tx = event.getX();
ty = event.getY();
// findViewById(R.id.character).setX(tx-45);
// findViewById(R.id.character).setY(ty-134);
ObjectAnimator animX = ObjectAnimator.ofFloat(splash, "x", tx-45);
ObjectAnimator animY = ObjectAnimator.ofFloat(splash, "y", ty-134);
AnimatorSet animSetXY = new AnimatorSet();
animSetXY.playTogether(animX, animY);
animSetXY.start();
break;
default:
}
return true;
}
在下面的代码我加入在动态帧布局中心一个图像图。 添加之后我增加缩放和设置阿尔法给变焦效果和动画完成后,我只是翻译我的图像视图一个位置移动到另一个位置。
添加图片视图上的FrameLayout
imgHeart = new ImageView(getBaseContext());
imgHeart.setId(R.id.heartImage);
imgHeart.setImageResource(R.drawable.material_heart_fill_icon);
imgHeart.setLayoutParams(new FrameLayout.LayoutParams(50, 50, Gravity.CENTER));
mainFrameLaout.addView(imgHeart);
添加动画图像视图
imgHeart.animate()
.scaleXBy(6)
.scaleYBy(6)
.setDuration(700)
.alpha(2)
.setListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
imgHeart.animate()
.scaleXBy(-6f).scaleYBy(-6f)
.alpha(.1f)
.translationX((heigthAndWidth[0] / 2) - minusWidth)
.translationY(-((heigthAndWidth[1] / 2) - minusHeight))
.setDuration(1000)
.setListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
// remove image view from framlayout
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
}).start();
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
}).start();