Android 安卓-撤销动画

Android 安卓-撤销动画,android,Android,我希望随机选择的图像在设置动画后重置,这样另一个随机选择的图像位于原点,旧图像将被删除。如何返回动画中设置图像的部分 Random rand = new Random(); int imag = rand.nextInt(4) + 1; switch (imag) { case 1:

我希望随机选择的图像在设置动画后重置,这样另一个随机选择的图像位于原点,旧图像将被删除。如何返回动画中设置图像的部分

Random rand = new Random();
                    int imag = rand.nextInt(4) + 1;

                    switch (imag)
                        {
                        case 1:
                            imageView.setImageResource(R.drawable.a);

                            break;

                        case 2:
                            imageView.setImageResource(R.drawable.b);

                            break;

                        case 3:
                            imageView.setImageResource(R.drawable.c);

                            break;

                        case 4:
                            imageView.setImageResource(R.drawable.d);

                            break;
                            }                   

        }        


        public boolean onTouchEvent(MotionEvent touchevent)
        {

            final ViewPropertyAnimator animator = imageView.animate();
            switch (touchevent.getAction())
            {

                case MotionEvent.ACTION_DOWN:
                {
                    x1 = touchevent.getX();
                    y1 = touchevent.getY();
                    break;
                }
                case MotionEvent.ACTION_UP:
                {
                    x2 = touchevent.getX();
                    y2 = touchevent.getY();



                    if (x1 < x2 && (x2-x1)>=(y1-y2) && (x2-x1)>=(y2-y1))
                    {

                        animator.translationX(imageView.getWidth()*2) 
                                .setDuration(180) //it's optional                               
                                .setListener(new AnimatorListenerAdapter() {
                                    @Override
                                    public void onAnimationEnd(Animator animation) {
                                        super.onAnimationEnd(animation);                                             
                                    }
                                })

                                .start();
                    }
                   } 
Random rand=new Random();
int imag=rand.nextInt(4)+1;
开关(imag)
{
案例1:
setImageResource(R.drawable.a);
打破
案例2:
setImageResource(R.drawable.b);
打破
案例3:
setImageResource(R.drawable.c);
打破
案例4:
设置图像资源(R.drawable.d);
打破
}                   
}        
公共布尔onTouchEvent(MotionEvent touchevent)
{
最终视图属性yanimator animator=imageView.animate();
开关(touchevent.getAction())
{
case MotionEvent.ACTION\u DOWN:
{
x1=touchevent.getX();
y1=touchevent.getY();
打破
}
case MotionEvent.ACTION\u UP:
{
x2=touchevent.getX();
y2=touchevent.getY();
如果(x1=(y1-y2)&&(x2-x1)>=(y2-y1))
{
animator.translationX(imageView.getWidth()*2)
.setDuration(180)//它是可选的
.setListener(新的AnimatorListenerAdapter(){
@凌驾
AnimationEnd上的公共无效(Animator动画){
super.onAnimationEnd(动画);
}
})
.start();
}
} 

也许您可以尝试以下方法:

int getMyRandomResId() {
    Random rand = new Random();
    int imag = rand.nextInt(4);

    switch (imag) {
        case 0:
            return R.drawable.a;
        break;
        case 1:
            return R.drawable.b;
        break;
        case 2:
            return R.drawable.c;
        break;
        default:
            return R.drawable.d;
    }
}

private boolean animationRunning = false;

public boolean onTouchEvent(MotionEvent touchevent)
{
    final ViewPropertyAnimator animator = imageView.animate();
    switch (touchevent.getAction()) {

        case MotionEvent.ACTION_DOWN: {
            x1 = touchevent.getX();
            y1 = touchevent.getY();
            break;
        }
        case MotionEvent.ACTION_UP: {
            x2 = touchevent.getX();
            y2 = touchevent.getY();

            if (!animationRunning) {
                if (x1 > x2 && (x1 - x2) >= (y1 - y2) && (x1 - x2) >= (y2 - y1)) {
                    animationRunning = true;
                    animator.translationX(-imageView.getWidth() * 2)
                            .setDuration(180)
                            .setListener(new AnimatorListenerAdapter() {
                                @Override
                                public void onAnimationEnd(Animator animation) {
                                    imageView.setTranslationX(0);
                                    imageView.setImageResource(getMyRandomResId());
                                    animationRunning = false;
                                }
                            })
                            .start();
                }
            }
        }
    }
}

也许你可以试试这样的东西:

int getMyRandomResId() {
    Random rand = new Random();
    int imag = rand.nextInt(4);

    switch (imag) {
        case 0:
            return R.drawable.a;
        break;
        case 1:
            return R.drawable.b;
        break;
        case 2:
            return R.drawable.c;
        break;
        default:
            return R.drawable.d;
    }
}

private boolean animationRunning = false;

public boolean onTouchEvent(MotionEvent touchevent)
{
    final ViewPropertyAnimator animator = imageView.animate();
    switch (touchevent.getAction()) {

        case MotionEvent.ACTION_DOWN: {
            x1 = touchevent.getX();
            y1 = touchevent.getY();
            break;
        }
        case MotionEvent.ACTION_UP: {
            x2 = touchevent.getX();
            y2 = touchevent.getY();

            if (!animationRunning) {
                if (x1 > x2 && (x1 - x2) >= (y1 - y2) && (x1 - x2) >= (y2 - y1)) {
                    animationRunning = true;
                    animator.translationX(-imageView.getWidth() * 2)
                            .setDuration(180)
                            .setListener(new AnimatorListenerAdapter() {
                                @Override
                                public void onAnimationEnd(Animator animation) {
                                    imageView.setTranslationX(0);
                                    imageView.setImageResource(getMyRandomResId());
                                    animationRunning = false;
                                }
                            })
                            .start();
                }
            }
        }
    }
}

我编辑了代码以获取更多信息。在设置图像动画后,它应该返回原点并选择一个新的rendom图像不确定这是否是您想要的-结尾可能有一个跳转,因此可能需要额外的入口动画。我尝试了您的代码,但我不知道您的
public void performation()是什么
方法是为,因为它没有被调用,所以我想我把它漏掉了。代码的另一部分使用了
getMyRandomResId()
对我来说听起来很合乎逻辑,但是如果我设置它,我会看到一个空白屏幕,这可能是什么原因呢?关于performAnimation()(这只是一个遗留问题)你是对的当你开始动画时,你的翻译不是0吗?我假设0是原来的位置。但是如果这个假设是错误的,一个空白的屏幕是确定的可能性。BTW,你使用哪一个动画类?好的,原理上是这样。图像重置到它的初始P。点,但这样做的结果是,当活动开始时,没有图像,首先是动画完成时。第二个问题是图像“闪烁”:当手势完成时,图像之间的切换非常快,为什么在动画结束之前没有一张图片停留?我正在实现OnGetureListener,没有extra classI编辑了代码以获取更多信息。在设置我的图像动画后,它应该回到原点并选择一个新的rendom图像不确定这是否是您想要的-可能在结尾处有一个跳转,因此可能需要额外的入口动画。我尝试了您的代码,但我不知道您的
public void performAnimation()是什么
方法是为,因为它没有被调用,所以我想我把它漏掉了。代码的另一部分使用了
getMyRandomResId()
对我来说听起来很合乎逻辑,但是如果我设置它,我会看到一个空白屏幕,这可能是什么原因呢?关于performAnimation()(这只是一个遗留问题)你是对的当你开始动画时,你的翻译不是0吗?我假设0是原来的位置。但是如果这个假设是错误的,一个空白的屏幕是确定的可能性。BTW,你使用哪一个动画类?好的,原理上是这样。图像重置到它的初始P。点,但这样做的结果是,当活动开始时,没有图像,首先是动画完成时。第二个问题是图像“闪烁”:当手势完成时,图像之间的切换非常快,为什么在动画结束之前没有一张图片停留?我正在实现OnGetureListener,没有extra类