#android #view #ondraw
#Android #Вид #ondraw
Вопрос:
// DrawTargetMarker.java
public class DrawTargetMarker extends View {
//Class type variables
private SurfaceHolder mHolder;
private static final String TAG = DrawTargetMarker.class.getSimpleName();
private int mX, mY;
private int mRadius = 10;
//Constructor
public DrawTargetMarker(Context context, int curX, int curY){
super(context);
this.mX = curX;
this.mY = curY;
// Forces the canvas to draw the object
invalidate();
}
@Override
public void onDraw(Canvas canvas){
super.onDraw(canvas);
// Creating paint instance
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
// Setting the paint's style
paint.setStyle(Style.FILL);
// Setting the width of the stroke
paint.setStrokeWidth(5);
// Setting the color of the object to be drawn
paint.setColor(Color.BLACK);
// Draw the circle using the specified paint
canvas.drawCircle(mX, mY, mRadius, paint);
}
}
// RecordShots.java
...
...
....
recordShots.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
recordCount.setText(String.valueOf(count ));
Log.i(TAG, "Points Recorded ( " ((TargetTrackerGlobalVariable) getApplicationContext()).getCurrent_x() "," ((TargetTrackerGlobalVariable) getApplicationContext()).getCurrent_y() ")");
mDrawTargetMarker = new DrawTargetMarker(getApplicationContext(), ((TargetTrackerGlobalVariable) getApplicationContext()).getCurrent_x(), ((TargetTrackerGlobalVariable) getApplicationContext()).getCurrent_y());
// points recorded will be showing two values like (120,20), depending upon the object
// position in the view.
}
});
Итак, мой запрос, когда я нажимаю на кнопку, показывает мне точное положение объекта в представлении в виде (x, y), но я попытался передать эти x, y вместе с контекстом в представление, поэтому в эти x, y мне нужно поместить объект и повторять процесс до конца.
Итак, элемент управления перемещается в представление, но проблема в том, что не удается вызвать метод onDraw(), который отвечает за рисование объекта в указанных x, y.
Ответ №1:
В идеале вам нужно подключиться DrawTargetMarker
к основному представлению activity (см. setContentView). И когда вы запускаете действие, используя намерение, метод onDraw() представления должен вызываться напрямую. Вы не должны вызывать DrawTargetMarker
конструктор напрямую.
Комментарии:
1. Привет, Раджат, спасибо за твой ответ, я тоже пробовал это, но я не получаю решения.
2. Привязано ли ваше
DrawTargetMarker
представление к действию? Если да, выполняется ли это действие?3. Я уже связал представление с активностью через mDrawTargetMarkermDrawTargetMarker = new DrawTargetMarker(getApplicationContext(), ((TargetTrackerGlobalVariable) getApplicationContext()).getCurrent_x(), ((TargetTrackerGlobalVariable) getApplicationContext()).getCurrent_y());
4. Итак, используя трассировку (Debug / точки останова), я проверил . Элемент управления перемещается в конструктор view ( DrawTargetMarker) до invalidate(), но не переходит в onDraw()…..