用android绘制可触摸的图层

时间:2012-11-20 20:20:24

标签: android

我想创建一个简单的绘图应用程序。我希望能够添加somme线条,圆形和矩形。我想选择任何形状并移动它。 我试过这种方式:
     - 为每个形状添加一个视图,并在视图的onDraw方法中绘制形状
     - 将每个视图添加到相对布局

我可以看到所有形状,但我只能触摸第一个视图,因为它会填满所有屏幕。 我在示例中搜索了一个“分层”应用程序的示例,但没有成功

Thks:)

修改:已添加代码。
如果我点击矩形,我可以看到日志,但如果我点击圆圈,则没有日志。

编辑2 :Oups,我忘了在圈子中附上听众...... :(对不起

布局:

public class DrawingView extends RelativeLayout {

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

The Circle:

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

}

1 个答案:

答案 0 :(得分:1)

您想在同一视图中创建形状。使用ShapeDrawable包装器并在创建时将每个包装器放入相同的arraylist中。然后检查arraylist中的位置,以确定重叠时他们想要移动的形状。