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

来源:互联网 发布:mac dance with me唇釉 编辑:程序博客网 时间:2024/06/05 04:01

环境:项目中一个自定义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);    }

以上,完成,仅做记录。

阅读全文
0 0