В качестве тестового проекта я сделал одну из этих игр с номерами для Android и для этого сделал сетку с примерно 20 кнопками. при нажатии одной из этих кнопок запускается анимация. это работает нормально в первые несколько раз, но потом становится медленнее и начинает заикаться.
Я предполагаю, что это как-то связано с ресурсами анимации, поскольку я использую его несколько раз в одно и то же время, но я не знаю, как решить проблему.
так как я хочу удалить кнопку из сетки, когда анимация заканчивается, я обернул класс AnimationDrawable, чтобы иметь возможность установить обработчик, который вызывается в конце анимации.
public void animate() {
setBackgroundResource(R.drawable.myanimation);
final AnimationDrawable anim = (AnimationDrawable) getBackground();
final BetterAnimationDrawable better = new BetterAnimationDrawable(anim);
better.setEndHandler(new EndHandler());
better.start();
}
спасибо заранее
UPDATE:
@warpzit: спасибо за ваш ответ. это не обработчик для нажатия кнопки earch, а обработчик для каждой кнопки. метод onclick отключает кнопку (поэтому ее можно нажать только один раз), а затем вызывает animate (). на самом деле, я могу опубликовать не так много кода, адаптеры gridView getView выглядит так:
@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
final MySpecialButton sb = new MySpecialButton(getApplicationContext());
sb.setOnClickListener(new SpecialButtonClickListener());
return nv;
}
и упомянутый обработчик выглядит следующим образом (фактически он не удаляет кнопку, а меняет фоновый рисунок, извините за это):
private class MySpecialHandler extends Handler {
public MySpecialHandler() {
}
@Override
public void handleMessage(final Message msg) {
super.handleMessage(msg);
final Bitmap bitmapMask = BitmapFactory.decodeResource(getResources(), R.drawable.aspecialmask);
final BitmapDrawable d = new BitmapDrawable(bitmapMask);
d.setColorFilter([someColor], Mode.MULTIPLY);
setBackgroundDrawable(d);
}
};