Я плохо знаком с Android.
Я тяну битовые массивы, строки и формы на Холст в OnDraw (Холст холста) метод моего представления. Я ищу справку о том, как реализовать гладкую прокрутку в ответ на перетаскивание пользователем. Я искал, но не нашел, что любые учебные руководства помогают мне с этим.
Ссылка для Холста, кажется, говорит, что, если Холст создается из Битового массива (названный bmpBuffer, скажите), затем что-либо продвинутое, Холст также продвинут bmpBuffer. Было бы возможно использовать bmpBuffer для реализации прокрутки..., возможно, копируют его назад в Холст, смещенный на несколько пикселей за один раз? Но если я использую Canvas.drawBitmap для отодвижения bmpBuffer к Холсту, смещенному на несколько пикселей, не будет bmpBuffer быть поврежденным? Возможно, поэтому, я должен скопировать bmpBuffer в bmpBuffer2, затем отодвигают bmpBuffer2 к Холсту.
Более простой подход должен был бы провести линии, формы, и т.д. прямо в буферный Битовый массив затем тянут тот буфер (со сдвигом) на Холст, но насколько я вижу различные методы: drawLine (), drawShape () и так далее не доступны для рисования к Битовому массиву... только к Холсту.
У меня могло быть 2 Холста? Один из которых создавался бы из буферного битового массива и использовался бы просто для того, чтобы построить графики, формы, и т.д. и затем буферный битовый массив будет оттянут на другой Холст для дисплея в Представлении?
Я должен приветствовать любой совет!
Ответы на подобные вопросы здесь (и на других веб-сайтах) относятся к "блитированию". Я понимаю понятие, но ничего не могу найти о "копировании битового массива" или "пересылке битовой строки" в документации Android. Canvas.drawBitmap и Битовый массив. Скопировать эквиваленты Android?
У меня тоже была эта проблема,
Я рисовал следующим образом:
Canvas BigCanvas = new Canvas();
Bitmap BigBitmap = new Bitmap(width,height);
int ScrollPosX , ScrollPosY // (calculate these with the onScrollEvent handler)
void onCreate()
{
BigCanvas.SetBitmap(BigBitmap);
}
onDraw(Canvas TargetCanvas)
{
// do drawing stuff
// ie. BigCanvas.Draw.... line/bitmap/anything
//draw to the screen with the scrolloffset
//drawBitmap (Bitmap bitmap, Rect src, Rect dst, Paint paint)
TargetCanvas.DrawBitmap(BigBitmap(new Rect(ScrollPosX,ScrollPosY,ScrollPosX + BigBitmap.getWidth(),ScrollPosY + BigBitmap.getHeight(),new Rect(0,0,ScreenWidth,ScreenHeight),null);
}
для плавной прокрутки вам нужно было бы использовать какой-то метод, который занимает несколько точек после прокрутки (т.е. первая точка прокрутки и 10-й), вычтите их и прокрутите на это число в каждом цикле, что делает его постепенно медленнее (ScrollAmount - повороты - трение).
Надеюсь, это поможет лучше понять ситуацию.
Я, кажется, нашел ответ. Я поставил основную часть кода чертежа (который ранее был в OnDaraw ()) в новом методе Dodrawing (). Этот метод начинается с создания нового растрового изображения больше, чем экран (достаточно большой, чтобы удерживать полный рисунок). Затем он создает второе холст, на котором необходимо сделать подробный рисунок:
BufferBitmap = Bitmap.createBitmap(1000, 1000, Bitmap.Config.ARGB_8888);
Canvas BufferCanvas = new Canvas(BufferBitmap);
Остальная часть метода Dodrawing () приводится в действие с подробным рисунком для буффанванва.
Весь метод OnDaw () теперь читает следующим образом:
@Override protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(BufferBitmap, (float) -posX, (float) -posY, null);
}
Переменные положения, posx и posy, инициализированные при 0 в методе oncreate () приложения. Приложение реализует вступление вггерелистенер и использует расставленные рассеивания и рассмотренные аргументы, возвращаемые в уведомлении о скобре, чтобы увеличить POSX и Posy.
Это, кажется, обо всем, что нужно для реализации плавного прокрутки. Или я заглянул что-то!?
prepbgg: Я не думаю, что код будет работать, потому что canvas.drawBitmap не рисует в битмап, а рисует битмап на холсте.
Поправьте меня, если я ошибаюсь!