我正在开发一款益智游戏。问题的实质是这个。我在(ImageButton)
集合中有按钮ArrayList mButtons
,每个按钮都有监听器,我为听众指定了一个按钮动画。当我点击按钮时,动画效果很好,但是!如果我回到那个按钮,我不能移动它而不按它!好像最重要的是纹理叠加了!按下其他按钮。我检查了不同的方式:
v.getAnimation().reset();
v.getAnimation().cancel();
v.clearAnimation();
v.setAnimation(null);
v.getAnimation().setAnimationListener(null);
没有帮助!如果有任何提示并且您遇到了同样的问题,请回复!
了解的图片:
使代码更清晰的代码:
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);
}
答案 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 ();
小部件的动画开始跳跃。我希望这对我有所帮助。