将 ImageView 传递给下一个 activity
Pass ImageView to next activity
我已经搜索了好几天了,但我似乎找不到我做错了什么,所以你是我最后的希望!
我有第一张 activity 多张图片。当我按下一个时,我希望第二个 activity 打开时只显示单击的图像。我正在尝试将点击的图像转换为位图,然后按意图发送它,以便我的第二个 activity 可以检索它。
这是我的第一个 Activity 的代码(位图....'drawable' 带有红色下划线,意向.....'this, SubActivity.class' 也是如此)。我做错了什么?
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView imgview = (ImageView) findViewById(R.id.image);
imgview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Haal de drawable op uit de imageview
Drawable drawable = imgview.getDrawable();
// Zet de drawable om naar een ByteArray zodat we deze kunnen versturen met een intent
// want we kunnen niet zomaar een drawable in een intent gooien
Bitmap bitmap = BitmapFactory.decodeResource(drawable);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
// Maak de intent aan en stuur de ByteArray mee waar de drawable in zit
Intent intent;
intent = new Intent(this,SubActivity.class);
intent.putExtra("witte_tulp_small", b);
startActivity(intent);
}
});
}
}
这是我第二个 Activity:
中的代码
public class SubActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sub);
// Intent uitlezen
Bundle extras = getIntent().getExtras();
byte[] b = extras.getByteArray("witte_tulp_small");
Bitmap bmp = BitmapFactory.decodeByteArray(b, 0, b.length);
ImageView image = (ImageView) findViewById(R.id.image);
image.setImageBitmap(bmp);
}
}
您应该只将图像的 source 发送给另一个 activity,这将重新创建 imageview
位图是Parcelable
。您可以将可打包对象放入 bundle 或 intent
Intent intent = new Intent(this, SubActivity.class);
intent.putExtra("bitmap", bitmap);
并在另一端回读
Bitmap bitmap = (Bitmap) getIntent().getParcelableExtra("bitmap");
如果两个 Activity 在同一个应用程序中,您可以只传递 drawable id:
在MainActivity
intent.putExtra("witte_tulp_small", R.id.image);
在SubActivity
中:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sub);
// Intent uitlezen
Bundle extras = getIntent().getExtras();
int resId = extras.getInt("witte_tulp_small");
ImageView image = (ImageView) findViewById(R.id.image);
image.setImageResource(resId);
}
我已经搜索了好几天了,但我似乎找不到我做错了什么,所以你是我最后的希望!
我有第一张 activity 多张图片。当我按下一个时,我希望第二个 activity 打开时只显示单击的图像。我正在尝试将点击的图像转换为位图,然后按意图发送它,以便我的第二个 activity 可以检索它。
这是我的第一个 Activity 的代码(位图....'drawable' 带有红色下划线,意向.....'this, SubActivity.class' 也是如此)。我做错了什么?
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView imgview = (ImageView) findViewById(R.id.image);
imgview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Haal de drawable op uit de imageview
Drawable drawable = imgview.getDrawable();
// Zet de drawable om naar een ByteArray zodat we deze kunnen versturen met een intent
// want we kunnen niet zomaar een drawable in een intent gooien
Bitmap bitmap = BitmapFactory.decodeResource(drawable);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
// Maak de intent aan en stuur de ByteArray mee waar de drawable in zit
Intent intent;
intent = new Intent(this,SubActivity.class);
intent.putExtra("witte_tulp_small", b);
startActivity(intent);
}
});
}
}
这是我第二个 Activity:
中的代码public class SubActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sub);
// Intent uitlezen
Bundle extras = getIntent().getExtras();
byte[] b = extras.getByteArray("witte_tulp_small");
Bitmap bmp = BitmapFactory.decodeByteArray(b, 0, b.length);
ImageView image = (ImageView) findViewById(R.id.image);
image.setImageBitmap(bmp);
}
}
您应该只将图像的 source 发送给另一个 activity,这将重新创建 imageview
位图是Parcelable
。您可以将可打包对象放入 bundle 或 intent
Intent intent = new Intent(this, SubActivity.class);
intent.putExtra("bitmap", bitmap);
并在另一端回读
Bitmap bitmap = (Bitmap) getIntent().getParcelableExtra("bitmap");
如果两个 Activity 在同一个应用程序中,您可以只传递 drawable id:
在MainActivity
intent.putExtra("witte_tulp_small", R.id.image);
在SubActivity
中:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sub);
// Intent uitlezen
Bundle extras = getIntent().getExtras();
int resId = extras.getInt("witte_tulp_small");
ImageView image = (ImageView) findViewById(R.id.image);
image.setImageResource(resId);
}