问候,
有人知道如何检测用户在画布内按下位图的操作吗?
谢谢。
你应该按照以下方式进行操作:
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;
}
}
这是一个好的开始,但你需要处理MotionEvent.ACTION_MOVE
和MotionEvent.ACTION_UP
以确保你正确地处理用户输入。每次用户按下手指、移动已经在屏幕上的手指或抬起手指时,都会调用onTouchEvent
方法。每次事件都携带着手指所在的X和Y坐标。例如,如果你想检查某人是否在你的位图内点击了一下,你应该在ACTION_DOWN时设置一个布尔值来表示触摸始于位图内,并在ACTION_UP时检查是否仍在位图内。
Steve,谷歌有一篇关于处理UI事件的很棒的文章和教程@ http://developer.android.com/guide/topics/ui/ui-events.html。这是让我入门的东西,对我很有帮助 :-)
这将检测触摸并检查它是否不透明。如果您的位图不是矩形,则需要此功能。myBitmap只是我使用的一个简单容器类。
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;
}
这是完整性的触摸代码
@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;
}
canvas.drawBitmap
方法。 - Steve Haley