Существуют ли готовые решения для Android? Если нет, как лучше реализовать?
Ответ
Да, вы можете отследить точки начала и конца, max и min отклонения и использовать преобразования bezier. В классе Path, есть Квадратичные и Кубические преобразования кривых cubicTo и quadTo
Вот простой пример для теста с методом quadTo:
public class DrawBezierLine extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new DrawView(this));
}
class DrawView extends View {
Paint p;
public DrawView(Context context) {
super(context);
p = new Paint(Paint.ANTI_ALIAS_FLAG);
p.setStrokeWidth(5);
p.setStyle(Paint.Style.STROKE);
}
@Override
protected void onDraw(Canvas canvas) {
p.setColor(Color.RED);
canvas.drawPath(makeBezierLine(50, 50, 200, 300), p);
}
}
private Path makeBezierLine(float x1, float y1, float x3, float y3) {
final Path path = new Path();
path.moveTo(x1, y1);
final float x2 = 0;
final float y2 = 200;
path.quadTo(x2,y2, x3,y3);
return path;
}
}
где x1,y1 -начальная точка. x3,y3 - конечная точка, x2,y2 - точка отклонения.
Но для вашего примера, больше подойдет кубическое преобразование, очень часто используется в рисовалках.
Добавлю: Интерполяторы используют аналогию сложных кривых Безье и могут быть использованы, для решения многих задач. Также никто вам не мешает создать свой алгоритм преобразования, используя свои данные, что может быть актуальней и возможно проще.
Комментариев нет:
Отправить комментарий