2015-09-05 71 views
0

寻找帮助,解答为什么位图未被此图形修改。看了很多例子,我的代码似乎与所列出的内容相匹配。我错过了什么?为什么绘制到Android画布不修改我的位图?

这是相关代码(该类在别处构造,并且drawSomething()调用位于onTouchEvent处理程序中)。为简洁起见,我缩短了代码:

class MyView extends View { 

    Bitmap mBitmap; 
    BitmapDrawable mBitmapDrawable; 
    Canvas mCanvas; 
    Paint mPaint; 

    public MyView(Context context) { 
     super(context); 
     mBitmap = Bitmap.createBitmap(500, 500, Bitmap.Config.ARGB_8888); 
     mBitmapDrawable = new BitmapDrawable(getResources(), mBitmap); 
     mCanvas = new Canvas(mBitmap); 
     mCanvas.setBitmap(mBitmap); 
     mPaint = new Paint(); 
     mPaint.setColor(Color.parseColor("#00FF00")); 
     mPaint.setStrokeWidth(10); 
    } 

    public void drawSomething() { 
     mCanvas.drawColor(0xFF00FF00); // This should "fill" the canvas 
     int radius = 10; 
     mCanvas.drawCircle(50, 50, radius, mPaint);  // This should draw a circle at (50, 50) 

     int count=0; 
     for (int i=0; i<mBitmap.getWidth(); i++) 
     { 
      for (int j=0; j<mBitmap.getHeight(); j++) 
      { 
       if (mBitmap.getPixel(i, j) > 0) 
       { 
        count += 1; 
       } 
      } 
     } 
     if (count == 0) 
     { 
      Log.v("MyApp", "Nothing was drawn!"); 
     } 
    } 
} 
+0

你在哪里调用'drawSomething()'? – CommonsWare

+0

编辑说明用法。谢谢 – Jason

+1

如果您确定此代码可能会重现此问题,我认为您应该简单地创建一个示例应用程序并将其放到github上,以便人们可以更轻松地进行尝试。 –

回答

0

找出问题所在。原来,画布的绘制工作正如预期的那样(在那里并不意外)。还有两个问题。

我忽略了Java int数据类型的签名。该int0xFF00FF00评估小于0。这就解释了为什么在我的故障代码的数量计算为0

,因为我最终使用mBitmapDrawable对象的draw方法绘制的,我没有看到的位图的绘制位图到屏幕上。在将我的代码更改为使用Canvas对象的drawBitmap方法后,正确绘制了可变位图。我推测BitmapDrawable在其构造函数中提供了位图副本,因此我没有看到我对位图所做的修改。