Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Размещение растрового изображения на холсте

Автор вопроса: Paul MennegaОтветов: 2

Я хотел бы создать вид "миллиметровой бумаги" для растрового изображения, которое я рисую с помощью холста, и пытаюсь найти лучший способ сделать это.

Я не могу передать исходный Bitmap, содержащий фон миллиметровой бумаги, в конструктор Canvas, так как я получаю Canvas в SurfaceView через вызов .lockCanvas ().

Некоторые решения, которые я пробовал:

  • Я пробовал реализовать это решение в моем SurfaceView Thread.run (), но проблема, я считаю, заключается в том, что когда BitmapDrawable преобразуется в Bitmap ... он теряет свойства плитки.

    холст = mSurfaceHolder.lockCanvas (ноль); BitmapDrawable TileMe = новый BitmapDrawable (BitmapFactory.decodeResource (getResources (), R.drawable.editor_graph)); TileMe.setTileModeX (Shader.TileMode.REPEAT); TileMe.setTileModeY (Shader.TileMode.REPEAT);

    Растровое изображение b = TileMe.getBitmap (); canvas.drawBitmap (b, 0, 0, ноль);

  • Если я использую Canvas.drawBitmap, который принимает целевой RectF в качестве параметра, похоже, что растровое изображение будет выложено плиткой, чтобы заполнить RectF ... но как мне надежно объявить RectF, который заполняет всю область просмотра?

  • Установка желаемого вида миллиметровой бумаги для фона "Действия" также не работает, поскольку растровое изображение / макет холста непрозрачны и блокируют его просмотр.

Есть идеи, как этого добиться?

androidcanvasbitmaptiling

Ответы

Ответ 1 · рейтинг 27 · Romain Guy

У вас есть два простых решения:

  • Либо используйте BitmapDrawable, но вместо извлечения Bitmap просто вызовите BitmapDrawable.draw (Canvas). Не забудьте установить границы рисования, чтобы заполнить область рисования.
  • Создайте Paint с BitmapShader и нарисуйте им прямоугольник (это в основном то, что делает BitmapDrawable).

Ответ 2 · рейтинг -3 · user432209

Я уверен, что есть способ получить эффект плитки, используя SurfaceView. К сожалению, похоже, вы не можете использовать BitmapDrawable с холстом. Таким образом, вам, вероятно, придется реализовать свой собственный метод мозаики, создав свою собственную серию Rect на Canvas и нарисовав масштабированное растровое изображение для каждого из них.

Честно говоря, это было бы не так сложно. Просто получите ширину / высоту представления и создайте массив из Rect на основе этих данных, к которому вы нарисуете Bitmap.

В качестве альтернативы, если вам не нужно на лету вносить изменения в фактический плиточный фон, просто нарисуйте его как фон и нарисуйте SurfaceView поверх него. В том сообщении, которое вы связали, предоставлено несколько решений для мозаичного размещения BitmapDrawable, которые вы могли бы реализовать.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы