【发布时间】:2012-03-22 18:31:47
【问题描述】:
我正在 Android 上制作一个简单的绘图应用程序。我使用 ApiDemos 示例提供的 FingerPaint.java 作为基础,添加了一些功能并去掉了其他功能。它基本上创建了一个带有位图的画布,您可以在上面绘制。
我添加了“打开”和“保存”功能。 “保存”功能使用 getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) 功能将位图存储到文件中,“打开”功能启动 startActivityForResult(photoPickerIntent, 1) 并加载所选图像。
问题是我无法在手动打开的位图上绘图。用手指绘图时会显示一条痕迹,但一旦将手指从屏幕上抬起,该痕迹就会消失。如果我保存此位图,它将在图库中完全未修改地显示。但是在启动应用程序时,我可以在画布上正常绘制。
我很确定这是一个非常简单的问题,因为我对 Canvas 和 Bitmap 的工作原理缺乏了解。无论如何,这是我的代码。
创建自定义视图时:
public MyView(Context c){
super(c);
mBitmap = Bitmap.createBitmap(480, 800, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
mPath = new Path();
mBitmapPaint = new Paint(Paint.DITHER_FLAG);
}
OnDraw 覆盖:
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(0xFFAAAAAA);
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
canvas.drawPath(mPath, mPaint);
}
我的“打开”功能:
private void open(){
//checkSD: 1 if read only, 2 if RW
if(checkSD()==1 || checkSD()==2){
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, 1);
}
}
最后是我的 onActivityResult:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//RequestCode:1 image
if (requestCode == 1) {
if (resultCode == Activity.RESULT_OK) {
Uri selectedImage = data.getData();
try{
InputStream fIn = getContentResolver().openInputStream(selectedImage);
mBitmap = BitmapFactory.decodeStream(fIn);
fIn.close();
} catch (Exception e){
e.printStackTrace();
}
}
}
}
我认为我的错误在这段代码中,但如果有人认为它可能是我实际绘制的方式,我没有修改 FingerPaint.java 示例中的 touch_xxx 和 onTouchEvent,所以你可以看看(如果由于某种原因看不到,请让我在此处发布)。
谢谢!
【问题讨论】: