在Picasso设置的ImageView上画一条线

时间:2014-11-22 19:27:24

标签: android image android-canvas paint picasso

我想弄清楚如何简单地在Picasso中设置的图像上画一条线。我发现,如果我只是使用毕加索设置图像,给定一个URI,并尝试使用以下方法绘制颜色:

canvas = new Canvas(bitmap);
image.draw(canvas);
topEdge = new Paint();
topEdge.setColor(context.getResources().getColor(R.color.blue));
topEdge.setStrokeWidth(5);
canvas.drawLine(c1.getX(), c1.getY(), c2.getX(), c2.getY(), topEdge);

然后我发现一个崩溃,说位图首先需要是可变的。所以我在上面添加了代码:

Bitmap workingBitmap = ((BitmapDrawable) image.getDrawable()).getBitmap();
Bitmap mutableBitmap = workingBitmap.copy(Bitmap.Config.ARGB_8888, true);

然后使用new Canvas(mutableBitmap)创建画布。这消除了崩溃,但没有绘制任何东西。我相信这是因为我的Picasso之前正在设置图像,所以现在我需要使用这个新的可变位图来重置Picasso。问题是这个代码在Picasso的onSuccess()回调中。如何通过Picasso在图像上绘制Paint?

1 个答案:

答案 0 :(得分:3)

请按照以下步骤操作:

  1. 编写自己的类扩展类转换如下:

     class DrawLineTransformation implements Transformation {
    
      @Override
      public String key() {
        // TODO Auto-generated method stub
        return "drawline";
      }
    
      @Override
      public Bitmap transform(Bitmap bitmap) {
        // TODO Auto-generated method stub
        synchronized (DrawLineTransformation.class) {
          if(bitmap == null) {
            return null;
          }
          Bitmap resultBitmap = bitmap.copy(bitmap.getConfig(), true);
          Canvas canvas = new Canvas(resultBitmap);
          Paint paint = new Paint();
          paint.setColor(Color.BLUE);
          paint.setStrokeWidth(10);
          canvas.drawLine(0, resultBitmap.getHeight()/2, resultBitmap.getWidth(), resultBitmap.getHeight()/2, paint);
          bitmap.recycle();
          return resultBitmap;
        }
      }
    }
    

    2,将转换添加到使用Picasso.load()函数创建的RequestCreator,如下所示:

    Picasso picasso = Picasso.with(getApplicationContext());
    DrawLineTransformation myTransformation = new DrawLineTransformation();
    picasso.load("http://www.baidu.com/img/bdlogo.png").transform(myTransformation).into(imageview);
    
  2. 这就是你需要做的所有步骤,只是享受!