2013-07-26 3 views
4

Я создал пользовательский вид, расширив View.Android: рисунок на новом холсте

public class CustomView extends View { 
     private Canvas canvas2; 
     private Bitmap backingBitmap; 

В конструкторе CustomView, я бы следующий код:

backingBitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888); 
canvas2 = new Canvas(backingBitmap); 

В OnDraw, у меня есть:

protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    canvas.drawCircle(100, 100, 50, paint); 
    canvas2.drawCircle(0, 0, 10, paint); 
} 

Я вижу круг, который получает нарисованный с помощью "холст" объект , но не тот, который нарисован с использованием объекта canvas2. Мое понимание заключается в том, что нужно создать только изменяемый битмап и сделать его растровым изображением Canvas. Может кто-нибудь указать, что здесь не так?

Вопрос с бонусом: где пользовательский объект холста создается на экране и как он может установить его положение?

Причина создания нескольких холстов: у меня есть SurfaceView, который охватывает весь экран. Таким образом, в основном его холст покрывает весь экран. Мне нужно сделать прямоугольник, похожий на окно, на экране, и все, что нужно, нужно оживить в пределах этого окна. В принципе, если вы переводите изображение в это окно, изображение не должно рисоваться за пределами границ окна.

Cheers!

+1

почему вы execpt содержание canvas2 быть начертить – Blackbelt

+0

Честно говоря, я был только наполовину ожидая, чтобы это работало. Я думал, что будут вызовы, которые будут прикреплять пользовательские полотна к поверхности или что-то в этом роде. Я не могу найти больше информации в документации. Поиск решений в Интернете также не принесло полезных результатов. Каков правильный процесс создания нового холста? –

+0

Fst thing ваш собственный объект 'Canvas' действителен или нет, определенно ваш' canvas2' не будет отображаться на вашей ** поверхности ** когда-либо. Когда вы создаете представление, оно прикрепляется к окну. На этом этапе у него есть рисование с начальным началом, это дает вам 'canvas' ref, предоставленный методом' onDraw() '. Итак, как ваша поверхность знает, что вы создали еще один объект холста ... подумайте об этом. – Gru

ответ

6

Я понял, что случилось с моим пониманием. Теперь все кажется таким простым! Это помогло link.

В принципе, когда мы создаем объект Canvas, он создает экранный холст, содержащий наши призывы рисования. Этот объект Canvas должен быть подкреплен изменчивым растровым изображением, так что все чертежи, наконец, будут сохранены в этом растровом изображении. Как только рисунок будет выполнен, вы можете нарисовать измененное растровое изображение, используя холст, который привязан к поверхности (холст, который вы получаете в onDraw).

В моем коде я сделал следующие изменения, чтобы заставить его работать.

protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    canvas.drawCircle(100, 100, 50, paint); 
    canvas2.drawCircle(25, 25, 25, paint); 
    canvas.drawBitmap(backingBitmap, 200, 90, paint); 
} 
+0

Отличный вопрос и ответ, столкнулся с той же проблемой. +1 для обоих. Благодаря! –

Смежные вопросы