canvas.drawBitmap () занимает больше времени, чтобы нарисовать растровое изображение в первый раз, пока вы растягиваете растровое изображение - PullRequest
4 голосов
/ 08 октября 2011

Я использую canvas.drawBitmap (Bitmap, src, dst, null) для анимации. Я использую 1 мозаичное изображение для анимации, каждое из которых содержит более 100 изображений для создания анимации. Я положил на CLickListner для запуска анимации. как я могу мгновенно отвечать на анимации на onClick?

Я использовал логику для анимации по следующей ссылке. http://warriormill.com/2009/10/adroid-game-development-part-1-gameloop-sprites/

@Override
    public void draw(Canvas canvas) {
        try
        {
            FrameInfo frameinfo= animations.get(currentAnimation).sequence.get(currentFrame);
            Rect rclip = frameinfo.rect;
            Rect dest = new Rect(this.getXpos(), getYpos(), getXpos() + (rclip.right - rclip.left),
                getYpos() + (rclip.bottom - rclip.top));
            if(cf!=null)
            {
                //color filter code here

            }
            canvas.drawBitmap(tileSheet, rclip, dest, null);
            update(); //after drawing update the frame counter
        }
        catch (Exception e) 
        {
            Log.e("ERROR", "ERROR IN SPRITE TILE  CODE:"+e.toString()+e.getStackTrace().toString());
        }

    }

1 Ответ

1 голос
/ 12 октября 2011

Загрузка ресурсов занимает значительное время (они сжимаются внутри вашего APK ), настолько, что вы должны предварительно загрузить их, а не загружать их точно в срок. Метод draw() - это последнее место, где выполняется любая своевременная обработка ресурсов. Вы также должны делать это в фоновом режиме, чтобы избежать проблем ANR. AsyncTask реализация работает просто замечательно! Вы также должны быть очень осторожны с соответствием DPI, или drawBitmap() будет масштабировать ваши растровые изображения, что заметно снизит частоту кадров. Если у вас есть навык, используйте OpenGL с 2D текстурным сопоставлением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...