2016-03-29 7 views
0

Ich versuche eine Meme-Generator-App zu erstellen. Dazu konvertiere ich ein Relatives Layout mit einem Bild und ein paar Textansichten in eine Bitmap. Dann übergebe ich dieses Bild zu einer neuen Aktivität. Aber nichts zeigt sich in der zweiten Aktivität. Es ist leer. Kannst du sehen warum?Das von RelativeLayout erstellte Bild kann nicht mit Absicht an eine neue Aktivität übergeben werden.

Ich würde jede mögliche Hilfe schätzen, die Sie zur Verfügung stellen können. Damit habe ich mich schon eine ganze Weile herumgeschlagen.

Vielen Dank im Voraus. Hier

ist der Code:

DetailsActivity.java (Erste Aktivität Relative Layout ein Bild und ein paar Textviews enthält, die ich in ein Bild umwandeln)

package com.jobaka.www.jobaka; 

import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.text.Editable; 
import android.text.TextWatcher; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ImageView; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 

import java.util.HashMap; 

/** 
* Created by Psp on 2016-03-03. 
*/ 
public class DetailsActivity extends AppCompatActivity { 

    EditText etTop, etBottom; 
    TextView tvTop, tvBottom; 
    Button bCreate; 
    String imgstring; 

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

     Intent intent = getIntent(); 
     int id = intent.getIntExtra("id", -1); 
     if(id != -1){ 
      Bitmap bitmap = BitmapFactory.decodeResource(getResources(), id); 
      ImageView imageView = (ImageView) findViewById(R.id.image); 
      imageView.setImageBitmap(bitmap); 
     }else{ 

     } 

     //imageUri = Uri.parse(extras.getString("imageUri")); 

     etTop = (EditText) findViewById(R.id.etTop); 
     tvTop = (TextView) findViewById(R.id.tvTop); 
     etTop.addTextChangedListener(new TextWatcher() { 
      public void afterTextChanged(Editable s) { 
       tvTop.setText(s.toString()); 
      } 

      public void beforeTextChanged(CharSequence s, int start,int count, int after) {} 

      public void onTextChanged(CharSequence s, int start,int before, int count) {} 
     }); 

     etBottom = (EditText) findViewById(R.id.etBottom); 
     tvBottom = (TextView) findViewById(R.id.tvBottom); 
     etBottom.addTextChangedListener(new TextWatcher() { 
      public void afterTextChanged(Editable sb) { 
       tvBottom.setText(sb.toString()); 
      } 

      public void beforeTextChanged(CharSequence sb, int start,int count, int after) {} 

      public void onTextChanged(CharSequence sb, int start,int before, int count) {} 
     }); 

     bCreate = (Button) findViewById(R.id.bCreate); 
     bCreate.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       RelativeLayout v = (RelativeLayout)findViewById(R.id.iFrame); 
       Bitmap bitmap = Bitmap.createBitmap(v.getWidth(), v.getHeight(), 
         Bitmap.Config.ARGB_8888); 
       Canvas canvas = new Canvas(bitmap); 
       view.draw(canvas); 

       HashMap<String, Bitmap> mbit = new HashMap<String, Bitmap>(); 
       mbit.put(imgstring, bitmap); 

       Intent sendImage = new Intent(DetailsActivity.this, FullImage.class); 
       sendImage.putExtra("key", imgstring); 
       startActivity(sendImage); 
      } 
     }); 




    } 


} 

FullImage.java (Zweite Aktivität wo nichts erscheint, nachdem ich auf den Knopf auf der vorherigen erstellen klicken - vor Aktivität)

package com.jobaka.www.jobaka; 

import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.widget.ImageView; 

public class FullImage extends AppCompatActivity { 

    ImageView finalimage; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_full_image); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     Intent intent = getIntent(); 
     String imgstring = intent.getExtras().getString("key"); 


     //String imgstring = startingIntent.getStringExtra("pic"); 
     Bitmap bitmap = BitmapFactory.decodeFile(imgstring); 
     finalimage = (ImageView) findViewById(R.id.ivFull); 
     finalimage.setImageBitmap(bitmap); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 
    } 

} 
+0

ist dies, weil mString beliebige Bitmap nicht haben. Du kannst bitmapa nicht normal in die Absicht Extra übergeben. Sie haben zwei Möglichkeiten entweder Bitmap serialisierbar zu machen, dann in Intent zu übergehen oder eine Singleton-Klasse zu erstellen, die dafür sorgt, dass Bitmap von einer Aktivität zu einer anderen Aktivität weitergegeben wird. – dex

+0

Wenn Sie etwas Code für das wollen, kann ich Ihnen zur Verfügung stellen. – dex

+0

Ich würde vorschlagen, dass Sie das Bild eher in einer statischen Klasse behalten, anstatt es in der Absicht zu übergeben, da dies die Performance beeinträchtigen würde. – Ayaanp

Antwort

0

senden

Bitmap bitmap = Bitmap.createBitmap(v.getWidth(), v.getHeight(), 
          Bitmap.Config.ARGB_8888); 
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); 
byte[] b = byteArrayOutputStream .toByteArray(); 
intent.putExtra("key", b); 

Empfangen:

Bundle extras = getIntent().getExtras(); 
byte[] b = extras.getByteArray("key");  
Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0, b.length); 
finalimage.setImageBitmap(bitmap); 
Verwandte Themen