В моей деятельности я показываю предварительный просмотр камеры и кнопку (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
Или, переопределите onDraw of CameraButtonView и сделайте canvas.drawColor (Color.Magenta) ;. Затем посмотрите, заполняет ли он весь экран. – beplaya
Нет, это не тот же цвет, что и у RED, и я четко вижу, что он занимает часть экрана внизу. – phadaphunk