Метод onDraw() не вызывается

#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()…..