android:路径在请求时成为位图的一部分

时间:2013-02-22 12:28:16

标签: android canvas bitmap ondraw

我正在学习画布和带路径的位图,目前正在使用绘图应用程序,用户可以在扩展视图上自由绘制路径。 该应用程序还允许用户导入位图作为背景并在其上绘制。

扩展名为DoodleView的视图:

   public DoodleView(Context context, AttributeSet attrs) 
   {
       super(context, attrs); // pass context to View's constructor
       this.context_new=context;
       setFocusable(true);
       setFocusableInTouchMode(true);
   } // end DoodleView constructor

的onDraw:

   @Override
   protected void onDraw(Canvas canvas) 
   {
       canvas.drawBitmap(bitmap, 0, 0, null); 
       for (Path p : paths)
       {
           paintLine.setColor(colorsMap.get(p));
           canvas.drawPath(p, paintLine);          
       }       
       paintLine.setColor(selectedColor);
       canvas.drawPath(mPath, paintLine);   

       if (ConvertCanvasToBitmap == true) 
       {
           canvas.drawBitmap(bitmap, 0, 0, paintLine);
           ConvertCanvasToBitmap = false;
       }           
   } 

FlipHorizo​​ntally:

public void flipImageHorizontally()  
{       
    ConvertCanvasToBitmap = true;
    invalidate();           
    Matrix flipHorizontalMatrix = new Matrix();
    flipHorizontalMatrix.setScale(-1,1);
    flipHorizontalMatrix.postTranslate(bitmap.getWidth(),0);

    Bitmap HorizontalFlipped = Bitmap.createBitmap
            (bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), flipHorizontalMatrix, true);
    bitmap = HorizontalFlipped;
    invalidate();       
}

问题:

我的目标是,对于已经绘制的路径,当用户尝试翻转图像时,绘制的路径也会被翻转。 (即路径已经成为图像的一部分,并且用户不再需要撤消路径)。

但是,我已经使用上面的代码进行了测试,当按下翻页按钮时,位图背景可以翻转,但绘制的内容会消失。然后当进一步绘制时,路径将再次出现,但保持不变。

简而言之,当按下翻页按钮时,如何使路径成为位图的一部分?

谢谢!

编辑:

根据Android 2.1 View's getDrawingCache() method always returns null,我使用以下代码修改了onDraw,但是

02-22 21:38:34.685: E/AndroidRuntime(18617): java.lang.NullPointerException
02-22 21:38:34.685: E/AndroidRuntime(18617):    at android.graphics.Bitmap.createBitmap(Bitmap.java:455)
02-22 21:38:34.685: E/AndroidRuntime(18617):    at com.pearmak.drawing.DoodleView.onDraw(DoodleView.java:148)

修改后的代码:

   @Override
   protected void onDraw(Canvas canvas) 
   {
       canvas.drawBitmap(bitmap, 0, 0, null); // draw the background screen

       for (Path p : paths)
       {
           paintLine.setColor(colorsMap.get(p));
           paintLine.setStrokeWidth(widthMap.get(p));
           canvas.drawPath(p, paintLine);          
       }       
       paintLine.setColor(selectedColor);
       paintLine.setStrokeWidth(selectedWidth);
       canvas.drawPath(mPath, paintLine);   

       if (ConvertCanvasToBitmap == true) 
       {
           //Method 1
//         RelativeLayout page = (RelativeLayout) findViewById(R.id.doodleView);
//         Bitmap screenshot = Bitmap.createBitmap(page.getWidth(), page.getHeight(), Config.ARGB_8888);
//         bitmap = screenshot;
//         ConvertCanvasToBitmap = false;

           //Method 2
           Bitmap screenshot2;
               layout(0, 0, DoodlzViewWidth, DoodlzViewHeight);
           setDrawingCacheEnabled(true);
           screenshot2 = Bitmap.createBitmap(getDrawingCache()); // LINE 148
           setDrawingCacheEnabled(false);
           bitmap = screenshot2;
       }           
   } 

1 个答案:

答案 0 :(得分:0)

您需要从该视图创建位图 请参考这里的drawingcache

Android 2.1 View's getDrawingCache() method always returns null

现在尝试翻转此位图