So what you want to do is keep the Views from having to worry about each other. You have one View that handles drawing the line, two EditText
views that handle the input, and for example's sake, a button to submit the coordinates. Assuming you have a layout containing these views, here's an example of a simple custom view that you could use to draw the line:
public class LineView extends View {
/**
* Container to hold the x1, y1, x2, y2 values, respectively
*/
private float[] mCoordinates;
/**
* The paint with which the line will be drawn
*/
private Paint mLinePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
public LineView (Context context) {
super(context);
}
public LineView (Context context, AttributeSet attrs) {
super(context, attrs);
}
public LineView (Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
/**
* Set the color with which the line should be drawn
* @param color the color to draw the line with
*/
public void setLineColor (int color) {
mLinePaint.setColor(color);
invalidate();
}
/**
* Set the coordinates of the line to be drawn. The origin (0, 0) is the
* top left of the View.
* @param x1 the starting x coordinate
* @param y1 the starting y coordinate
* @param x2 the ending x coordinate
* @param y2 the ending y coordinate
*/
public void setCoordinates (float x1, float y1, float x2, float y2) {
ensureCoordinates();
mCoordinates[0] = x1;
mCoordinates[1] = y1;
mCoordinates[2] = x2;
mCoordinates[3] = y2;
invalidate();
}
private void ensureCoordinates () {
if (mCoordinates == null) {
mCoordinates = new float[4];
}
}
@Override
protected void onDraw (Canvas canvas) {
if (mCoordinates != null) {
canvas.drawLine(
mCoordinates[0],
mCoordinates[1],
mCoordinates[2],
mCoordinates[3],
mLinePaint
);
}
}
}
Along with a quick example, given the assumptions made above about your layout, of how you could implement this.
public class EditTextActivity extends Activity implements View.OnClickListener {
private EditText mInputX;
private EditText mInputY;
private Button mDrawButton;
private LineView mLineView;
public void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
mInputX = (EditText) findViewById(R.id.input_x);
mInputY = (EditText) findViewById(R.id.input_y);
mDrawButton = (Button) findViewById(R.id.draw_button);
mLineView = (LineView) findViewById(R.id.line_view);
mLineView.setColor(Color.GREEN);
mDrawButton.setOnClickListener(this);
}
@Override
public void onClick (View v) {
final float x1 = 0;
final float y1 = 0;
final float x2 = getValue(mInputX);
final float y2 = getValue(mInputY);
mLineView.setCoordinates(x1, y1, x2, y2);
}
private static float getValue (EditText text) {
try {
return Float.parseFloat(text.getText().toString());
} catch (NumberFormatException ex) {
return 0;
}
}
}