2015-09-05 6 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. Значение 0xFF00FF00int оценивает меньше 0. Это объясняет, почему счетчик в моем коде по устранению неисправностей оценивается в 0.

Я не видел любой рисунок в растровом изображении, потому что я был в конечном счете, используя draw метод mBitmapDrawable объекта рисовать растровое изображение на экран. После изменения моего кода для использования метода drawBitmap объекта Canvas измененное растровое изображение было правильно нарисовано. Я предполагаю, что BitmapDrawable делает копию предоставленного растрового изображения в своем конструкторе, и поэтому я не видел изменений, внесенных в растровое изображение.

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