Greets,Phát hiện cảm ứng trên bitmap
Có ai làm cách nào tôi phát hiện khi người dùng nhấn vào một ảnh bitmap nằm trong canvas không?
Cảm ơn
Greets,Phát hiện cảm ứng trên bitmap
Có ai làm cách nào tôi phát hiện khi người dùng nhấn vào một ảnh bitmap nằm trong canvas không?
Cảm ơn
Bạn nên làm việc với một cái gì đó giống như vậy:
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;
}
}
Đó là một sự khởi đầu, nhưng bạn cần phải xử lý case MotionEvent.ACTION_MOVE
và case MotionEvent.ACTION_UP
để chắc chắn rằng bạn xử lý đúng cách với đầu vào của người dùng. Phương pháp onTouchEvent
được gọi mỗi khi người dùng: đặt ngón tay xuống, di chuyển ngón tay đã có trên màn hình hoặc nhấc ngón tay lên. Mỗi lần sự kiện này mang tọa độ X và Y của vị trí của ngón tay. Ví dụ, nếu bạn muốn kiểm tra ai đó đang khai thác bên trong bitmap của bạn, bạn nên làm một cái gì đó như thiết lập một boolean rằng các liên lạc bắt đầu bên trong bitmap trên ACTION_DOWN, và sau đó kiểm tra ACTION_UP rằng bạn vẫn còn bên trong bitmap.
Steve, Google có một bài viết tuyệt vời và hướng dẫn để xử lý UI kiện @http://developer.android.com/guide/topics/ui/ui-events.html. Đây là những gì tôi đã bắt đầu và nó là tuyệt vời đối với tôi :-)
Điều này sẽ phát hiện một liên lạc và kiểm tra xem nó có trong suốt không. Bạn cần điều này nếu bitmap của bạn không phải là hình chữ nhật. myBitmap chỉ là một lớp chứa đơn giản mà tôi sử dụng.
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;
}
Đây là trên cảm ứng mã cho đầy đủ
@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;
}
Tôi muốn sử dụng mã của bạn nhưng thắc mắc về làm thế nào để có được x và y của bitmap. Bạn có thể giúp tôi không? –
Nếu bạn đang vẽ bitmap của mình vào canvas, thì bạn phải biết giá trị X và Y của nó khi bạn phải chuyển những giá trị đó làm đối số cho phương thức 'canvas.drawBitmap'. –