Java 动画不';t端-安卓

Java 动画不';t端-安卓,java,android,xml,animation,Java,Android,Xml,Animation,在我的应用程序中,我有一个按钮显示一个下拉菜单,在该菜单中我们有一些选项,其中一个是“抛硬币”, 此选项的目的是翻转硬币轻松动画,该动画显示在textView中,并显示硬币的正面或反面,而不是textView中的文本。 我有两个问题: 动画没有我想要的效果,它应该在1秒内出现一枚硬币,而不是文本视图中的文本,它停留在那里,2秒后他消失了,但消失后,硬币图像回到文本视图中,它不应该再次出现 这不是一个真正的问题,而是一个可选的问题,比如“你知道怎么做吗?”。我不知道如何创建硬币多次旋转的翻转动画

在我的应用程序中,我有一个按钮显示一个下拉菜单,在该菜单中我们有一些选项,其中一个是“抛硬币”, 此选项的目的是翻转硬币轻松动画,该动画显示在textView中,并显示硬币的正面或反面,而不是textView中的文本。 我有两个问题:

  • 动画没有我想要的效果,它应该在1秒内出现一枚硬币,而不是文本视图中的文本,它停留在那里,2秒后他消失了,但消失后,硬币图像回到文本视图中,它不应该再次出现
  • 这不是一个真正的问题,而是一个可选的问题,比如“你知道怎么做吗?”。我不知道如何创建硬币多次旋转的翻转动画
  • XML下拉菜单:

       <item
           android:id="@+id/flipacoin"
           android:title="@string/flipACoin" />
       <item
           android:id="@+id/rolladice"
           android:title="@string/rollADice" />
       <item
           android:id="@+id/imagebackground"
           android:title="@string/changeImage" />
    
    JAVA动画功能:

        @Override
        public boolean onMenuItemClick(MenuItem item) {
            switch (item.getItemId()){
                case R.id.flipacoin:
                    flipACoin();
                    return true;
    
                case R.id.rolladice:
                    Toast.makeText(this,"TODO roll a dice",Toast.LENGTH_SHORT).show();
                    return true;
                case R.id.imagebackground:
                    Toast.makeText(this,"TODO image background",Toast.LENGTH_SHORT).show();
                    return true;
                default:
                    return false;
            }
        }
    
    public void flipACoin(){
            coin.setText(null); //this is for remove the text inside the textView
            coin.setBackground(RANDOM.nextFloat() > 0.5f ? getResources().getDrawable(R.drawable.tails) : getResources().getDrawable(R.drawable.heads));
            Animation fadeIn = new AlphaAnimation(0, 1);
            fadeIn.setInterpolator(new DecelerateInterpolator());
            fadeIn.setDuration(1000);
    
            Animation fadeOut = new AlphaAnimation(1, 0);
            fadeOut.setInterpolator(new AccelerateInterpolator());
            fadeOut.setStartOffset(2000);
            fadeOut.setDuration(1000);
    
            AnimationSet animation = new AnimationSet(false); 
            animation.addAnimation(fadeIn);
            animation.addAnimation(fadeOut);
            coin.setAnimation(animation); 
        }
    

    当您在开始时设置背景时,它仅在动画之后保持不变。要将文本和背景设置回null,可以添加动画侦听器。下面是实现此功能的示例应用程序:

    public类MainActivity扩展了AppCompatActivity
    {
    文本视图硬币;
    随机;
    @凌驾
    创建时受保护的void(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    随机=新随机();
    硬币=findViewById(R.id.coin);
    (findviewbyd(R.id.click)).setOnClickListener(新视图.OnClickListener()
    {
    @凌驾
    公共void onClick(视图)
    {
    flipACoin();
    }
    });
    }
    公共空间
    {
    coin.setText(空);
    coin.setBackground(ResourcesCompat.getDrawable(getResources()),
    RANDOM.nextFloat()>0.5f?R.drawable.ic_launcher_背景:R.drawable.ic_launcher_前景,
    无效的
    ));
    动画fadeIn=新的AlphaAnimation(0,1);
    设置内插器(新减速器内插器());
    fadeIn.setDuration(1000);
    动画淡出=新的AlphaAnimation(1,0);
    设置内插器(新的加速器内插器());
    衰减设置起始偏移量(2000);
    衰减设置持续时间(1000);
    AnimationSet animation=新的AnimationSet(false);
    添加动画(fadeIn);
    动画。添加动画(淡出);
    //侦听器,它将在动画开始/结束/重复时执行该函数
    animation.setAnimationListener(新的animation.AnimationListener()
    {
    @凌驾
    onAnimationStart上的公共无效(动画)
    {
    Log.d(“MyTag”,“onAnimationStart:”);
    }
    @凌驾
    public void onAnimationEnd(动画)//动画结束时,将文本和背景设置为null
    {
    Log.d(“MyTag”,“onAnimationEnd:”);
    硬币。退避地(空);
    coin.setText(“默认”);
    }
    @凌驾
    onAnimationRepeat上的公共无效(动画)
    {
    Log.d(“MyTag”,“onAnimationRepeat:”);
    }
    });
    coin.setAnimation(动画);
    }
    }
    
    activity_main.xml: