Android编辑Drawable并将其设置为另一个活动中的ImageView

时间:2014-07-02 23:15:05

标签: android canvas bitmap imageview drawable

我有一个方法plotPoints(float x,float y),我想用它绘制一个drawable上的一个点。我尝试使用位图和画布向drawable添加一个点。然后,根据是否已调用plotPoints(),我将单独活动的ImageView设置为原始drawable的位图(不带点),或者将编辑后的位图设置为点。但是,ImageView始终显示原始drawable,它从不显示绘制的点。如果你能提供帮助,请告诉我。

以下是相关代码:

Bitmap labBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.lab_image);

plotPoints()方法:

    public void plotPoints(float x, float y) {
    pointsPlotted = true;

    //Paint for LocationActivity
    Paint labPaint = new Paint();
    labPaint.setColor(color.holo_purple);

    //Initialize tempBitmap and attach a new canvas to it    
    Bitmap tempBitmap = Bitmap.createBitmap(labBitmap.getWidth(), labBitmap.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas tempCanvas = new Canvas(tempBitmap);

    //Draw the image Bitmap onto the Canvas
    tempCanvas.drawBitmap(labBitmap, 0, 0, null);

    //Set paint Color and draw X and Y coordinates on Canvas
    tempCanvas.drawPoint(x, y, labPaint);
}

这是我决定使用哪个位图并开始新活动的地方:

    public void openLabView() {
    //Compress bitmap for smoother pass to LocationActivity
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    byte[] b;

    Intent intent = new Intent(this, LocationActivity.class);

    if(pointsPlotted) {
        tempBitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
        b = baos.toByteArray();
        intent.putExtra("imageBitmap", b);
    }
    else {
        labBitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
        b = baos.toByteArray();
        intent.putExtra("imageBitmap", b);
    }

    startActivity(intent);
}

这是新活动的onCreate():

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_location);

    //Receive Bitmap for ImageView
    Bundle extras = getIntent().getExtras();
    byte[] b = extras.getByteArray("imageBitmap");

    Bitmap imageBitmap = BitmapFactory.decodeByteArray(b, 0, b.length);
    ImageView image = (ImageView) findViewById(R.id.lab_image);

    image.setImageBitmap(imageBitmap);
}

1 个答案:

答案 0 :(得分:0)

plotPoints()方法中,您可以在该方法的范围内定义Bitmap tempBitmap。因此,在该方法之外(openLabView()),它没有引用tempBitmap中的plotPoints(),但可能在类范围中引用另一个同名的Bitmap。这可能是Bitmap中生成的openLabView()似乎没有变化的原因。

我可以建议在Bitmap tempBitmap中稍微重命名plotPoints(),以便更轻松地进行调试,并查看Bitmap内的plotPoints()是否可以传递给openLabView()Bitmap应该修改Canvas。 (基本上传递给Bitmap构造函数的Canvas就是你想要的。)