2017-05-23 84 views
0

我有ImageView的子类,我可以在其上绘制(笔,矩形,椭圆等),并添加EditText子视图(可拖动和可以旋转)。Xamarin Android在位图上绘制EditText

问题是我想获得最终图像我不确定如何将这些EditText合并到新图像中,因为所有工具都直接在画布上绘图,而最终需要绘制EditText文本,因为他们需要在用户单击Save之前可拖动和变化。

经过许多不同的方法后,这一个是最正确的,但如果文本旋转一定程度,它不起作用。

public Bitmap GetFinalBitmap() 
    { 
     this.DrawingCacheEnabled = false; 
     this.DrawingCacheEnabled = true; 

     var finalImage = Bitmap.CreateBitmap(GetDrawingCache(true)); 
     foreach (var item in this.pathLists) 
     { 
      if (item.TextView != null) 
      { 
       item.TextView.BuildDrawingCache(true); 
       var txt = item.TextView.GetDrawingCache(true); 
       finalImage = Overlay(finalImage, txt, item.TextView.GetX(), item.TextView.GetY()); 
      } 
     } 

     return finalImage; 
    } 

    public Bitmap Overlay(Bitmap bmp1, Bitmap bmp2, float x, float y) 
    { 
     Bitmap bmOverlay = Bitmap.CreateBitmap(bmp1.Width, bmp1.Height, bmp1.GetConfig()); 
     Canvas canvas = new Canvas(bmOverlay); 
     canvas.DrawBitmap(bmp1, new Matrix(), null); 
     canvas.DrawBitmap(bmp2, x, y, null); 
     return bmOverlay; 
    } 

任何帮助,将不胜感激(溶液的更新或有关如何使用正确的坐标上ImageView's位图绘制EditText也许新方法)。

回答

0

基本上我所要做的就是使用矩阵绘制第二个位图(其中一个EditText)。这里是更新后的代码,即使对于旋转EditText也适用。

public Bitmap Overlay(Bitmap bmp1, Bitmap bmp2, float x, float y, float rotation) 
    { 
     Bitmap bmOverlay = Bitmap.CreateBitmap(bmp1.Width, bmp1.Height, bmp1.GetConfig()); 
     Canvas canvas = new Canvas(bmOverlay); 
     canvas.DrawBitmap(bmp1, new Matrix(), null); 
     var matrix = new Matrix(); 
     matrix.Reset(); 
     if (rotation > 0) 
      matrix.PostRotate(rotation, bmp2.Width/2, bmp2.Height/2); 
     matrix.PostTranslate(x, y);  
     canvas.DrawBitmap(bmp2, matrix, null); 
     return bmOverlay; 
    }