2014-01-23 4 views
0

제 활동에서 카메라 미리보기와 그 위에 그려지는 버튼 (view은 버튼 모양)을 표시합니다. 문제는 그 뷰에서 클릭 리스너를 설정하면 (카메라 미리보기에서도) 화면에서 클릭하는 위치에 관계없이 click 이벤트가 발생한다는 것입니다. 이 경우 수신기가 올바르게 설정되지 않는 이유는 무엇입니까?

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

내 생각 엔이 CameraButtonView에서의 LayoutParams 버튼이 실제로 어떻게 생겼는지보다 큰 것입니다. 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

또는 CameraButtonView의 onDraw를 재정 의하여 canvas.drawColor (Color.Magenta);를 수행하십시오. 그런 다음 화면 전체를 채우고 있는지 확인하십시오. – beplaya

+0

아니, 이미 빨간 색과 같지 않아서 화면의 일부가 바닥에있는 것을 분명히 볼 수 있습니다. – phadaphunk

관련 문제