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

#android #canvas #bitmap

#Android #холст #растровое изображение

Вопрос:

Я использую canvas.drawBitmap(Bitmap, src, dst, null) для анимации. Я использую 1 плиточное изображение для анимации, каждое плиточное изображение содержит более 100 изображений для создания анимации. Я включил onCLickListner для запуска анимации. как я могу получить мгновенный ответ на анимацию при 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. Если проблема возникает только с первым щелчком мыши, вы можете нарисовать растровое изображение в oncreate, а затем просто обновить свой вид при первом щелчке с помощью растрового изображения, которое вы уже нарисовали. Также полезно использовать рабочий поток для рисования.

Ответ №1:

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