2014-01-23 3 views
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); 
} 
} 

ответ

1

Я думаю, что layoutparams на CameraButtonView больше, чем то, что кнопка на самом деле выглядит. Попробуйте установить layoutparms в новые LayoutParams (50,50) и посмотреть, помогает ли это. Тогда вам нужно будет тренироваться, как его размер относительно.

Не видя кода для CameraButtonView, я не могу дать окончательного ответа.

UPDATE (рабочий):

CameraButtonView cameraButton = new CameraButtonView(getBaseContext()); 
    FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(500, 125); 
    layoutParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; 
    cameraButton.setLayoutParams(layoutParams); 
    preview.addView(cameraButton); 
+0

Я дам код. Подожди секунду. – phadaphunk

+0

Или, переопределите onDraw of CameraButtonView и сделайте canvas.drawColor (Color.Magenta) ;. Затем посмотрите, заполняет ли он весь экран. – beplaya

+0

Нет, это не тот же цвет, что и у RED, и я четко вижу, что он занимает часть экрана внизу. – phadaphunk

Смежные вопросы