移动一个ImageView的不同位置动画方式的Android(Move an ImageView t

2019-06-25 16:30发布

我有几个ImageView S IN一个RelativeLayout 。 现在,当用户点击任何一个ImageView的,我希望它被移动到微妙的动画指定位置。

例如; 我已经初始设定边距LayoutParams与相关联ImageView作为layoutparams1.setMargins(90,70,0,0); 然后把它添加到布局。

当ImageView的被窃听,我想它的新位置是200,200 ,与动画。

所以,这可能吗? 如果是,那么如何?

请注意,我有两个RelativeLayout及其所有子的ImageView小号编程方式创建。

而我新,所以一个煞费苦心的答案,预计Android开发。

Answer 1:

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将得到再次发射它的新的地方。 动画现在进入它更是下跌,所以你可能要保存xy在一个变量,因此,在onAnimationEnd()你不将它移动到一个固定的位置。



Answer 2:

也就是用更好的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;
}


Answer 3:

在下面的代码我加入在动态帧布局中心一个图像图。 添加之后我增加缩放和设置阿尔法给变焦效果和动画完成后,我只是翻译我的图像视图一个位置移动到另一个位置。

添加图片视图上的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();


文章来源: Move an ImageView to different position in Animated way in Android