1

Как я могу извлечь объект Bitmap из моей программы onDraw() в моем CustomView?Как извлечь Bitmap из метода onDraw() представления?

Вот мой код:

public class DrawView extends View { 
    private Paint paint = new Paint(); 
    private Point point; 
    private LinkedList<Point> listaPontos; 
    private static Context context; 

    class Point { 

     public Point(float x, float y) { 
      this.x = x; 
      this.y = y; 
     } 

     float x = 0; 
     float y = 0; 
    } 

    public DrawView(Context context) { 
     super(context); 
     this.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT)); 
     this.context = context; 
     paint.setColor(Color.YELLOW); 
     this.listaPontos = new LinkedList<Point>(); 
    } 

    @Override 
    public void onDraw(Canvas canvas) { 

     if(listaPontos.size() != 0){ 
      for(Point point : listaPontos){ 
       canvas.drawCircle(point.x, point.y, 25, paint);  
      } 
     } 
     calculateAmount(canvas);   
    } 

    private void calculateAmount(Canvas canvas) { 
     LinkedList<Integer> colors = new LinkedList<Integer>(); 
     for(int i = 0 ; i != canvas.getWidth(); i++) 
     { 
      for(int j = 0; j != canvas.getHeight(); j++){ 

       int color = BITMAP.getPixel(i,j); //How can I get the bitmap generated on onDraw ? 

       colors.add(color); 
      } 
     } 

     int yellow = 0; 
     int white = 0; 

     for(Integer cor : colors) { 

      if(cor == Color.WHITE) { 
       white++; 
      } 
      if(cor == Color.YELLOW) { 
       yellow++; 
      } 
     } 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 

     switch (event.getAction()) { 
       case MotionEvent.ACTION_MOVE: 
        listaPontos.add(new Point(event.getX(), event.getY())); 
        break; 
     } 
     invalidate(); 
     return true; 
    } 
} 

Большое спасибо заранее;)

EDIT: растровый вещь, чтобы вычислить каждый цвет пикселя, как я могу добавить фоновое изображение к моему DrawView? Я протестировал this.setBackgroundResource (R.drawable.a); у конструктора, но не получилось, спасибо еще раз;)

+1

Вы можете установить фоновое изображение в .xml. Просто установите android: background = "@ drawable/your_drawable". Также имейте в виду, что нарисованные элементы в вашем DrawView могут накладывать фоновое изображение. –

+0

Я не используя xml, mBitmapCanvas.drawColor (Color.WHITE), стирал содержимое, теперь добавил изображение с помощью Bitmap b = BitmapFactory.decodeResource (getResources(), R.drawable.a); mBitmapCanvas.drawBitmap (b, 0, 0, краска); но изображение растягивается вниз .. не максимизировано почему? – TiagoM

+1

Вот как правильно загрузить Bitmap из ресурсов: http://pastebin.com/LsEWpSMq просто используйте Bitmap b = BitmapResloader.decodeBitmapFromResource (ресурсы res, int resId, int reqWidth, int reqHeight); Также, пожалуйста, выберите мой ответ правильно, если он ответил на исходный вопрос. –

ответ

2

Невозможно извлечь растровое изображение из холста. По крайней мере, не напрямую.

Однако можно дро на Bitmap с Canvas, а затем использовать Bitmap.

Bitmap mDrawBitmap; 
Canvas mBitmapCanvas; 
Paint drawPaint = new Paint(); 

@Override 
public void onDraw(Canvas canvas) { 

    drawPaint.setColor(Color.RED); 

    if (mDrawBitmap == null) { 
     mDrawBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); 
     mBitmapCanvas = new Canvas(mDrawBitmap); 
    } 

    // clear previously drawn stuff 
    mBitmapCanvas.drawColor(Color.WHITE); 

    // draw on the btimapCanvas 
    mBitmapCanvas.drawStuff(...); 
    //... and more 

    // after drawing with the bitmapcanvas, 
    //all drawn information is stored in the Bitmap  


    // draw everything to the screen 
    canvas.drawBitmap(mDrawBitmap, 0, 0, drawPaint); 
} 

После того, как метод onDraw() закончил, все обращается информация будет нарисована на экране (по телефону canvas.drawBitmap(...), а также храниться в вашем Bitmap объекта (потому что все начертить операции были сделаны на Canvas, который был создан с Bitmap)

+0

Где объект bitmapCanvas? вы ошиблись? это mBitmapCanvas? – TiagoM

+0

Да, конечно, извините, я исправлю это :) –

+0

Я проверю, смогу ли я это сделать сейчас, я соглашусь, если все будет хорошо. спасибо, кстати за ответ :) – TiagoM