#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?