2014-01-23 55 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

我的猜測是對的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

相關問題