将 Intended 位图值分配给 imageView
Assign the Intended bitmap value to an imageView
我正在使用适配器将项目加载到网格中。然后当用户 select 网格中的项目时,它会打开自定义屏幕。在那个过程中,我发送了一些数据,稍后我可以在自定义屏幕中加载这些数据。我已成功加载 isVeg
项目以外的其他项目。我得到的响应是 isVeg
, [false, true, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true]
.
我的问题是我的意图是否正确。如果它是正确的,我如何将它分配给 ImageView。
我正在使用适配器将数据发送到下一个活动
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(
R.layout.pasta_single_item, parent, false);
holder.ivImage = (ImageView) convertView
.findViewById(R.id.grid_image);
holder.tvImageIcon = (ImageView) convertView
.findViewById(R.id.icon);
holder.tvHeader = (TextView) convertView
.findViewById(R.id.grid_text);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tvHeader.setText(descriptions.get(position));
Picasso.with(this.context).load(imageUrls.get(position))
.into(holder.ivImage);
final String strIsVag=isVeg.get(position);
final Bitmap mBitmap;
if (strIsVag.contains("true")) {
mBitmap = BitmapFactory.decodeResource(
this.context.getResources(), R.drawable.veg);
} else {
mBitmap = BitmapFactory.decodeResource(
this.context.getResources(), R.drawable.nonveg);
}
holder.tvImageIcon.setImageBitmap(mBitmap);
Button customizePasta = (Button) convertView
.findViewById(R.id.bt_direct_customize);
customizePasta.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent next = new Intent(context, ActivityPastaCustomize.class);
next.putExtra("description", descriptions.get(position));
next.putExtra("imageUrl", imageUrls.get(position));
next.putExtra("price", price.get(position));
next.putExtra("isVeg", mBitmap); //intent the image for selected item
context.startActivity(next);
((Activity) context).overridePendingTransition(
R.anim.slide_in_right, R.anim.slide_out_left);
}
});
return convertView;
}
private class ViewHolder {
private TextView tvHeader;
private ImageView ivImage;
private ImageView tvImageIcon;
}
}
正在接收数据 activity
final String description = getIntent().getStringExtra("description");
String imageUrl = getIntent().getStringExtra("imageUrl");
final String Strprice = getIntent().getStringExtra("price");
String mBitmap = getIntent().getStringExtra("isVeg"); // recives the item
设置接收数据
final TextView descriptionTV = (TextView) findViewById(R.id.grid_text);
descriptionTV.setText(description);
final TextView priceTV = (TextView) findViewById(R.id.pasta_price);
priceTV.setText("PRICE RS " + Strprice);
ImageView imageView = (ImageView) findViewById(R.id.grid_image);
Picasso.with(this).load(imageUrl).into(imageView);
我建议将位图对象转换为字符串并像这样发送到您想要的 activity:-
next.putExtra("isVeg", BitMapToString(mBitmap));
这些这个函数写在ViewHolder下面class这样
private class ViewHolder {
private TextView tvHeader;
private ImageView ivImage;
private ImageView tvImageIcon;
}
public String BitMapToString(Bitmap bitmap){
ByteArrayOutputStream baos=new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG,100, baos);
byte [] b=baos.toByteArray();
String temp=Base64.encodeToString(b, Base64.DEFAULT);
return temp;
}
然后在接收中 activity 将字符串转换回位图以将其用于图像视图,如下所示:-
String mBitmapString = getIntent().getStringExtra("isVeg");
Bitmap mBitmap=StringToBitMap(mBitmapString);
指定位置
image.setImageBitmap(mBitmap);
public Bitmap StringToBitMap(String encodedString){
try {
byte [] encodeByte=Base64.decode(encodedString,Base64.DEFAULT);
Bitmap bitmap=BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length);
return bitmap;
} catch(Exception e) {
e.getMessage();
return null;
}
从 url 下载图片后,下面是您的代码-
Picasso.with(this.context).load(imageUrls.get(position))
.into(holder.ivImage);
final String strIsVag=isVeg.get(position);
final Bitmap mBitmap;
if (strIsVag.contains("true")) {
mBitmap = BitmapFactory.decodeResource(
this.context.getResources(), R.drawable.veg);
} else {
mBitmap = BitmapFactory.decodeResource(
this.context.getResources(), R.drawable.nonveg);
}
之后将该位图存储在本地存储中。
并按意图传递该存储目录的路径,并将其显示在您想要的其他 activity 中。
下面是在本地存储中存储图像的代码-
FileOutputStream out = new FileOutputStream(file);
mBitmap .compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
希望对您有所帮助。
已编辑
创建一个文件,如 -
String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/app_name");
myDir.mkdirs();
String fname = "image.jpg";
File file = new File (myDir, fname);
if (file.exists ()) file.delete ();
在 getView
方法发生变化后,发送可绘制对象 id.make 而不是发送位图:
1. 从 isVeg
列表中获取选定的字符串:
@Override
public void onClick(View view) {
...
next.putExtra("isVeg", isVeg.get(position));
context.startActivity(next);
....
}
2. 在 activity isVeg
中接收数据作为字符串:
String strIsVag = getIntent().getStringExtra("isVeg");
3. 根据strIsVag设置Image到ImageView :
Bitmap mBitmap;
if (strIsVag.contains("true")) {
mBitmap = BitmapFactory.decodeResource(
this.getResources(), R.drawable.veg);
} else {
mBitmap = BitmapFactory.decodeResource(
this.getResources(), R.drawable.nonveg);
}
ImageView imageView = (ImageView) findViewById(R.id.grid_image);
imageView.setImageBitmap(mBitmap);
我正在使用适配器将项目加载到网格中。然后当用户 select 网格中的项目时,它会打开自定义屏幕。在那个过程中,我发送了一些数据,稍后我可以在自定义屏幕中加载这些数据。我已成功加载 isVeg
项目以外的其他项目。我得到的响应是 isVeg
, [false, true, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true]
.
我的问题是我的意图是否正确。如果它是正确的,我如何将它分配给 ImageView。
我正在使用适配器将数据发送到下一个活动
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(
R.layout.pasta_single_item, parent, false);
holder.ivImage = (ImageView) convertView
.findViewById(R.id.grid_image);
holder.tvImageIcon = (ImageView) convertView
.findViewById(R.id.icon);
holder.tvHeader = (TextView) convertView
.findViewById(R.id.grid_text);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tvHeader.setText(descriptions.get(position));
Picasso.with(this.context).load(imageUrls.get(position))
.into(holder.ivImage);
final String strIsVag=isVeg.get(position);
final Bitmap mBitmap;
if (strIsVag.contains("true")) {
mBitmap = BitmapFactory.decodeResource(
this.context.getResources(), R.drawable.veg);
} else {
mBitmap = BitmapFactory.decodeResource(
this.context.getResources(), R.drawable.nonveg);
}
holder.tvImageIcon.setImageBitmap(mBitmap);
Button customizePasta = (Button) convertView
.findViewById(R.id.bt_direct_customize);
customizePasta.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent next = new Intent(context, ActivityPastaCustomize.class);
next.putExtra("description", descriptions.get(position));
next.putExtra("imageUrl", imageUrls.get(position));
next.putExtra("price", price.get(position));
next.putExtra("isVeg", mBitmap); //intent the image for selected item
context.startActivity(next);
((Activity) context).overridePendingTransition(
R.anim.slide_in_right, R.anim.slide_out_left);
}
});
return convertView;
}
private class ViewHolder {
private TextView tvHeader;
private ImageView ivImage;
private ImageView tvImageIcon;
}
}
正在接收数据 activity
final String description = getIntent().getStringExtra("description");
String imageUrl = getIntent().getStringExtra("imageUrl");
final String Strprice = getIntent().getStringExtra("price");
String mBitmap = getIntent().getStringExtra("isVeg"); // recives the item
设置接收数据
final TextView descriptionTV = (TextView) findViewById(R.id.grid_text);
descriptionTV.setText(description);
final TextView priceTV = (TextView) findViewById(R.id.pasta_price);
priceTV.setText("PRICE RS " + Strprice);
ImageView imageView = (ImageView) findViewById(R.id.grid_image);
Picasso.with(this).load(imageUrl).into(imageView);
我建议将位图对象转换为字符串并像这样发送到您想要的 activity:-
next.putExtra("isVeg", BitMapToString(mBitmap));
这些这个函数写在ViewHolder下面class这样
private class ViewHolder {
private TextView tvHeader;
private ImageView ivImage;
private ImageView tvImageIcon;
}
public String BitMapToString(Bitmap bitmap){
ByteArrayOutputStream baos=new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG,100, baos);
byte [] b=baos.toByteArray();
String temp=Base64.encodeToString(b, Base64.DEFAULT);
return temp;
}
然后在接收中 activity 将字符串转换回位图以将其用于图像视图,如下所示:-
String mBitmapString = getIntent().getStringExtra("isVeg");
Bitmap mBitmap=StringToBitMap(mBitmapString);
指定位置
image.setImageBitmap(mBitmap);
public Bitmap StringToBitMap(String encodedString){
try {
byte [] encodeByte=Base64.decode(encodedString,Base64.DEFAULT);
Bitmap bitmap=BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length);
return bitmap;
} catch(Exception e) {
e.getMessage();
return null;
}
从 url 下载图片后,下面是您的代码-
Picasso.with(this.context).load(imageUrls.get(position))
.into(holder.ivImage);
final String strIsVag=isVeg.get(position);
final Bitmap mBitmap;
if (strIsVag.contains("true")) {
mBitmap = BitmapFactory.decodeResource(
this.context.getResources(), R.drawable.veg);
} else {
mBitmap = BitmapFactory.decodeResource(
this.context.getResources(), R.drawable.nonveg);
}
之后将该位图存储在本地存储中。 并按意图传递该存储目录的路径,并将其显示在您想要的其他 activity 中。 下面是在本地存储中存储图像的代码-
FileOutputStream out = new FileOutputStream(file);
mBitmap .compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
希望对您有所帮助。
已编辑
创建一个文件,如 -
String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/app_name");
myDir.mkdirs();
String fname = "image.jpg";
File file = new File (myDir, fname);
if (file.exists ()) file.delete ();
在 getView
方法发生变化后,发送可绘制对象 id.make 而不是发送位图:
1. 从 isVeg
列表中获取选定的字符串:
@Override
public void onClick(View view) {
...
next.putExtra("isVeg", isVeg.get(position));
context.startActivity(next);
....
}
2. 在 activity isVeg
中接收数据作为字符串:
String strIsVag = getIntent().getStringExtra("isVeg");
3. 根据strIsVag设置Image到ImageView :
Bitmap mBitmap;
if (strIsVag.contains("true")) {
mBitmap = BitmapFactory.decodeResource(
this.getResources(), R.drawable.veg);
} else {
mBitmap = BitmapFactory.decodeResource(
this.getResources(), R.drawable.nonveg);
}
ImageView imageView = (ImageView) findViewById(R.id.grid_image);
imageView.setImageBitmap(mBitmap);