动画后不要单击ImageButton

时间:2018-03-27 08:16:27

标签: java android arrays animation arraylist

我正在开发一款益智游戏。问题的实质是这个。我在(ImageButton)集合中有按钮ArrayList mButtons,每个按钮都有监听器,我为听众指定了一个按钮动画。当我点击按钮时,动画效果很好,但是!如果我回到那个按钮,我不能移动它而不按它!好像最重要的是纹理叠加了!按下其他按钮。我检查了不同的方式:

v.getAnimation().reset();
v.getAnimation().cancel();
v.clearAnimation();
v.setAnimation(null);
v.getAnimation().setAnimationListener(null);

没有帮助!如果有任何提示并且您遇到了同样的问题,请回复!

了解的图片:

puzzle

使代码更清晰的代码:

public class TouchButtonAction implements View.OnClickListener {
private GameController mController;
private List<ImageButton> mButtons;
private List<GridLayout.LayoutParams> mParams;
private final Animation myAnimA;
private volatile  boolean isAnimAFinish = true;

public TouchButtonAction(Context context, GameController controller,             
List<ImageButton> buttons, List<GridLayout.LayoutParams> params) {
this.mParams = params;
this.mButtons = buttons;
this.mController = controller;
this.myAnimA = AnimationUtils.loadAnimation(context, R.anim.bounce_swap);
final ButtonBounceInterpolator mInterpolatorA = new ButtonBounceInterpolator(0.07, 20);
this.myAnimA.setInterpolator(mInterpolatorA);
//        this.myAnimA.setAnimationListener(new Animation.AnimationListener() {
     //            @Override
      //            public void onAnimationStart(Animation animation) {
      //                isAnimAFinish = false;
    ////                animation.setFillAfter(false);
    ////                animation.reset();
     //
    //            }
    //
     //            @Override
    //            public void onAnimationEnd(Animation animation) {
   ////                animation.reset();
   //                animation.cancel();
   //                isAnimAFinish = true;
   ////                synchronized (this){
   //
   ////                }
   //            }
   //
   //            @Override
   //            public void onAnimationRepeat(Animation animation) {
   //
   //            }
   //        });

@Override
public void onClick(final View v) {
int a = mButtons.indexOf((ImageButton) v);

int b = 0;
for (ImageButton button : mButtons) {
    if (!button.isEnabled()) {
        b = mButtons.indexOf(button);
    }
}

if (here check logic) {
    SoundPlay.playSoundPool(SoundPlay.TOUCH);

        if (isAnimAFinish){
   //                    v.post(new Runnable() {
   //                        @Override
   //                        public void run() {
   //                            synchronized (this){
                        v.startAnimation(myAnimA);
                        isAnimAFinish = false;
   //                            }
   //
   //                        }
   //                    });
        }
        if (v.getAnimation() != null){
            if (v.getAnimation().hasEnded()){
                Log.d("LOGGG", "hasEnded Anim");
                v.getAnimation().reset();
                v.getAnimation().cancel();
                v.clearAnimation();
                v.setAnimation(null);
                v.getAnimation().setAnimationListener(null);
                isAnimAFinish = true;

            }
        }


    Collections.swap(mButtons, a, b);
    mController.getGridLayout().removeAllViewsInLayout();
    mController.getGridLayout().removeAllViews();
    for (int i = 0; i < mButtons.size(); i++) { // i < 12
        ImageButton button = mButtons.get(i);
        mController.getGridLayout().addView(button, mParams.get(i));
    }

    mController.getGridLayout().invalidate();
} else {
    SoundPlay.playSoundPool(SoundPlay.TOUCH_BANG);
}
mController.checkSolution(mButtons);
}

3 个答案:

答案 0 :(得分:0)

如果您想在点击后隐藏按钮,则可以使用button.setVisibility(View.GONE)或者如果需要,点击后用户再也无法点击该按钮,您可以点击button.setClickable(false)后使用。我想我帮了你如果您有疑问,请问我。

答案 1 :(得分:0)

如何去除多余的纹理?也许你可以保留两个图像,一个带纹理,另一个没有。点击第一个带纹理后,隐藏它并显示第二个。

答案 2 :(得分:0)

事实证明,没有必要使用AnimationUtils.loadAnimation(),而是允许操纵对象的其他类,例如小部件。

示例动画弹跳按钮:

AnimatorSet as = new AnimatorSet ();
float y = view.getTranslationY (), distance = 20F;
as.playSequentially (
  ObjectAnimator.ofFloat (view, "translationY", y-distance), // animation 1
  ObjectAnimator.ofFloat (view, "translationY", y), // animation 2
  ObjectAnimator.ofFloat (view, "translationY", y - (distance / 2)), // animation 3
  ObjectAnimator.ofFloat (view, "translationY", y)); // animation 4
as.setDuration (600);
as.start ();

小部件的动画开始跳跃。我希望这对我有所帮助。