1

我正在做一个油漆应用程序,其中我已经有一个按钮。但我想添加另一个按钮。当我这样做时,它与上一个按钮重叠。

我对 LayoutParams 有点陌生,所以我需要你的指导。请检查我正在处理的代码:

  public class MyTouchEventView extends View {

private Paint paint = new Paint();
private Path path = new Path();
private Paint circlePaint = new Paint();
private Path circlePath = new Path();

public Button btnReset;
public Button btnSave;
public LayoutParams params;
public LayoutParams params2;

@SuppressWarnings("deprecation")
public MyTouchEventView(Context context) {
    super(context);

    paint.setAntiAlias(true);
    paint.setColor(Color.GREEN);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeJoin(Paint.Join.ROUND);
    paint.setStrokeWidth(15f);

    circlePaint.setAntiAlias(true);
    circlePaint.setColor(Color.BLUE);
    circlePaint.setStyle(Paint.Style.STROKE);
    circlePaint.setStrokeJoin(Paint.Join.MITER);
    circlePaint.setStrokeWidth(4f);


    btnReset = new Button(context);
    btnReset.setText("Clear Screen");
    btnSave = new Button(context);
    btnSave.setText("Save Image");

    params = new LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT);
    params2 = new LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT);
    btnReset.setLayoutParams(params);
            btnSave.setLayoutParams(params);



    btnSave.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // resets the screen
            path.reset();
            // Calls the onDraw() method
            postInvalidate();
        }
    });

    btnReset.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // resets the screen
            path.reset();
            // Calls the onDraw() method
            postInvalidate();
        }
    });

}

@Override
protected void onDraw(Canvas canvas) {

    canvas.drawPath(path, paint);
    canvas.drawPath(circlePath, circlePaint);
}

我的主要活动:

  public class DrawingBrush extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    MyTouchEventView tv = new MyTouchEventView(this);

    setContentView(tv);
    addContentView(tv.btnReset,  tv.params);
            addContentView(tv.btnSave,  tv.params);
    }

伙计们,你能帮我弄清楚我在这里缺少什么吗?提前致谢。

4

1 回答 1

1

如果你想要多个视图,那么你需要使用一个布局来包装它们。在您的情况下,您可以使用 FrameLayout 而不是 View 来继承。将 Button 直接添加到其中。

public class MyTouchEventView extends FrameLayout {

private Paint paint = new Paint();
private Path path = new Path();
private Paint circlePaint = new Paint();
private Path circlePath = new Path();

public Button btnReset;
public Button btnSave;
public FrameLayout.LayoutParams params;
public FrameLayout.LayoutParams params2;

@SuppressWarnings("deprecation")
public MyTouchEventView(Context context) {
    super(context);

    ...

    btnReset = new Button(context);
    btnReset.setText("Clear Screen");
    ...

    params = new FrameLayout.LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT);
    btnReset.setLayoutParams(params);
    addView(btnReset);


    ...
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawPath(path, paint);
    canvas.drawPath(circlePath, circlePaint);
}

顺便说一句:您只能设置一个内容视图,因此setContentView()多次调用只会替换它。

于 2013-05-01T16:54:26.777 回答