0

Activity クラスと CustomView クラスを作成しました。Activity クラスは、ローカル ストレージ (ギャラリー) から画像を取得し、ImageView として表示できます。CustomView クラスは、落書き、消去、保存などの基本的な描画機能で構築されています。

問題は、ギャラリーから画像を取得した後、その画像を A​​ctivity クラスから CustomView クラスに渡して編集する必要があるということです。どうすればいいですか?

これが私の CustomView クラスです(不要なコードを削除し、メソッド名のみを表示しました):

class DrawView extends View {

public DrawView(Context context, AttributeSet attrs){
    super(context, attrs);
    setupDrawing();
}

private void setupDrawing(){

}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    canvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
    drawCanvas = new Canvas(canvasBitmap);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    float touchX = event.getX();
    float touchY = event.getY();

    //respond to down, move and up events   
    //redraw the view   
}

//draw view - after touch event
    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);
        canvas.drawPath(drawPath, drawPaint);   
    }

}

そして、これは私の MainActivity クラスです:

public class MainActivity extends Activity implements OnClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //call the custom drawing view
    drawView = (DrawView)findViewById(R.id.drawable);
}

@Override
public void onClick(View view){
if(view.getId()==R.id.Go){

        Intent i = new Intent(
                Intent.ACTION_PICK,
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

        startActivityForResult(i, RESULT_LOAD_IMAGE);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
        Uri selectedImage = data.getData();
        String[] filePathColumn = { MediaStore.Images.Media.DATA };

        Cursor cursor = getContentResolver().query(selectedImage,
                filePathColumn, null, null, null);
        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String picturePath = cursor.getString(columnIndex);
        cursor.close();

        Intent i = new Intent(this, DrawView.class);
        i.putExtra(picturePath, true);

    }
}

ImageView を使用して get image メソッドをテストしましたが、成功しました。問題は、画像を CustomView に渡して編集する方法です。

4

2 に答える 2

0

まずDrawView、ビットマップを設定するメソッドを作成します。

class DrawView extends View {

public DrawView(Context context, AttributeSet attrs){
    super(context, attrs);
    setupDrawing();
}

public void setCanvasBitmap(Bitmap bitmap) {
        canvasBitmap = bitmap;
        drawCanvas = new Canvas(canvasBitmap);
        invalidate();
    }
...
...

次にビットマップを取得したら、 のビットマップの set を呼び出しますDrawView。すべてがうまくいくはずです..

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
        Uri selectedImage = data.getData();
        String[] filePathColumn = { MediaStore.Images.Media.DATA };

        Cursor cursor = getContentResolver().query(selectedImage,
                filePathColumn, null, null, null);
        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String picturePath = cursor.getString(columnIndex);
        cursor.close();

        Bitmap loadedBitmap = BitmapFactory.decodeFile(picturePath);
        Bitmap drawableBitmap = loadedBitmap.copy(Bitmap.Config.ARGB_8888, true);
        drawView.setCanvasBitmap(drawableBitmap);
    }
}
于 2013-10-25T07:44:37.197 に答える
0

あなたの目的のために、ブロードキャスト送信者と受信者を使用できると思います。

ステップ 1: カスタム ビュー クラスでブロードキャスト レシーバーを作成します。

       BroadcastReceiver receiver = new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {
                if (intent.getAction().equals("image_received")) {
                    // GET YOUR IMAGE HERE.
                }
            }
        };

ステップ 2: ブロードキャスト レシーバーを作成したら、レシーバーを登録します。

IntentFilter filter = new IntentFilter("image_received");
registerReceiver(receiver, filter);

ステップ 3: アクティビティからブロードキャストを送信して、インテントを使用して画像を受信します。

Intent intent = new Intent("image_received");
intent.putExtra("image", YOUR_IMAGE_OBJECT);
SendBroadcast(intent);

これがお役に立てば幸いです。

他の方法もあるかもしれませんが、これはあなたのために働くと思います。

于 2013-10-25T04:28:36.730 に答える