【发布时间】:2014-01-23 02:41:29
【问题描述】:
在我的活动中,我显示了一个相机预览和一个按钮(一个看起来像按钮的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);
}
}
【问题讨论】:
标签: android events view android-framelayout