2

次の問題があります。

ボタンを追加しようとするアクティビティがあります。これは私の onCreate メソッドです

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

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

    context = this;

    drawView.requestFocus();

}

これは DrawView クラスです

public class DrawView extends View implement 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)のみが子を持つことができます。実行しているのは、コンテナー(ViewGroup)ではないアクティビティのコンテンツビューとしてDrawViewを作成しているため、他のビュー(子)を追加することはできません。 。
あなたの問題の解決策は次のとおりです。

  • 他のビューを含む、または空の親(LinearLayout、RelativeLayoutなど)としてViewGroupを使用して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

onCreate() の setContentView() 呼び出しでアクティビティに関連付ける XML レイアウト ファイルを作成する必要があります。

レイアウトには、独自のビュー、ボタン、および好きなものが含まれます。

于 2012-09-04T10:43:21.850 に答える