對於我需要開發的應用程序,我需要能夠從select one view
當view
上的用戶long press
必須彈出一個警告對話框,從那我將根據要求選擇選項,這些都是刪除視圖和更改背景該特定視圖的顏色。我創建了不同的自定義視圖(自定義視圖從視圖延伸),它有Touchlistener的。將這些視圖動態添加到佈局(RelativeLayout)。讓我們假設我的佈局有3個視圖。如何從視圖組中選擇一個特定視圖?
我的問題:
- 我要選擇從可用視圖的對佈局列表中選擇一個視圖。
- 如何限制自定義視圖大小而不是佔用完整的父視圖。
我現在面臨的問題是這樣的:看這個圖片,如果我設置自定義背景色查看它看起來就像這樣,其實我是爲佈局背景顏色設爲白色這裏自定義視圖佔據整個屏幕。所以,無法看到父母的背景顏色。這裏customView的大小有問題,無法限制customview的大小而不是佔用完整的父視圖。即使我觸摸自定義視圖之外,自定義視圖的觸摸監聽器也會觸發。我想限制那些觸摸監聽器僅限於我的自定義視圖。
。
主要要求: 最後我想實現這樣下面的圖片,現在我能夠加入更多的自定義視圖的佈局,但無法刪除選定的一個。當我長時間按下佈局中的任何一個視圖時,它應該彈出一個具有兩個按鈕的警報對話框,如果我選擇了一個選定的視圖,應該刪除另一個選擇背景顏色的更改。
RelaventCode:我添加視圖佈局是這樣的。
findViewById(R.id.line).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
CustomView drawView = new CustomView(context);
frame.addView(drawView);
}
});
,這是customview:
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);
}
我們不能在沒有看到相關代碼的情況下爲您提供幫助。也許有人會_guess_發生了什麼,但也許不是... – Sam 2012-08-02 17:53:15
@Sam我已更新我的問題與相關代碼。如果它不清楚讓我知道。 – 2012-08-02 18:00:04