#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 текстур.