Установив OnClickListener на этом представлении, все это будет доступно для кликов (но не ограничивается вашим растровым изображением). Чтобы проверить, щелкнул ли пользователь только растровое изображение, вы должны переопределить onTouchEvent (событие MotionEvent) и проверить, совпадают ли координаты касания с растровым изображением.
@Override
public boolean onTouchEvent(MotionEvent event)
{
float x = event.getX();
float y = event.getY();
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
//Check if the x and y position of the touch is inside the bitmap
if(x > bitmapXPosition && x < bitmapXPosition + bitmapWidth && y > bitmapYPosition && y < bitmapYPosition + bitmapHeight)
{
//Bitmap touched
}
return true;
}
return false;
}
Просто замените bitmapXPosition и bitmapYPosition с координатами, которые вы используете для рисования растрового изображения, и bitmapWidth и bitmapHeight с шириной и высотой вы используете, чтобы сделать это.
Также старайтесь не выделять память (создавать объекты) внутри метода onDraw() любого вида. Это плохо для исполнения.
EDIT
private Rect r;
private Paint paint;
Bitmap bitmap;
public TestRect(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
paint = new Paint();
paint.setColor(Color.BLUE);
r = new Rect();
bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher);
}
public TestRect(Context context, AttributeSet attrs) {
super(context, attrs);
paint = new Paint();
paint.setColor(Color.BLUE);
r = new Rect();
bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher);
}
public TestRect(Context context) {
super(context);
paint = new Paint();
paint.setColor(Color.BLUE);
r = new Rect();
bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher);
}
@Override
public void onDraw(Canvas c)
{
r.set(getWidth()/2, getHeight()/2, getWidth()/2 + 200, getHeight()/2 + 200);
//c.drawRect(r, paint);
c.drawBitmap(bitmap, null, r, paint);
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
float x = event.getX();
float y = event.getY();
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
//Check if the x and y position of the touch is inside the bitmap
if(x > getWidth()/2 && x < getWidth()/2 + 200 && y > getHeight()/2 && y < getHeight()/2 + 200)
{
Log.e("TOUCHED", "X: " + x + " Y: " + y);
//Bitmap touched
}
return true;
}
return false;
}
Обращая растровое изображение с помощью Rect как ваших координат, вы можете проверить, если сенсорный внутри растрового изображения или нет. Кроме того, вместо того, что большой и уродливый «если» заявление, вы можете использовать
if(r.contains(x, y))
{
//BITMAP TOUCHED
}
ли вы имеете в виду, как HTML-MAP? -> http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_areamap – Daniel
http://stackoverflow.com/questions/10710579/make-clickable-region-in-canvas-to-change-image или http://stackoverflow.com/questions/16451656/make-a-javascript-canvas-rectangle-clickable – Daniel
Нет аномального события щелчка на растровом изображении. В основном, растровое изображение/представление должно быть доступно для кликов. – Prashanth