对于我需要开发的应用程序,我需要能够从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