2012-02-03 3 views
1

Я пытаюсь создать ShapeDrawable, который рисует следующий путь:ShapeDrawable (от PathShape) не опираясь на правильные координаты

Path path = new Path(); 
path.moveTo(50, 20); 
path.lineTo(0, 50); 
path.lineTo(50, 100); 

ShapeDrawable shapeDrawable = new ShapeDrawable(new PathShape(path, someNumber ,someNumber)); 

Тогда я положил shapeDrawable как верхний слой Layer Drawable как так:

Drawable layers[] = new Drawable[2]; 
layers[0] = res.getDrawable(R.drawable.crawford01); 
layers[1] = shapeDrawable; 

LayerDrawable layerDrawable = new LayerDrawable(layers); 
view.setImageDrawable(layerDrawable); 

Теперь проблема заключается в том, что путь не начинается (50,20), и он прыгает вокруг так, как я не понимаю, когда вы меняете somenumber где строится shapeDrawable.

Любая помощь или документация, которые вы можете предложить, оценены.

ответ

4

Атрибуты «someNumber» на самом деле очень важны при определении вашего PathShape и не являются тривиальными. Они представляют собой «стандартную» ширину и высоту пути, по существу определяющие границы пути и относящиеся непосредственно к координатам, которые вы определяете для своего пути, как указано в конструкторе PathShapehere.

Еще одним важным моментом является то, что координаты, которые вы используете для определения своего Path, не являются абсолютными координатами до PathShape, а вместо этого объединены со стандартной шириной и высотой, чтобы рассчитать, как выглядит ваша фигура при ее масштабировании. Например, следующие два PathShape s по существу идентичны.

public Path getPath1 { 
    Path path = new Path(); 
    path.lineTo(0, 1); 
    path.lineTo(1, 0); 
    path.close(); 
    return path; 
} 

public Path getPath2 { 
    Path path = new Path(); 
    path.lineTo(0, 10); 
    path.lineTo(5, 0); 
    path.close(); 
    return path; 
} 

PathShape shape1 = new PathShape(getPath1(), 1, 1); 
PathShape shape2 = new PathShape(getPath2(), 5, 10);