2011-02-15 2 views
7

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

mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.roomplan); 
mIV = (ImageView)findViewById(R.id.ImageView01); 
mIV.setImageBitmap(mBitmap); 
mIV.invalidate(); 

btnDraw = (Button)findViewById(R.id.Button01); 
btnDraw.setOnClickListener(this); 

Затем в OnClickListener я определяю другое растровое изображение и рисую точку и текст.

Bitmap bmOverlay = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), 
    Bitmap.Config.ARGB_4444); 
Canvas canvas = new Canvas(bmOverlay); 
Paint paint = new Paint(); 
paint.setColor(Color.CYAN); 
paint.setTextSize(20); 
paint.setFlags(Paint.ANTI_ALIAS_FLAG); 
canvas.drawText("You are here", 100, 100, paint); 
canvas.drawPoint(30.0f, 50.0f, paint); 
canvas.drawBitmap(bmOverlay, 0, 0, null); 

Ничего не отображается поверх фонового изображения, даже когда я удаляю изображение. Любой намек, пожалуйста?

Update: Рабочий код

// get a reference to the background image 
mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.raumplan_isst); 

mIV = (ImageView)findViewById(R.id.ImageView01); 

// create a mutable bitmap with the same size as the background image 
Bitmap bmOverlay = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), 
    Bitmap.Config.ARGB_4444); 
// create a canvas on which to draw 
canvas = new Canvas(bmOverlay); 

Paint paint = new Paint(); 
paint.setColor(Color.CYAN); 
paint.setTextSize(20); 
paint.setFlags(Paint.ANTI_ALIAS_FLAG); 

// if the background image is defined in main.xml, omit this line 
canvas.drawBitmap(mBitmap, 0, 0, null); 
// draw the text and the point 
canvas.drawPoint(fKoordX, fKoordY, paint); 
canvas.drawText("You are here", fKoordX+3, fKoordY+3, paint); 

// set the bitmap into the ImageView 
mIV.setImageBitmap(bmOverlay); 
+0

Это нормально, вы рисуете текст и указываете перед рисованием растрового изображения. Конечно, ваше растровое изображение будет перекрывать все! – xandy

+0

проверить мой ответ [http://stackoverflow.com/questions/7320392/how-to-draw-text-on-image/10313272#10313272](http://stackoverflow.com/questions/7320392/how-to -draw-text-on-image/10313272 # 10313272) –

ответ

5

Что вы делаете с холстом? Где он используется? (добавьте еще код ...)

Кроме того, что порядок рисования неверен, вы перерисовываете текст и указываете растровое изображение.

Edit:

Я немного потерял, поскольку я не знаю, какой из ваших изображений должна быть фоном и каким образом вы уже видите ... так что я предполагаю, что mBitmap (roomplan) является вашей задний план? Чем добавить, что в макете в качестве фонового изображения и использовать только ImageView обратить ваше накладку ...

если ваш Overlay нужно фоновое изображение тоже попробовать, что:

// overlay background 
canvas.drawBitmap(myBmp, 0, 0, paint); 
// draw the text and the point 
canvas.drawText("You are here", 100, 100, paint); 
canvas.drawPoint(30.0f, 50.0f, paint); 

Если ImageView должны иметь план комнаты в качестве фона, попробуйте:

// overlay background 
canvas.drawBitmap(mBitmap, 0, 0, paint); 
// draw the text and the point 
canvas.drawText("You are here", 100, 100, paint); 
canvas.drawPoint(30.0f, 50.0f, paint); 
+0

Вот и все. Первый код находится в методе 'onCreate()', а второй - 'OnClickListener'. Хорошо, так как я получил тот же ответ, который касается порядка рисования, я попробую немного поиграть и вернуться к вам;) – springrolls

+0

Вам нужно применить холст где-то. Холст - это то место, где вы рисуете, но его нужно использовать где-то в пользовательском интерфейсе, потому что, когда вы его не используете, он не будет отображаться ... – WarrenFaith

+0

@WarrenFaith Да, понял. Теперь я вижу точку и текст, но все равно не повезло в наложении. Не могли бы вы дать подсказку? – springrolls

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