我正在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