Страницы

Поиск по вопросам

понедельник, 15 октября 2018 г.

Циклическая прокрутка шкалы

Не могу разобраться, как можно реализовать циклическую прокрутку шкалы. Рисую ее в customview:
public void onDraw(Canvas canvas){ startingPoint = mainPoint; counter = 0; for (int i = 1;; i++) { if (startingPoint > screenSize) { break; }
if(i % 4 == 0) { size = scaleHeight / 4; counter = counter + 1; } else { if(i % 2 == 0) { size = scaleHeight / 8; } else { size = scaleHeight / 16; } } canvas.drawLine(startingPoint, endPoint - size, startingPoint, endPoint, rulerPaint);
if (i % 4 == 0) { String c = Integer.toString(counter); canvas.drawText(c, startingPoint, endPoint - (size + 20), textPaint); }
startingPoint = startingPoint + pxmm; }
Ограничиваю ее до одиннадцати длинных делений:
Но мне нужна бесконечная шкала:

Допустим, можно убрать проверку значения counter в onDraw методе, но как это скажется на производительности? Даже если ставлю его значение 1000, уже заметны "подлагивания" при скроллинге. Вот мой onScroll:
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { mainPoint = mainPoint - distanceX; invalidate(); return true; }
И onMeasure:
protected void onMeasure(int w, int h) { DisplayMetrics metrics = new DisplayMetrics(); ((Activity)getContext()).getWindowManager().getDefaultDisplay().getMetrics(metrics); h = metrics.heightPixels / 5; w = metrics.widthPixels;
setMeasuredDimension(w, h);
scaleHeight = h; scaleWidth = w; screenSize = w; endPoint = h; midScreenPoint = w / 2; pxmm = screenSize / 28; }
Каким образом реализуются подобные задачи?


Ответ

Надо рисовать шкалу от начала экрана до его конца. Т.е. цикл должен быть не по шкале, а по ширине экрана. А в цикле уже вести счетчик по шкале, как только он достигнет 11, обнулять.
Такой подход позволит легко рисовать и шкалу со смещением, просто присваиваете счетчику шкалы это смещение вначале и готово. Скроллинг будет не нужным.

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

Отправить комментарий