Я пытаюсь создать вид, который позволит пользователю соединять некоторые элементы с нарисованной линией.
Например, на изображении есть пара TextViews
, пользователь рисует линию от одного к другому, и еслион подключен правильно (от text1 до text3), линия останется.
Сейчас я реализовал пользовательский вид, он рисует линию, которая следует за вашим пальцем:
public class FingerLineView extends View {
private final Paint mPaint;
private float startX;
private float startY;
private float endX;
private float endY;
public FingerLineView(Context context) {
this(context, null);
}
public FingerLineView(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setStyle(Style.STROKE);
mPaint.setColor(Color.RED);
}
@Override protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawLine(startX, startY, endX, endY, mPaint);
}
@Override
public boolean onTouchEvent(@NonNull MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
startY = event.getY();
// Set the end to prevent initial jump
endX = event.getX();
endY = event.getY();
invalidate();
break;
case MotionEvent.ACTION_MOVE:
endX = event.getX();
endY = event.getY();
invalidate();
break;
case MotionEvent.ACTION_UP:
endX = event.getX();
endY = event.getY();
invalidate();
break;
}
return true;
}
}
Вот как это работает:
Но я не знаю, как правильно «связать» его с такими элементами вида, как TextView
.
Должен ли я это сделатьс полностью настраиваемым видом или есть несколько лучших способов сделать это?