1

私はコードを書き、アンドロイド 4.0.3 でテストしました。すべてがうまくいきました。Android 4.2.2でテストしましたが、塗りつぶし方法が機能していません。私は問題を単純化しました。ここに実際の問題を示すダミーコードがあります:

Paint testpaint = new Paint();
testpaint.setColor(Color.BLACK);
testpaint.setAlpha(255);
testpaint.setStyle(Paint.Style.FILL);

Path p = new Path();
p.moveTo(10, 10);
p.lineTo(200, 10);
p.lineTo(200, 250);
p.lineTo(10, 200);
p.lineTo(10,10);
p.close();

RectF rectF = new RectF();
Region rr = new Region();
p.computeBounds(rectF, false);
rr.setPath(p,new Region((int) rectF.left, (int) rectF.top, (int) rectF.right, (int) rectF.bottom));

//works
RegionIterator ri = new RegionIterator(rr);
Rect rect = new Rect();
int count = 0;
while (ri.next(rect)){
    canvas.drawRect(rect, testpaint);
    count++;
}

//works
canvas.drawPath(p, testpaint);

//doesn't work
canvas.drawPath(rr.getBoundaryPath(), testpaint);


//works
Path outline = rr.getBoundaryPath();
Path newpath = new Path();
Matrix matrix = new Matrix();
matrix.setScale(1, 1, 0, 0);
outline.transform(matrix,newpath);
canvas.drawPath(newpath, testpaint);

1 回目と 2 回目の引き分けは機能しますが、3 回目は機能しません。回転をゼロにすると、それも機能します。なぜ( getBoundaryPath バージョンが必要なのか)理由を知っている人はいますか? また、なぜ 4.0.3 で機能したのですか?

4

1 に答える 1

-1

getBoundaryPath()bool私の知る限り戻ってきます。rr.boundaryPathどちらがパスを返すか試してみてください。

于 2014-05-04T09:17:21.877 に答える