Черепица растрового изображения на холсте - PullRequest
11 голосов
/ 29 января 2011

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

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

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

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

    canvas = mSurfaceHolder.lockCanvas (null);BitmapDrawable TileMe = new 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, null);

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

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

Любойидеи как этого добиться?

Ответы [ 2 ]

27 голосов
/ 29 января 2011

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...