2

我有下一个问题:

我有一个活动,我想尝试添加按钮,这是我的 onCreate 方法

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    DrawView drawView = new DrawView(this);
    setContentView(drawView);

    context = this;

    drawView.requestFocus();

}

这是 DrawView 类

公共类 DrawView 扩展视图实现 OnTouchListener {

public static final String TAG = "DrawView";

private List<List<Point>> listaPuntos = null;
private List<Paint> listaPaints = null;

private int paintActual = 0;

public DrawView(Context context) {
    super(context);
    setFocusable(true);
    setFocusableInTouchMode(true);

    listaPaints = new ArrayList<Paint>();
    listaPuntos = new ArrayList<List<Point>>();

    this.setOnTouchListener(this);
    this.setBackgroundColor(Color.WHITE);

    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(2);
    paint.setColor(Color.BLACK);
    listaPaints.add(paint);

}

@Override
public void onDraw(Canvas canvas) {

    for(int i=0; i<listaPaints.size(); i++){
        Paint paint = listaPaints.get(i);
        Point punto = null;
        if(listaPuntos.size()!=0 && listaPuntos.size()>i){
            List<Point> puntos = listaPuntos.get(i);
            for (Point point : puntos) {

                if(punto == null){
                    punto = point;
                }
                canvas.drawLine(point.x, point.y, punto.x, punto.y, paint);
                punto = point;
            }
        }
    }
}

@Override
public boolean onTouch(View view, MotionEvent event) {

    if(event.getAction() != MotionEvent.ACTION_UP){
        Point point = new Point();
        point.x = event.getX();
        point.y = event.getY();
        point.paintPunto = paintActual;
        if(listaPuntos.size()<=paintActual){
            listaPuntos.add(new ArrayList<Point>());
        }
        listaPuntos.get(paintActual).add(point);
        invalidate();
        return true;
    }else{
        paintActual++;
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(2);
        paint.setColor(Color.BLACK);
        listaPaints.add(paint);
    }
    return super.onTouchEvent(event);
}

任何人都知道如何将按钮添加到此活动?我想添加一个按钮来执行操作,但我完全不能!

非常感谢你的帮助。

4

3 回答 3

4

只有 ViewGroup(LinearLayout,RelativeLayout) 可以有孩子。你正在做的是你将 DrawView 作为你的活动的内容视图,它不是一个容器(ViewGroup),因此你不能向它添加任何其他视图(子) .
您的问题的解决方案是:

  • 创建一个以 ViewGroup 作为父级(LinearLayout、RelativeLayout 等)的 xml 布局文件,其中包含其他视图或为空。
  • 创建一个 DrawView 的实例。
  • 将此实例添加到 ViewGroup
  • 如果要动态添加视图,类似地创建其他视图的实例并将它们添加到父视图。这是示例代码:

假设以 id 为父级的 LinearLayout 是 xml 布局的父级,则:

LinearLayout parent = (LinearLayout)findViewById(R.id.parent);
//creating instance of custom view
DrawView drawView = new DrawView(this);
//adding custom view as the first child
parent.addView(drawView,0);
//adding button dynamically
Button btn = new Button(this);
btn.setText("Ok");
parent.addView(btn,1);
于 2012-09-04T10:56:50.720 回答
2

您应该制作一个 xml 文件,并且必须像 setContentView (R.layout.filename) 一样使用它,并且因为您正在尝试将其他页面内容合并到此 xml,所以您现在应该包含布局,您可以使用此页面 id 并可以实现您的任何职能。如果您在其他 xml 中添加按钮,然后将其包含在您想要的新 xml 中,那就更好了。这是一个正确的方法......希望你明白我的意思。否则你可以在 developer.android.com 中搜索

于 2012-09-04T11:17:50.880 回答
1

您应该创建一个 XML 布局文件,您将通过 onCreate() 中的 setContentView() 调用与您的活动相关联。

您的布局将包含您自己的视图、按钮以及您喜欢的任何内容。

于 2012-09-04T10:43:21.850 回答