私はAndroidで簡単な描画アプリを作っています。 ApiDemosサンプルで提供されているFingerPaint.javaをベースに使用しています。いくつかの機能を追加し、他のものを取り除いています。基本的には上に描画できるビットマップを持つキャンバスを作成します。Android 2.3でビットマップを編集する
「公開」と「保存」機能を追加しました。 「保存」機能は、getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)関数を使用してビットマップをファイルに格納し、「オープン」機能はstartActivityForResult(photoPickerIntent、1)を起動し、選択したイメージをロードします。
問題は、手動で開いたビットマップを描画できないことです。指で描くとトレースが表示されますが、指が画面から持ち上がるとトレースが消えます。このビットマップを保存すると、ギャラリーに完全に変更されずに表示されます。しかし、アプリケーションを起動するときに、私はキャンバス上でうまく描画することができます。
これは、キャンバスとビットマップがどのように動作するかを理解していないため、非常に単純な問題であると確信しています。とにかく、ここに私のコードです。
私のカスタムビューの作成:
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を変更していないので、見てみることができますそれは(何かの理由でそれを見ることができない場合は、私にここに投稿するように頼んでください)。
ありがとうございます!
ありがとうございますが、それで解決しません。問題は、開いている関数を使ってビットマップを読み込むと、ビットマップが画面に表示されますが、その上に描画するものは、画面から指を離す瞬間に消えてしまうことです。私が保存をクリックすると、ビットマップは変更されずに保存されるので、画像を保存する方法には問題はないが、新しいビットマップをロードする方法は間違いないと私は確信している。 – ziritrion