Pozdrawiam,Wykryj dotyk na mapie bitowej
Czy ktoś, w jaki sposób wykryciu, gdy użytkownik naciska na bitmapę, która znajduje się w obszarze roboczym?
Dzięki
Pozdrawiam,Wykryj dotyk na mapie bitowej
Czy ktoś, w jaki sposób wykryciu, gdy użytkownik naciska na bitmapę, która znajduje się w obszarze roboczym?
Dzięki
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.
Steve Google ma świetny artykuł i samouczek do obsługi interfejsu Imprezy @http://developer.android.com/guide/topics/ui/ui-events.html. To właśnie dało mi zaczęło i to było świetne dla mnie :-)
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;
}
chcę użyć kodu, ale zastanawiam się, jak uzyskać xiy bitmapy za. Czy możesz mi w tym pomóc? –
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'. –