したがって、ビューが互いに心配する必要がないようにする必要があります。線の描画を処理する 1 つのビューEditText
、入力を処理する 2 つのビュー、およびたとえば座標を送信するためのボタンがあります。これらのビューを含むレイアウトがあると仮定すると、線を描画するために使用できる単純なカスタム ビューの例を次に示します。
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
);
}
}
}
レイアウトについて上記で行った仮定を考慮して、これを実装する方法の簡単な例とともに。
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;
}
}
}