使用 URI 通过 intent 将图像传递给另一个 activity
Pass image through intent using URI to another activity
我是编程初学者。我正在尝试创建 Meme 生成器应用程序。我已经到了我在 GridView 中显示一组图像的地步,用户可以单击一个图像,它将把它们带到一个新的 activity,用户可以在其中输入顶部和底部文本。
非常感谢你根据我的代码在下面提供的帮助。
- A) 我正在尝试转换位图中的相对布局(两个 TextView 和一个 ImageView)。代码是否正确?
- - B) 当用户单击创建按钮时,我想将从相对布局创建的位图发送到 FullImage.java activity。是个
您认为代码正确吗?
- - C) 当用户点击创建按钮时,当前我得到 "Failed Binder Transaction"。我认为这是因为我正在通过一个
图片。我试图理解和使用如何传递 URI 但不是
成功的。我试图在 SO 和其他博客上找到片段,但是
不成功。你能给我详细的代码吗? (作为
初学者,不胜感激!)
DetailsActivity.java
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;
/**
* Created by Psp on 2016-03-03.
*/
public class DetailsActivity extends AppCompatActivity {
EditText etTop, etBottom;
TextView tvTop, tvBottom;
Button bCreate;
@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);
Intent sendImage = new Intent(DetailsActivity.this, FullImage.class);
sendImage.putExtra("pic", bitmap);
startActivity(sendImage);
}
});
}
}
FullImage.java
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 startingIntent = getIntent();
String whatYouSent = startingIntent.getStringExtra("pic");
Bitmap bitmap = BitmapFactory.decodeFile("pic");
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();
}
});
}
}
在您的 FullImageActivity 中,执行此操作以检索位图
Intent intent = getIntent();
Bitmap bitmap = (Bitmap) intent.getParcelableExtra("pic");
这是因为android中的位图class实现了parcelable。
http://developer.android.com/reference/android/graphics/Bitmap.html
我是编程初学者。我正在尝试创建 Meme 生成器应用程序。我已经到了我在 GridView 中显示一组图像的地步,用户可以单击一个图像,它将把它们带到一个新的 activity,用户可以在其中输入顶部和底部文本。
非常感谢你根据我的代码在下面提供的帮助。
- A) 我正在尝试转换位图中的相对布局(两个 TextView 和一个 ImageView)。代码是否正确?
- - B) 当用户单击创建按钮时,我想将从相对布局创建的位图发送到 FullImage.java activity。是个 您认为代码正确吗?
- - C) 当用户点击创建按钮时,当前我得到 "Failed Binder Transaction"。我认为这是因为我正在通过一个
图片。我试图理解和使用如何传递 URI 但不是
成功的。我试图在 SO 和其他博客上找到片段,但是 不成功。你能给我详细的代码吗? (作为 初学者,不胜感激!)
DetailsActivity.java
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;
/**
* Created by Psp on 2016-03-03.
*/
public class DetailsActivity extends AppCompatActivity {
EditText etTop, etBottom;
TextView tvTop, tvBottom;
Button bCreate;
@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);
Intent sendImage = new Intent(DetailsActivity.this, FullImage.class);
sendImage.putExtra("pic", bitmap);
startActivity(sendImage);
}
});
}
}
FullImage.java
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 startingIntent = getIntent();
String whatYouSent = startingIntent.getStringExtra("pic");
Bitmap bitmap = BitmapFactory.decodeFile("pic");
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();
}
});
}
}
在您的 FullImageActivity 中,执行此操作以检索位图
Intent intent = getIntent();
Bitmap bitmap = (Bitmap) intent.getParcelableExtra("pic");
这是因为android中的位图class实现了parcelable。 http://developer.android.com/reference/android/graphics/Bitmap.html