android - 用android绘制可触摸层

标签 android

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

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

谢谢 :)

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

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

}

最佳答案

您想在同一 View 中创建形状。使用 ShapeDrawable 包装器并在创建时将每个包装器放入同一个数组列表中。然后检查arraylist中的位置,找出重叠时他们想移动哪个形状。

关于android - 用android绘制可触摸层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13481430/

相关文章:

java - MapFragment 在 android 中返回 null

android - 如果我使用相同的签名签名,是否可以接收另一个 Android 应用程序的 C2DM Intent ?

java - 如何在android中的按钮顶部显示进度条

android - 如何隐藏键盘上的 float 操作按钮?

Android studio - 停止立即错误检查类和 xml

android - 在 Android 上使用 LocationListener 禁用提供程序

android - MapBox - 每个功能的符号层中的不相同的 iconImage

android - 无法获取 BatchedBridge,请确保您的包已正确打包

android - Swift vs Kotlin 在排序数组上的表现

java - 如何将文本样式从粗体更改为正常