2014-02-11 4 views
0

Я хочу растровое изображение, чтобы следовать за моим пальцем. Но когда я использую MotionEvent.ACTION_MOVE, битмап отстает. Есть ли способ, которым битмап следует мгновенно (или почти мгновенно) пальцем?Растровое изображение, которое следует за вашим пальцем мгновенно

public boolean onTouch(View v, MotionEvent me) 
{ 
    // TODO Auto-generated method stub 
    switch(me.getAction()) 
    { 
    case MotionEvent.ACTION_DOWN: 
     if(me.getX() > player.get_RectXPos() && me.getX() < player.get_RectXPos() + player.get_Width() && 
      me.getY() > player.get_RectYPos() && me.getY() < player.get_RectYPos() + player.get_Height()) 
     { 
      isDown = true; 
     } 
     break; 
    case MotionEvent.ACTION_UP: 
     isDown = false; 
     break; 
    case MotionEvent.ACTION_MOVE: 
     if(isDown == true) 
     { 
      player.set_xPos(me.getX()); 
      player.set_yPos(me.getY()); 
     } 

     break; 
    } 
    return true; 
} 

Я думаю, что вы попросили для этой части:

void render(Canvas canvas) 
{ 
    m_Src = new Rect(0, 0, m_RectWidth, m_RectHeight); 
    m_Dst = new Rect(m_RectX, m_RectY, m_RectX + m_RectWidth, m_RectY + m_RectHeight); 
    canvas.drawBitmap(m_Bitmap, m_Src, m_Dst, null); 
} 
+0

вы можете разместить свой код? – Niko

+0

Хорошо, я его отредактировал – user3297952

+0

Вы также можете опубликовать функцию рисования растрового изображения? – Niko

ответ

0
void render(Canvas canvas) 
{ 
m_Src = new Rect(0, 0, m_RectWidth, m_RectHeight); 
m_Dst = new Rect(m_RectX, m_RectY, m_RectX + m_RectWidth, m_RectY + m_RectHeight); 
canvas.drawBitmap(m_Bitmap, m_Src, m_Dst, null); 
} 

Здесь вы каждый день выделяете 2 Rect объектов. Вы должны инициализировать их только один раз и использовать Rect.set, чтобы изменить их значения.

Также, если ваш размер Bitmap не должен изменяться, вы можете использовать public void drawBitmap (Bitmap bitmap, float left, float top, Paint paint), так как этот метод не делает никакого масштабирования/перевода на Bitmap и должен быть более эффективным.

0

Вы должны сделать некоторые ненужные работы по вашему методу onTouch. Потому что он не должен быть лаги, если вы только меняете свое положение.

Редактировать: Вы можете сохранить Rect m_Src и m_Dst и просто изменить их координаты в рендере. Это позволит сэкономить много работы для системы и сбора мусора.

+0

На самом деле это не ответ, вы можете прокомментировать вопрос с OP – Niko

+0

Это правда .. Я вроде как новый, здесь не знал sry – Arnaud

+1

Ну, вы не можете узнать, не попробовать ли вы! :) – Niko

0

Я думаю, что обработчик «onTouch» прерывает каждый рисунок ...

Ваша рутина «OnDraw» должны быть расположены в правильном потоке (возможно AsyncTask мог бы сделать эту работу тоже). Затем вам нужно переслать координаты x, y вашего пальца в поток gui.

Тип «Thread Gui Android» в google для всестороннего примера :)