簡単な描画アプリを作りたいです。いくつかの線、円、長方形を追加できるようにしたいです。そして、任意の図形を選択して移動したい。私はこの方法を試しました:
- シェイプごとにビューを追加し、ビューの 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;
}
}