0
在我的活動中,我顯示了一個相機預覽和一個按鈕(看起來像一個按鈕的view
),我畫了它。問題是,當我在該視圖上設置點擊監聽器時,無論我單擊屏幕上的哪個位置(即使在相機預覽中),單擊事件也會被觸發。爲什麼在這種情況下沒有正確設置聽衆
這是代碼:
FrameLayout preview = (FrameLayout) findViewById(id.camera_preview);
preview.addView(mCameraPreview);
CameraButtonView cameraButton = new CameraButtonView(getBaseContext());
preview.addView(cameraButton);
cameraButton.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
Intent intent = new Intent(CameraTestActivity.this, MenuActivity.class);
startActivity(intent);
finish();
}
});
所以FrameLayout
是相機預覽。 CameraButtonView
是繪製在它上面的視圖(底部的某個地方......它不佔用太多空間),並且偵聽器真的被設置在視圖上。
爲什麼當我點擊FrameLayout
上的任何地方時,我的事件被觸發?另外,我如何修復它,以便只有按鈕訂閱了該事件。
相機按鈕查看:
public class CameraButtonView extends View
{
Paint buttonPaint = new Paint();
Paint textPaint = new Paint();
SizeF size = new SizeF(500, 125);
public CameraButtonView(Context context)
{
super(context);
buttonPaint.setColor(Color.RED);
textPaint.setColor(Color.BLACK);
textPaint.setTextSize(35);
}
@Override
public void onDraw(Canvas canvas)
{
RectF surface = RectangleHelper.create(0, 0, canvas.getWidth(), canvas.getHeight());
PointF alignedPoint = RectangleHelper.align(surface, size, ContentAlignment.BottomCenter, AlignmentType.Internal);
RectF content = RectangleHelper.create(alignedPoint, size);
Rect textRectangle = new Rect();
String buttonText = "Click to take a pic.";
buttonPaint.getTextBounds(buttonText, 1, buttonText.length(), textRectangle);
PointF alignedTextPoint = RectangleHelper.align(content, new SizeF(textRectangle.width(), textRectangle.height()), ContentAlignment.MiddleLeft, AlignmentType.Internal);
canvas.drawRect(content, buttonPaint);
canvas.drawText(buttonText, alignedTextPoint.x, alignedTextPoint.y, textPaint);
}
}
我給的代碼。等一下。 – phadaphunk
或者,重寫CameraButtonView的onDraw並執行canvas.drawColor(Color.Magenta);.然後看看它是否填滿了整個屏幕。 – beplaya
不,它的顏色已經不是紅色,而且我可以清楚地看到,它僅佔用底部屏幕的某個部分。 – phadaphunk