您可以創建自定義視圖以下列方式工作:
在
onDraw()
油漆
- 每3位圖代表單個按鈕(其中2個其他按鈕是透明的),
- in
onTouch()
檢查觸摸像素對t軟管的位圖,看看哪個位圖被點擊
代碼片段:
public class DrawingBoard extends View {
Bitmap mBitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.button1);
Bitmap mBitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.button2);
Bitmap mBitmap3 = BitmapFactory.decodeResource(getResources(), R.drawable.button3);
public DrawingBoard (Context context) {
// TODO Auto-generated constructor stub
super (context);
}
@Override
protected void onDraw (Canvas canvas) {
canvas.drawBitmap(mBitmap1, 0, 0, null);
canvas.drawBitmap(mBitmap2, 0, 0, null);
canvas.drawBitmap(mBitmap3, 0, 0, null);
}
@Override
public boolean onTouchEvent (MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN :
int xx = (int)event.getX();
int yy = (int)event.getY();
if(Color.alpha(mBitmap1.getPixel(xx,yy)) != 0) {
// button1 pressed
}
else if(Color.alpha(mBitmap2.getPixel(xx,yy)) != 0) {
// button2 pressed
}
else if(Color.alpha(mBitmap3.getPixel(xx,yy)) != 0) {
// button3 pressed
}
break;
}
return true;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
// bitmaps are assumed to be of the same size
setMeasuredDimension(mBitmap1.getWidth(),mBitmap1.getHeight());
}
}
我沒有測試的代碼,它可能有誤差。
一個變體 - 你可以創建一個虛擬位圖存儲整個圖像像素的「點擊代碼」。您可以從原始圖片創建它,但用id替換像素以檢測哪個區域被觸摸,所有其他像素都爲空(0x0)。所以getPixel()將返回一個按鈕的ID。
我認爲你是對的,最好不要使用按鈕 - 它應該是你自己的定製控件,用於所有3個項目和處理觸摸事件以決定哪個按下。 – Mixaz 2015-04-05 09:17:58
代碼示例:http://stackoverflow.com/questions/6756806/android-drawing-on-touch-event – Mixaz 2015-04-05 09:21:01
謝謝你的回覆!所以它看起來。他正在加載位圖,使用onDraw繪製它並使用onTouchEvent來處理觸摸事件。所以實質上,位圖周圍的邊界框會跟隨位圖中的像素?或者它是一個矩形邊界框,並且具有透明度的區域也將是觸發觸摸事件的區域? – 2015-04-05 10:09:59