您的位置:首页 > 其它

关于在自定义View中添加Button按钮以及实现点击事件

2017-11-01 08:46 1011 查看
环境:项目中一个自定义View需要添加一个Button并实现点击事件。

主要问题:可以添加Button控件但是目前能力有限无法实现OnClick监听

目前解决办法:

1、在dispatchDraw中绘制一个Button按钮(填充绘制矩形),在同样的区域绘制一个TextView并初始化,添加按钮文字。

private void initmArea() {
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
mTouchArea = new TextView(getContext());
......
mTouchArea.setText("要输入的文本");
addView(mTouchArea);
}


2、在onTouchEvent的ACTION_DOWN中添加判断:如果手指点击区域在绘制区域内,标志位(boolean)mTouch = true;

public boolean inArea(MotionEvent event, TextView mTouchArea) {
Rect rect = new Rect();
int[] location = new int[2];
mTouchArea.getLocationOnScreen(location);
rect.left = location[0];
rect.top = location[1];
rect.right = mTouchArea.getWidth() + location[0];
rect.bottom = mTouchArea.getHeight() + location[1];
if (rect.contains((int) event.getRawX(), (int) event.getRawY())) {
return true;
}else {
return false;
}
}


case MotionEvent.ACTION_DOWN:
......
// 判断触摸点是否在TextView中
if (inArea(event, mTouchArea)){
mTouch = true;
}
......
break;

case MotionEvent.ACTION_UP:
......
mTouch = false;
break;


3、在dispatchDraw/onDraw中实现响应事件

@Override
protected void dispatchDraw(Canvas canvas) {
......
if (mTouch) {
......
}
......
super.dispatchDraw(canvas);
}


以上,完成,仅做记录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐