0

У меня есть активность, которая загружает изображение из URL-адреса с помощью библиотеки Picasso.My bitmap становится черным с canvas.drawColor (Color.TRANSPARENT, PorterDuff.Mode.MULTIPLY) Android

Это изображение больше, чем экран, поэтому в методе «onTouch» реализуется код для прокрутки изображения путем имитации карты.

Проблема в том, что я рисую круги на этом изображении, каждый раз, когда я нажимаю на экран, я должен нарисовать круг и стереть предыдущий.

Использование этой строки canvas.drawColor (Color.TRANSPARENT, PorterDuff.Mode.MULTIPLY); превращает мой весь растровый рисунок в черный цвет.

мне нужно нарисовать круг над изображением, когда я нажимаю на экране и удалить предыдущие

Вот фрагмент кодекса моей деятельности

Чтобы загрузить изображение в ImageView и создать растровое изображение, чтобы нарисовать холст на копия растровый

Picasso.with(getApplicationContext()).load(url).into(imageView, new Callback() { 
    @Override 
    public void onSuccess() { 
    imageView.setVisibility(View.VISIBLE); 
    lineABmp = ((BitmapDrawable) imageView.getDrawable()).getBitmap(); 
    lineAMutBmp = lineABmp.copy(Bitmap.Config.RGB_565, true); 
    copy = Bitmap.createBitmap(lineAMutBmp); 
    canvas = new Canvas(copy); 
    imageView.setImageBitmap(copy); 
} 
}); 

Чтобы нарисовать круг

private void drawBeacon() { 

    canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.MULTIPLY); 
    canvas.drawCircle(startX, startY, circle_radius, circle); 

    canvas.drawRect(startX - 50,//left 
      startY - 30, // top 
      startX + 50, //right 
      startY - 10, rect); //bottom 

    canvas.drawText(" Minor: " + beacon.getMinor(), 
      startX - 45, 
      startY - 15, text); 

    imageView.invalidate(); 


} 

INIT Paint

init(){ 
    circle = new Paint(); 
    circle.setColor(Color.rgb(46, 204, 113)); 
    circle.setStyle(Paint.Style.FILL); 
    circle.setStrokeWidth(10); 

    circle_radius = 10; 

    text = new Paint(); 
    text.setColor(Color.BLACK); 
    text.setTextSize(16); 
    text.setFakeBoldText(true); 

    rect = new Paint(); 
    rect.setColor(ContextCompat.getColor(getApplicationContext(), R.color.white_80)); 
    rect.setStyle(Paint.Style.FILL_AND_STROKE); } 

OnTouch, в этом методе я делаю масштабирование и перетаскивание изображения и способ вызова рисовать круги

public boolean onTouch(View v, MotionEvent event) { 
    ImageView view = (ImageView) v; 
    view.setScaleType(ImageView.ScaleType.MATRIX); 
    float[] m = new float[9]; 
    matrix.getValues(m); 
    float transX = m[Matrix.MTRANS_X] * -1; 
    float transY = m[Matrix.MTRANS_Y] * -1; 

    // Handle touch events here... 
    switch (event.getAction() & MotionEvent.ACTION_MASK) { 

     case MotionEvent.ACTION_DOWN: //first finger down only 
      savedMatrix.set(matrix); 

      if (draw) { 
       startX = Math.abs((event.getX() + transX)/scale); 
       startY = Math.abs((event.getY() + transY)/scale); 
       drawBeacon(); 
      } else { 
       ... 
      } 

      break; 
     case MotionEvent.ACTION_UP: //first finger lifted 
     case MotionEvent.ACTION_POINTER_UP: //second finger lifted 
      ... 
      break; 
     case MotionEvent.ACTION_POINTER_DOWN: //second finger down 
      .... 
      break; 
     case MotionEvent.ACTION_MOVE: 
      .... 
       break; 
      } 
    } //perform the transformation. 

    view.setImageMatrix(matrix); 
    return true; // indicate event was handled 

} 

ответ

0

Наконец это сделать сам. Я создаю копию растрового изображения внутри моего метода

private void drawBeacon() { 
    Bitmap tmpBitmap = Bitmap.createBitmap(copyOriginal); 
    Canvas canvas = new Canvas(tmpBitmap); 

    .... 

    bitmapLayers.add(1, tmpBitmap); 
    bt_delete.setVisibility(View.VISIBLE); 
    imageView.setImageBitmap(tmpBitmap); 
    draw = false; 

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