2014-09-24 3 views
0

Я пытаюсь рисовать на холсте, где фон загружен в Android. Это прекрасно работает без BackgroundImage:Рисовать с холстом над изображением в Android/Java

background = (ImageView)view.findViewById(R.id.Background); 
Bitmap bitmap = Bitmap.createBitmap(canvasSize,canvasSize,Bitmap.Config.ARGB_8888); 
canvas = new Canvas(bitmap); 
background.setImageBitmap(bitmap); 

Im передавая этот холст в другой класс и рисовать на ней. Это прекрасно работает.

Но когда я делаю это:

background = (ImageView)view.findViewById(R.id.Background); 
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); //Just to test 

canvas = new Canvas(bitmap); 
//or this 
canvas = new Canvas(bitmap.copy(Bitmap.Config.ARGB_8888, true)); 

background.setImageBitmap(bitmap); 

Он не рисовать поверх изображения, так что вы не можете видеть точку. Вот код из другого класса, где я использую этот холст рисовать:

canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); 
canvas.drawCircle((float)sObject.getSideGforce()*mult+add, 
(float)sObject.getFrontRearGforce()*mult+add, 15*V.LOGICAL_DENSITY, dot);                               

Моя цель состоит в том, чтобы создать холст с настраиваемым размером, который имеет изображение в качестве фона, на котором я могу рисовать. Его Gforce Display, поэтому изображение будет представлять собой несколько кругов с числами, а холст нарисовал бы точку над ним, чтобы вы могли видеть, сколько Gs вы тянете. Как я уже сказал, он отлично работает без фона. И я не хочу перерисовывать фон каждый раз, когда я переставляю точку. Таким образом, фон должен быть статическим, а точка должна быть на холсте динамической (на 100 Гц). Спасибо заранее.

РЕШЕНИЕ: Он работает с этим кодом.

view.setBackgroundResource(R.drawable.ic_launcher); 

Мне просто нужно было установить фон моего вида. Он растягивает изображение до размера моего фрагмента, но все в порядке.

+0

Проверить эту ссылку http://stackoverflow.com/questions/21846584/android-canvas-draw-by-finger/21846585#21846585 Надеюсь, что это Виль помочь U – Namy

+0

спасибо, но это не помогло мне –

ответ

1

BitmapFactory.decodeResource() создает и неизменен растровое изображение, поэтому вы не можете его изменить.

Вам необходимо создать растровое изображение в качестве рабочего кода, а затем использовать canvas.drawBitmap(), чтобы нарисовать растровое изображение, которое вы хотите в фоновом режиме. И затем нарисуйте то, что вы хотите.

EDIT: Или используйте setBackground() с фоном и нарисуйте только точки на холсте.

+0

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

+1

Тогда, возможно, используйте 'setBackground()' на 'ImageView' с фоном, который вы хотите, и на холсте, нарисованном на нем без фона. –

+0

Я только что протестировал его, и он работает, но, как я уже сказал, это не то, что я хотел. Я должен перерисовывать и загружать изображение каждый раз (100 Гц), хотя он может быть статичным. Он работал бы, когда я мог бы удалить/стереть точку, не затрагивая изображение. Есть ли способ сделать это? –

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