2015-08-14 4 views
0

Я использую следующий код для рисования растровых изображений друг над другом.Наложение растровых изображений на холст в Android

public class MainActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(new MyView(this)); 
    } 

    public class MyView extends View 
    { 
     public MyView(Context context) 
     { 
      super(context); 
     } 

     @Override 
     protected void onDraw(Canvas canvas) 
     { 

      Bitmap bitmap = null; 
      Resources res = getResources(); 

      Bitmap bitmap1 = BitmapFactory.decodeResource(res, R.drawable.ic_launcher); 

      Bitmap bitmap2 = BitmapFactory.decodeResource(res, R.drawable.ic_launcher2); 

      bitmap = Bitmap.createBitmap(bitmap1.getWidth() + 200, bitmap1.getHeight() + 200, 
        Config.ARGB_8888); 

      canvas.drawBitmap(bitmap1, 0, 0, null); 

      super.onDraw(canvas); 

     } 
    } 
    } 

Следующая строка рисует растровое изображение1 на холсте.

canvas.drawBitmap(bitmap1, 0, 0, null); 

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

canvas = new Canvas(bitmap); // Sets background bitmap. 
    canvas.drawBitmap(bitmap1, 0, 0, null); 
    Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG); 
    canvas.drawBitmap(bitmap2, 0, 0, paint) 

Для существующего объекта холст, я также попытался использовать canvas.setBitmap(bitmap);, но до сих пор он ничего не рисовал. Любая помощь будет оценена по достоинству. Благодарю.

+0

Почему вы создаете новый «Холст»? Что такое 'c'? – tachyonflux

+0

ouch. c была опечаткой. Я отредактировал его, чтобы показать холст. Я не знаю, как установить «растровое изображение» для фона, поэтому я попытался создать новый объект canvas. Я также попытался установить canvas.setBitmap (bitmap), но он все равно ничего не рисует. –

+0

Я не понимаю, в чем проблема. Что случилось с 'drawBitmap'? – tachyonflux

ответ

0

Я понял. Вот как это можно сделать. Я скопировал метод overlay() из SO, но я забыл ссылку.

@Override 
    protected void onDraw(Canvas canvas) 
    { 
     Resources res = getResources(); 
     bitmapOverlay(canvas, res); 
     super.onDraw(canvas); 
    } 


public static void bitmapOverlay(Canvas canvas, Resources res){ 
    Bitmap bitmap = null; 
    try { 

     Bitmap bitmap1 = BitmapFactory.decodeResource(res, R.drawable.ic_launcher); // blue 

     Bitmap bitmap2 = BitmapFactory.decodeResource(res, R.drawable.dashboard_icon); // green 

     Bitmap result = overlay(bitmap2, bitmap1); 
     canvas.drawBitmap(result, 300, 300, null); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

public static Bitmap overlay(Bitmap bmp1, Bitmap bmp2) { 
    Bitmap bmOverlay = Bitmap.createBitmap(bmp2.getWidth() + 200, bmp2.getHeight() + 200, 
      bmp1.getConfig()); 
    float left = (bmp2.getWidth() - (bmp1.getWidth() * ((float) bmp2.getHeight()/(float) bmp1 
      .getHeight())))/(float) 2.0; 
    Canvas canvas = new Canvas(bmOverlay); 
    canvas.drawBitmap(bmp1, left, 0, null); 
    canvas.drawBitmap(bmp2, new Matrix(), null); 
    return bmOverlay; 
} 
Смежные вопросы