私は単純な「ドローオンタッチ」を開発しようとしています。ユーザーがonTouchリスナーに配置するさまざまなパスを描きたいと思います。 私は単純な問題があります。パスを描画すると、最後のonTouchエントリのポイントで描画された単一のパスが取得されます。 私はパスが最後のパス上に描画されていると思います。私は150アルファでペイントを使用しているため、2番目の連続したonTouchエントリでより頑丈に見えます。Android:Drawing multiple paths
どうすれば解決できますか?ありがとう!
public class PaintView extends View implements OnTouchListener {
List<List<Point>> paths = new ArrayList<List<Point>>();
List<Point> points = new ArrayList<Point>();
Paint paintLine = new Paint();
Paint paintCircle = new Paint();
public PaintView(Context context) {
super(context);
setFocusable(true);
setFocusableInTouchMode(true);
this.setOnTouchListener(this);
paintLine = new Paint(Paint.ANTI_ALIAS_FLAG);
paintLine.setStyle(Paint.Style.STROKE);
paintLine.setStrokeWidth(10);
paintLine.setColor(Color.GREEN);
paintLine.setAlpha(150);
}
public void onDraw(Canvas canvas) {
Path path = new Path();
List<Point> pointsList;
List<Path> pathList = new ArrayList<Path>();
Point point = new Point();
for (int i = 0; i < paths.size(); i++) {
pointsList = paths.get(i);
path.reset();
boolean first = true;
for (int j = 0; j < points.size(); j+=2) {
point = pointsList.get(j);
if (first) {
first = false;
path.moveTo(point.x, point.y);
} else if (j < pointsList.size() - 1) {
Point nextPoint = pointsList.get(j+1);
path.quadTo(point.x, point.y, nextPoint.x, nextPoint.y);
} else {
path.lineTo(point.x, point.y);
}
}
pathList.add(path);
}
for (Path pathDraw : pathList) {
canvas.drawPath(pathDraw, paintLine);
}
}
public boolean onTouch(View view, final MotionEvent event) {
Point point = new Point();
point.x = event.getX();
point.y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// DO SOMETHING
points.clear();
points.add(point);
break;
case MotionEvent.ACTION_MOVE:
points.add(point);
break;
case MotionEvent.ACTION_UP:
points.add(point);
paths.add(points);
break;
default:
return false;
}
invalidate();
return true;
}
}
ありがとう、私はパスが走る方法を理解しました。私は複数のパスを作成する必要はありません。私は1つだけすべてを行うことができます。コードは変更され、私は '点'を必要としません。点 'clear'( 'moveTo'を 'ACTION_DOWN'に 'onTouch()'メソッドで直接 'Path' 'ACTION_MOVE'の 'lineTo'と 'ACTION_UP'の 'lineTo' intです。次に、 'onDraw'メソッドでは、私が必要とするのは、私が持っている唯一の道を描くことだけです。 – SamuSan