gpt4 book ai didi

java - 当用户触摸 Canvas 时如何执行某些操作?协助检查边界

转载 作者:行者123 更新时间:2023-12-01 14:07:40 25 4
gpt4 key购买 nike

嗨,我在 Canvas 上画了一个位图,我想在用户触摸它时执行一些操作。

Bitmap backbutton = BitmapFactory.decodeResource(getResources(),
R.drawable.backbutton);
Paint paint = new Paint();

canvas.drawBitmap(backbutton, canvasWidth - 100, 0, paint);

我已尝试以下方法来解决该问题,但不起作用。如何正确检查入站情况?

public void onTouch(View view, MotionEvent event) {
if(backbutton.contains((int) (event.getX()), (int)(event.getY()), (int)(event.getX()+100),(int) (event.getY()+30))) {
Toast.makeText(view.getContext(), "this works", Toast.LENGTH_LONG).show();

}

}

但我似乎在 contains() 上做错了什么。有人可以帮我吗?

最佳答案

首先获取 Canvas 上位图的矩形。然后在onTouchEvent中,检查触摸的x,y是否包含在之前的矩形中。

添加示例:

public class MyView extends View {
Rect bitmapRect;
public MyView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas); //To change body of overridden methods use File | Settings | File Templates.

Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);

Rect source = new Rect(0,0,bitmap.getWidth(), bitmap.getHeight());
bitmapRect = new Rect(0,0, bitmap.getWidth(), bitmap.getHeight());

canvas.drawBitmap(bitmap, source, bitmapRect, new Paint());

}

@Override
public boolean onTouchEvent(MotionEvent event) {
int x = (int)event.getX();
int y = (int)event.getY();
if(null != bitmapRect && bitmapRect.contains(x,y)){
Toast.makeText(view.getContext(), "this works", Toast.LENGTH_LONG).show();
}


return super.onTouchEvent(event); //To change body of overridden methods use File | Settings | File Templates.
}

}

关于java - 当用户触摸 Canvas 时如何执行某些操作?协助检查边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18767322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com