私が開発する必要があるアプリの場合、ユーザーが警告ダイアログをポップアップする必要があるときselect one view
から、要件に応じてオプションを選択できるようにする必要があります。それらは、ビューを削除し、その特定のビューの背景色を変更します。私は別のカスタムビューを作成しています(カスタムビューはビューから拡張されています)、それにはタッチリスナーがあります。これらのビューをレイアウト (RelativeLayout) に動的にアタッチします。レイアウトに 3 つのビューがあるとします。ViewGroup
long press
view
私の質問:
- レイアウトで使用可能なビューのリストから 1 つのビューを選択したいと考えています。
- 親ビュー全体を占有するのではなく、カスタム ビューのサイズを制限する方法。
私はこのような問題に直面しています:カスタムビューの背景色を設定すると、この画像を見てください. そのため、親の背景色を表示できません。カスタムビューのサイズに問題があり、完全な親ビューを占有するのではなく、カスタムビューのサイズを制限できません。カスタムビューの外に触れても、カスタムビューのタッチリスナーがトリガーされました。これらのタッチリスナーをカスタムビューのみに制限したい..
.
主な要件: 最後に、この下の画像のようにしたいと考えています。これで、カスタム ビューをレイアウトに追加できますが、選択したビューを削除できません。レイアウトからビューのいずれかを長押しすると、2 つのボタンを含む 1 つの警告ダイアログがポップアップ表示されます。選択したビューを選択すると、別の選択の背景色の変更のために削除する必要があります。
RelaventCode:このようにレイアウトにビューを追加しています。
findViewById(R.id.line).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
CustomView drawView = new CustomView(context);
frame.addView(drawView);
}
});
これはカスタムビューです:
public class CustomView extends View {
public CustomView (Context context) {
super(context);
init();
}
private void init() {
Paint paint = new Paint();
Paint pai = new Paint();
Path path = new Path();
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(5);
path.lineTo(50, 100);
}
@Override
public void onDraw(Canvas canvas) {
path.setFillType(Path.FillType.EVEN_ODD);
path.moveTo(Top_Point.x, Top_Point.y);
path.lineTo(Right_Point.x, Right_Point.y);
path.lineTo(Left_Point.x, Left_Point.y);
path.lineTo(Top_Point.x, Top_Point.y);
path.close();
canvas.drawPath(path, Inner_Paint);
canvas.drawLine(Top_Point.x, Top_Point.y, Right_Point.x, Right_Point.y,
Lines_Paint);
canvas.drawLine(Right_Point.x, Right_Point.y, Left_Point.x,
Left_Point.y, Lines_Paint);
canvas.drawLine(Left_Point.x, Left_Point.y, Top_Point.x, Top_Point.y,
Lines_Paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
PointF NewP = new PointF(0, 0);
NewP.x = event.getX();
NewP.y = event.getY();
if (TopTouchArea.contains(event.getX(), event.getY())) {
currentTouch = TOUCH_TOP;
} else if (RightTouchArea.contains(event.getX(), event.getY())) {
currentTouch = TOUCH_RIGHT;
} else if (LeftTouchArea.contains(event.getX(), event.getY())) {
currentTouch = TOUCH_LEFT;
} else if (a) {
Translate_Point.x = event.getX();
Translate_Point.y = event.getY();
currentTouch = Inner_Touch;
return true; // Return false if user touches none of the
// corners
} else {
return false;
}
return true;
case MotionEvent.ACTION_MOVE:
switch (currentTouch) {
case TOUCH_TOP:
/* ------ */
case TOUCH_RIGHT:
/* ----- */
invalidate();
return true;
case TOUCH_LEFT:
/* ------ */
invalidate();
return true;
case Inner_Touch:
/* ------ */
invalidate();
return true;
}
return false;
case MotionEvent.ACTION_UP:
switch (currentTouch) {
case TOUCH_TOP:
/* ----- */
return true;
case TOUCH_RIGHT:
/* ----- */
return true;
case TOUCH_LEFT:
/* ----- */
return true;
case Inner_Touch:
/* ----- */
invalidate();
return true;
}
return false;
}
return super.onTouchEvent(event);
}