我有一个方法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);
}
答案 0 :(得分:0)
在plotPoints()
方法中,您可以在该方法的范围内定义Bitmap tempBitmap
。因此,在该方法之外(openLabView()
),它没有引用tempBitmap
中的plotPoints()
,但可能在类范围中引用另一个同名的Bitmap
。这可能是Bitmap
中生成的openLabView()
似乎没有变化的原因。
我可以建议在Bitmap tempBitmap
中稍微重命名plotPoints()
,以便更轻松地进行调试,并查看Bitmap
内的plotPoints()
是否可以传递给openLabView()
, Bitmap
应该修改Canvas
。 (基本上传递给Bitmap
构造函数的Canvas
就是你想要的。)