2016-07-13 94 views
1

我正在为我的android课程制作一个meme生成器应用程序。我已经获得了一个API来生成100个流行的模因,当点击它时,它会将您带到EditMemeActivity,您可以在其中输入上下文。然后,有一个Create Meme按钮,它将带您进入MemeActivity,您最终可以保存/与朋友分享。目前,当单击创建meme按钮时,该meme图片将转换为位图,并在下一页显示正常。我希望能够将用户在图像上输入的上部和下部文本保存为位图。由于某些模板图像的大小不同,因此我将它们周围的黑色背景设置为约400X300像素,所以我希望能够捕获整个图像视图并将输入的文本置入。以下是我的两个活动的代码:Android:如何将ImageView转换为位图并传递给另一个活动?

public class EditMemeActivity extends AppCompatActivity { 

@Bind(R.id.editMemeImage) ImageView mEditMemeImage; 
@Bind(R.id.editUpperText) EditText mEditUpperText; 
@Bind(R.id.editLowerText) EditText mEditLowerText; 
@Bind(R.id.saveMeme) Button mSaveMeme; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_edit_meme); 
    ButterKnife.bind(this); 

    Intent intent = getIntent(); 
    String image = intent.getStringExtra("image"); 
    final String upper = mEditUpperText.getText().toString(); 
    final String lower = mEditLowerText.getText().toString(); 
    final Bitmap memeBitmap = getBitmapFromURL(image); 

    Picasso.with(EditMemeActivity.this).load(image).into(mEditMemeImage); 

    mSaveMeme.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(EditMemeActivity.this, MemeActivity.class); 
      intent.putExtra("bitmap", memeBitmap); 
      intent.putExtra("upper", upper); 
      intent.putExtra("lower", lower); 
      startActivity(intent); 
     } 
    }); 
} 

public static Bitmap getBitmapFromURL(String image) { 
    try { 
     URL url = new URL(image); 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     connection.setDoInput(true); 
     connection.connect(); 
     InputStream input = connection.getInputStream(); 
     Bitmap myBitmap = BitmapFactory.decodeStream(input); 
     return myBitmap; 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 

}

public class MemeActivity extends AppCompatActivity { 
@Bind(R.id.memeImageView) ImageView mMemeImageView; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_meme); 
    ButterKnife.bind(this); 

    Intent intent = getIntent(); 
    String upperText = intent.getStringExtra("upper"); 
    String lowerText = intent.getStringExtra("lower"); 
    byte[] byteArray = getIntent().getByteArrayExtra("bitmap"); 
    Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); 

    mMemeImageView.setImageBitmap(bitmap); 
} 

}

回答

0

试试这个

Intent intent = new Intent(); 
    Bundle bundle = new Bundle(); 
    bundle.putParcelable("bitmap",bitmap); 
    intent.putExtras(bundle); 
1

代码从ImageView的

得到位图
Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap(); 

位图实现Parcelable,所以你总是可以通过它的意图:

Intent intent = new Intent(this, NewActivity.class); 
intent.putExtra("key", bitmap); 

得到位图的另一个活动

Intent intent = getIntent(); 
Bitmap bitmap = (Bitmap) intent.getParcelableExtra("key"); 
0

你可以使用我的代码将图像转换为位图

public static Bitmap drawableToBitmap(Drawable drawable) { 
     if (drawable instanceof BitmapDrawable) { 
      return ((BitmapDrawable) drawable).getBitmap(); 
     } 

     int width = drawable.getIntrinsicWidth(); 
     width = width > 0 ? width : 1; 
     int height = drawable.getIntrinsicHeight(); 
     height = height > 0 ? height : 1; 

     Bitmap bitmap = Bitmap.createBitmap(width, height, 
       Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(bitmap); 
     drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); 
     drawable.draw(canvas); 

     return bitmap; 
    } 

而且通过位图的另一个活动Link

注意:小心大的位图它 可能会导致错误

解决方案: 保存图片到SD卡,并在此图像设置为ImageView的一个活动。

...

相关问题