Как я могу передать значение int в мой onDraw (Canvas canvas) в Android?

#android #parameters #ondraw

#Android #параметры #ondraw

Вопрос:

Я использую surfaceview для рисования круговой диаграммы в Android. Чтобы узнать, насколько большим должен быть фрагмент пирога, мне нужно передать параметр методу onDraw (). Как я могу это сделать? Внутри onDraw () я делаю запрос к datahelper-классу, который извлекает нужные данные.

Я попытался вызвать статическую функцию в одном действии из onDraw, и какая функция вернула целое число. Но я хочу что-то более динамичное, чтобы я мог отправлять нужные мне целые числа из Activity в onDraw и просто получать результат в виде круговой диаграммы.

Есть предложения?

Ответ №1:

Одно из решений может быть таким:

 public class MySurfaceView extends SurfaceView
{
    private MyParameter parameter;

    public void setParameter(MyParameter parameter)
    {
        this.parameter=parameter;
    }

    @Override
    public void onDraw(Canvas canvas)
    {
        if(this.parameter==null)
            return;  //nothing to draw...
        //draw here...
    }
}

//somewhere in code

MySurfaceView sView=(SurfaceView )findViewById(R.id.pie_chart);
//
sView.setParameter(new MyParameter(100,2000, false));

}
  

Комментарии:

1. Это сработало. Я не смог заставить его работать с целым числом в качестве параметра, поэтому я использовал строку, так ли это или я должен иметь возможность выполнить преобразование? В любом случае спасибо за быстрый и полезный ответ!

2. На самом деле вы можете использовать в качестве MyParameter разделяемый объект и поместить туда int, String и так далее.

3. Привет! Мне было интересно, знаете ли вы, как я мог бы использовать этот способ для передачи параметров в мой SurfaceView во время onTouchEvents? Это вообще возможно? Если я хочу, чтобы этот параметр был обновлен в MotionEvent. ACTION_MOVE.

4. @kakka47 — уверен, что это возможно

5. Я пытаюсь таким образом, но это не работает: case MotionEvent. ACTION_UP: int xchanged = xdown- x; xscroll = String.valueOf(xchanged); cv.setParameter(новая строка (xscroll)); cv.setParameter(новая строка (xscroll)); Отличается ли «setParameter()» внутри TouchEvent?