0

ImageView でビットマップを描画しようとしていますが、表示されません... ビットマップを作成して Intent Extra に保存しましたが、新しいアクティビティで ImageView に描画できません。

新しいアクティビティを呼び出す私のコードは次のとおりです。

public void onClickShare(View v) {

        Intent myIntent = new Intent(this, Share.class);

        Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);

        myIntent.putExtra("createdImg", b);
        startActivity(myIntent);

    }

そして、新しいアクティビティについて:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.share);

        backgroundImg = (ImageView)findViewById(R.id.imageView1);

        Intent myIntent = getIntent();      
        Bitmap bitmap = (Bitmap) myIntent.getParcelableExtra("createdImg");

        backgroundImg.setImageBitmap(bitmap);
    }

私は何が欠けていますか?ありがとう!

4

3 に答える 3

0

私はすべての回答と他の調査からそれを少し取り入れて、うまく機能する以下のコードを思いつきました:

新しいアクティビティを呼び出す:

public void onClickShare(View v) {

        Intent myIntent = new Intent(this, Share.class); 

        // create bitmap screen capture
        Bitmap bitmap;
        View v1 = v.getRootView();
        v1.setDrawingCacheEnabled(true);
        bitmap = Bitmap.createBitmap(v1.getDrawingCache());

        // create a new one with the area I want
        Bitmap bmpLast = Bitmap.createBitmap(bitmap, 25, 185, 430, 520);        
        v1.setDrawingCacheEnabled(false);

        //create an empty bitmap with the size I need
        Bitmap bmOverlay = Bitmap.createBitmap(480, 760, Bitmap.Config.ARGB_8888);

        //draw the content on the bitmap
        Canvas c = new Canvas(bmOverlay); 
        c.drawBitmap(bmpLast, 0, 0, null);

        //compress the bitmap to send to other activity
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bmpLast.compress(Bitmap.CompressFormat.PNG, 100, stream);
        byte[] byteArray = stream.toByteArray();    

        //store compressed bitmap 
        myIntent.putExtra("createdImg", byteArray);     

        startActivity(myIntent);
    }

そして、新しいアクティビティについて:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.share);

    //decompress the bitmap
    byte[] byteArray = getIntent().getByteArrayExtra("createdImg");
    Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);

    //set the imageview with the bitmap
    backgroundImg = (ImageView)findViewById(R.id.imageView1);
    backgroundImg.setImageDrawable(new BitmapDrawable(getResources(), bmp));
}

みんな、ありがとう!=)

于 2013-11-06T21:26:35.207 に答える
0

ByteArray として送信し、受信アクティビティでデコードしてみてください。

ByteArrayOutputStream stream = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();

Intent in1 = new Intent(this, Share.class);
in1.putExtra("image",byteArray);

2回目の活動で

byte[] byteArray = getIntent().getByteArrayExtra("image");
Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
于 2013-11-05T22:40:16.837 に答える
0

このように試すこともできます

Bundle bundle = new Bundle();
bundle.putParcelable("createdImg", b);
intent.putExtras(bundle);

そして次の活動で

Bundle bundle = this.getIntent().getExtras();
Bitmap bmap = bundle.getParcelable("createdImg");

このチュートリアルhttp://android-er.blogspot.com/2011/10/pass-bitmap-between-activities.htmlで指定されているように

于 2013-11-06T00:00:26.333 に答える