1

簡単な描画アプリを作りたいです。いくつかの線、円、長方形を追加できるようにしたいです。そして、任意の図形を選択して移動したい。私はこの方法を試しました:
- シェイプごとにビューを追加し、ビューの onDraw メソッドでシェイプを描画します
- 各ビューを相対レイアウトに追加します

すべての形状を見ることができますが、最初のビューだけが画面全体に表示されるため、タッチすることはできません。サンプルで「レイヤード」アプリの例を検索しましたが、成功しませんでした

ありがとう:)

編集:コードが追加されました。
四角をクリックするとログが表示されますが、円をクリックするとログが表示されません。

編集2:おっと、サークルにリスナーを添付するのを忘れていました... :(ごめんなさい

レイアウト :

public class DrawingView extends RelativeLayout {

  public DrawingView(Context context) {
      super(context);
      this.setBackgroundColor(0xFFFFFFFF);
      this.addView(new Circle(context));
      this.addView(new Rectangle(context));
  }
}

サークル :

public class Circle extends View implements View.OnTouchListener {

    private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

    public Circle(Context context) {
        super(context);
        this.paint.setStyle(Paint.Style.STROKE);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        this.setMeasuredDimension(100, 100);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(50, 50, 50, this.paint);
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        Log.d("myApp", "cercle");
        return false;
    }

}

そして長方形:

public class Rectangle extends View implements View.OnTouchListener {

    private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);


    public Rectangle(Context context) {
        super(context);
        this.paint.setStyle(Paint.Style.STROKE);
        this.setOnTouchListener(this);
        this.setX(50);
        this.setY(50);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        this.setMeasuredDimension(100, 100);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawRect(0, 0, 100, 100, this.paint);
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        Log.d("myApp", "Rectangle");
        return false;
    }

}
4

1 に答える 1

1

同じビューでシェイプを作成したいと考えています。ShapeDrawable ラッパーを使用し、作成時にそれぞれを同じ配列リストに入れます。次に、arraylist の位置を確認して、オーバーラップするときに移動する形状を把握します。

于 2012-11-20T20:54:23.143 に答える