Я написал код и протестировал его на Android 4.0.3; все работало нормально. Теперь я тестировал его на Android 4.2.2, и метод заполнения не работает. Я упростил задачу и вот фиктивный код, который показывает реальную проблему:Android 4.2.2 Region.getBoundaryPath() Рисунок
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);
Первая и вторая ничья делает его работа, но третий не делает. Если я делаю нулевое вращение, то он тоже работает. У кого-нибудь есть идея, почему (мне нужна версия getBoundaryPath), и почему она работает с 4.0.3?
И еще одно испытание: \t \t // работает \t \t Путь контур = rr.getBoundaryPath(); \t \t \t Путь newpath = new Path(); \t \t \t Матричная матрица = новая матрица(); \t \t \t matrix.setScale (1, 1, 0, 0); \t \t \t outline.transform (matrix, newpath); \t \t canvas.drawPath (newpath, testpaint); – user2506832