2013-06-20 5 views
1

Я написал код и протестировал его на 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?

+0

И еще одно испытание: \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

ответ

-1

getBoundaryPath()bool насколько я знаю. Возможно, попробуйте rr.boundaryPath, который должен вернуть путь.

+0

Нет, нет. Как следует из названия, он возвращает Путь. –