User1204501
User1204501

Reputation: 831

How to do something when user touches canvas? Assistance to check bounds

Hi I drew a bitmap on the canvas and I wanted to do something when the user touches it.

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

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

I have tried the following to solve the problem but it isnt working. How do I check for inbounds properly?

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();

    }

}

But I seem to be doing something wrong with the contains(). Can someone help me out here please?

Upvotes: 0

Views: 80

Answers (1)

Isaiah
Isaiah

Reputation: 442

First get the rect of the bitmap on the canvas. then in the onTouchEvent, check the touched x, y is contained in the rect before.

Added Example:

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.
}

}

Upvotes: 1

Related Questions