анимация кадров Android в gridview - PullRequest
0 голосов
/ 09 декабря 2011

В качестве тестового проекта я сделал одну из этих игр с номерами для 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);                                           
    }       

};

1 Ответ

0 голосов
/ 10 декабря 2011

Вы делаете новый обработчик для каждого клика? Это должно быть больно ... Как насчет сделать только 1 для каждой кнопки или что-то еще умнее (нужно больше кода, чтобы прийти с другими предложениями).

...