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

複数のビューが必要な場合は、レイアウトを使用してそれらをラップする必要があります。あなたの場合、継承元の View の代わりに FrameLayout を使用できます。そこにボタンを直接追加します。

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);
}

ところで: 設定できるコンテンツ ビューは 1 つだけなので、setContentView()複数回呼び出すと置き換えられます。

于 2013-05-01T16:54:26.777 に答える