カスタムビューにButtonボタンを追加したり、クリックイベントを実装したりすることについて
3679 ワード
環境:プロジェクト内のカスタムビューにButtonを追加し、クリックイベントを実装する必要があります.主な問題:Buttonコントロールを追加できますが、現在の能力は限られています.OnClickリスニングは実現できません.
現在の解決策:1、dispatchDrawにButtonボタン(長方形を塗りつぶす)を描画し、同じ領域にTextViewを描画して初期化し、ボタン文字を追加します.
2、onTouchEventでのACTION_DOWNに判定を追加:指クリック領域が描画領域内にある場合、フラグビット(boolean)mTouch=true;
3、dispatchDraw/onDrawで応答イベントを実現する
以上、完了、記録のみします.
現在の解決策: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);
}
以上、完了、記録のみします.