2010-03-15 16 views

Odpowiedz

28

powinien pracować z czymś tak:

public boolean onTouchEvent(MotionEvent event){ 
    int action = event.getAction(); 
    int x = event.getX() // or getRawX(); 
    int y = event.getY(); 

    switch(action){ 
    case MotionEvent.ACTION_DOWN: 
     if (x >= xOfYourBitmap && x < (xOfYourBitmap + yourBitmap.getWidth()) 
       && y >= yOfYourBitmap && y < (yOfYourBitmap + yourBitmap.getHeight())) { 
      //tada, if this is true, you've started your click inside your bitmap 
     } 
     break; 
    } 
} 

To początek, ale trzeba obsłużyć case MotionEvent.ACTION_MOVE i case MotionEvent.ACTION_UP aby upewnić się, właściwie radzić sobie z wprowadzaniem danych przez użytkownika. Metoda onTouchEvent jest wywoływana za każdym razem, gdy użytkownik: kładzie palec w dół, przesuwa palec już na ekranie lub podnosi palec. Za każdym razem, gdy zdarzenie przenosi współrzędne X i Y miejsca, w którym znajduje się palec. Na przykład, jeśli chcesz sprawdzić, czy ktoś dotyka wewnątrz mapy bitowej, powinieneś zrobić coś takiego, jak ustawić wartość logiczną, której dotknięcie rozpoczęło się w bitmapie w ACTION_DOWN, a następnie sprawdzić ACTION_UP, czy wciąż znajdujesz się w bitmapie.

+0

chcę użyć kodu, ale zastanawiam się, jak uzyskać xiy bitmapy za. Czy możesz mi w tym pomóc? –

+0

Jeśli rysujesz mapy bitowe na płótnie, musisz znać wartości X i Y, ponieważ musisz przekazać je jako argument do metody 'canvas.drawBitmap'. –

0

Spowoduje to wykrycie dotyku i sprawdzenie, czy nie jest przezroczysty. Potrzebujesz tego, jeśli twoje bitmapy nie są prostokątami. myBitmap to prosta klasa kontenerów, z której korzystam.

private boolean clickOnBitmap(MyBitmap myBitmap, MotionEvent event) { 
    float xEnd = myBitmap.originX() + myBitmap.width(); 
    float yEnd = myBitmap.originY() + myBitmap.height();; 


    if ((event.getX() >= myBitmap.originX() && event.getX() <= xEnd) 
    && (event.getY() >= myBitmap.originY() && event.getY() <= yEnd)) { 
     int pixX = (int) (event.getX() - myBitmap.originX()); 
     int pixY = (int) (event.getY() - myBitmap.originY()); 
     if (!(myBitmap.getBitmap().getPixel(pixX, pixY) == 0)) { 
      return true; 
     } else { 
      return false; 
     } 
    } 
    return false; 
} 

Jest to kod na dotyk dla kompletności

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      if (clickOnBitmap(dog, event)) { 
       Toast.makeText(getContext(), "dog", Toast.LENGTH_SHORT).show(); 
      } else if (clickOnBitmap(mouse,event)) { 
       Toast.makeText(getContext(), "mouse", Toast.LENGTH_SHORT).show(); 
      } 
     return true; 
     case MotionEvent.ACTION_OUTSIDE: 
     case MotionEvent.ACTION_UP: 
     case MotionEvent.ACTION_CANCEL: 
      return true; 
    } 
    return false; 
} 
Powiązane problemy