我正在Android上制作一个简单的绘图应用程序。我使用ApiDemos示例提供的FingerPaint.java作为基础,添加了一些功能并删除了其他功能。它基本上创建一个带有位图的画布,可以在上面绘制。在Android 2.3中编辑位图
我添加了“打开”和“保存”功能。 “保存”功能使用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,所以您可以看看它(或者让我在这里发布,如果你由于某种原因无法看到它)。
谢谢!
谢谢,但这并不完全解决它。问题是,当我使用open函数加载位图时,位图显示在屏幕上,但是在我从屏幕上抬起手指的那一刻,我在它上面绘制的任何东西都会消失。如果我点击保存位图存储没有任何修改,所以我相当确定这是不是我存储图像的方式的问题,但与我加载一个新的位图的方式。 – ziritrion 2012-03-21 22:46:33