2015-01-01 2 views
1

У меня есть изображение плана этажа, отображаемого на экране. Мой вопрос: как наложить на него другое изображение.наложение холста изображение с другим изображением android

видеть изображение из другого потока, где я спросил, как here

/** 
* floor plan drawing. 
* 
* @param canvas the canvas on which the background will be drawn 
*/ 
@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    Bitmap temp = BitmapFactory.decodeResource(getResources(), R.drawable.floorplan); 
    image= Bitmap.createScaledBitmap(temp, canvas.getWidth(), canvas.getHeight(), true); 
    canvas.drawBitmap(image, 0, 0, null); 

} 
+1

первый: OnDraw не самое лучшее место для 'BitmapFactory.decodeResource()', второй: вместо вызова ' Bitmap.createScaledBitmap() 'модифицировать' холст' (масштабировать, переводить, вращать) – pskink

+0

@pskink ok, что показывать только в Draw? – Gman

+0

В onDraw вызывается только материал, связанный с холстом, я думаю, что ваша IDE предупреждает вас о вызове decodeResource и тому подобное – pskink

ответ

1

насчет добавления второго изображения поверх первого?

@Override 
protected void onDraw(Canvas canvas) 
{ 
    super.onDraw(canvas); 
    Bitmap temp = BitmapFactory.decodeResource(getResources(), R.drawable.floorplan); 
    image = Bitmap.createScaledBitmap(temp, canvas.getWidth(), canvas.getHeight(), true); 
    canvas.drawBitmap(image, 0, 0, null); 

    Bitmap over = BitmapFactory.decodeResource(getResources(), R.drawable.overlay); 
    image = Bitmap.createScaledBitmap(over, canvas.getWidth(), canvas.getHeight(), true); 
    canvas.drawBitmap(image, 0, 0, null); 
} 
+0

очень медленный, если вы накладываете 500+ изображений –

+0

Извините, но я обрабатываю 900 изображений :), и я сделал это быстро :) –

+0

Ну, для целей OP (наложение 2 изображений) это достаточно быстро. В любом случае мне было бы интересно узнать, почему вы хотите наложить так много изображений. И было бы неплохо увидеть ваш световой код. –

0

Это мой метод, для наложения двух изображений в ImageView:

<ImageView 
    android:id="@+id/imageView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

Используя этот метод:

public static Bitmap overlayBitmap(Bitmap bitmapBackground, Bitmap bitmapImage) { 

     int bitmap1Width = bitmapBackground.getWidth(); 
     int bitmap1Height = bitmapBackground.getHeight(); 
     int bitmap2Width = bitmapImage.getWidth(); 
     int bitmap2Height = bitmapImage.getHeight(); 

     float marginLeft = (float) (bitmap1Width * 0.5 - bitmap2Width * 0.5); 
     float marginTop = (float) (bitmap1Height * 0.5 - bitmap2Height * 0.5); 

     Bitmap overlayBitmap = Bitmap.createBitmap(bitmap1Width, bitmap1Height, bitmapBackground.getConfig()); 
     Canvas canvas = new Canvas(overlayBitmap); 
     canvas.drawBitmap(bitmapBackground, new Matrix(), null); 
     canvas.drawBitmap(bitmapImage, marginLeft, marginTop, null); 

     return overlayBitmap; 
    } 

получить ссылки и растровые изображения, чтобы сделать де накладку!

ImageView imageView = (ImageView) findViewById(R.id.imageView); 

    Bitmap background = BitmapFactory.decodeResource(getResources(), R.drawable.background); 
    Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.androide); 

    Bitmap bmpImages = overlayBitmap(background, image); 
    imageView.setImageBitmap(bmpImages); 

иметь это в результате:

enter image description here

Download the complete sample.

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