我必须将图像从一项活动转移到另一项活动。在第一个活动中,用户从滚动视图的几个图像中选择图像,并且该图像必须显示在下一个活动的图像视图中。需要帮助。
10 回答
在您的第一个活动中
将 ImageView 转换为位图
imageView.buildDrawingCache();
Bitmap bitmap = imageView.getDrawingCache();
Intent intent = new Intent(this, NewActivity.class);
intent.putExtra("BitmapImage", bitmap);
在第二个活动中
Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapImage");
然后在 ImageView 中显示位图。
注意:不建议这样做。实际上应该将图像保存在某处并传递路径并从第二个活动中检索。
您可以将其作为字节数组传递并构建位图以在下一个活动中显示。例如:
在您的第一个活动中:
Intent i = new Intent(this, NextActivity.class);
Bitmap b; // your bitmap
ByteArrayOutputStream bs = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, 50, bs);
i.putExtra("byteArray", bs.toByteArray());
startActivity(i);
在你的第二个活动中
if(getIntent().hasExtra("byteArray")) {
ImageView previewThumbnail = new ImageView(this);
Bitmap b = BitmapFactory.decodeByteArray(
getIntent().getByteArrayExtra("byteArray"),0,getIntent().getByteArrayExtra("byteArray").length);
previewThumbnail.setImageBitmap(b);
}
您可以通过多种方式做到这一点。简单是有目的的。但它可能会挂起您的设备,并且在 Galaxy S3 等许多设备中也会出现内存不足异常。
所以我会给你一个非常简单的方法,见下文。
static
您可以在一个类中创建变量,例如:
public class ABC{
public static Bitmap PHOTO = null;
}
现在,当您从图库或任何其他方式获取位图时,您必须将位图保存在此 PHOTO 变量中。(这仅在 onActivityResult 中可行,对吗?)
如果您从相机中获取照片,那么代码就是。
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, CAMERA_PIC_REQUEST);
和,
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
switch (requestCode) {
case CAMERA_PIC_REQUEST:
Bitmap b = (Bitmap) data.getExtras().get("data");
if (b != null) {
ABC.PHOTO = b;
}
break;
}
}
并在任何其他活动中使用此 PHOTO 变量。
从图库中挑选照片时,您可以使用相同的方式。
嗨,这是编辑过的。
这只是网格视图的示例。在这里,您了解如何将图像从一项活动传递到另一项活动。
这是您的主要活动课程:
package com.GridViewDemo;
import java.io.InputStream;
import java.net.URL;
import java.util.GregorianCalendar;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
public class GridViewDemoActivity extends Activity {
/** Called when the activity is first created. */
// String[] mArr =
// {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
String[] mArr = {
"http://www.xda-developers.com/wp-content/uploads/2012/10/androidfigure.jpg?f39ce1",
"http://1.bp.blogspot.com/-Ramp-o0Cp8s/T0VafXkE4uI/AAAAAAAAAQU/i703zg5MBgI/s1600/android-wallpaper5_1024x768.jpg",
"http://www.thebiblescholar.com/android_awesome.jpg",
"http://blogs-images.forbes.com/rogerkay/files/2011/07/Android1.jpg" };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
GridView gridView = (GridView) findViewById(R.id.gridView1);
gridView.setAdapter(new ImageAdapter(this));
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
/** if you have bitmap here then you can use this way
* Bitmap bitmap = getBitmap();
* test.PHOTO = bitmap;
*
* */
Intent i = new Intent(GridViewDemoActivity.this, newActiivty.class);
i.putExtra("Image_Path", ""+mArr[arg2]);
startActivity(i);
}
});
}
public class ImageAdapter extends BaseAdapter {
private Context mContext;
public ImageAdapter(Context c) {
mContext = c;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mArr.length;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ImageView imgView;
if (convertView == null) {
imgView = new ImageView(mContext);
imgView.setLayoutParams(new GridView.LayoutParams(85, 85));
imgView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imgView.setPadding(8, 8, 8, 8);
} else {
imgView = (ImageView) convertView;
}
Drawable d = LoadImageFromWebOperations(mArr[position]);
if (d == null) {
imgView.setImageResource(R.drawable.icon);
} else {
imgView.setImageDrawable(d);
}
return imgView;
}
}
public static Drawable LoadImageFromWebOperations(String url) {
try {
InputStream is = (InputStream) new URL(url).getContent();
Drawable d = Drawable.createFromStream(is, "src name");
return d;
} catch (Exception e) {
return null;
}
}
}
主要的.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<GridView android:id="@+id/gridView1" android:layout_height="wrap_content"
android:layout_width="fill_parent" android:numColumns="4"></GridView>
</LinearLayout>
newActivity.class
package com.GridViewDemo;
import java.io.InputStream;
import java.net.URL;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.ImageView;
public class newActiivty extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.new_layout);
String image_path = getIntent().getStringExtra("Image_Path");
ImageView imageview = (ImageView) findViewById(R.id.imageView1);
Drawable d = LoadImageFromWebOperations(image_path);
if (d != null) {
imageview.setImageDrawable(d);
} else {
imageview.setImageResource(R.drawable.icon);
}
/** if you have bitmap then
* imageview.setImageBitmap(test.PHOTO);
* */
}
public static Drawable LoadImageFromWebOperations(String url) {
try {
InputStream is = (InputStream) new URL(url).getContent();
Drawable d = Drawable.createFromStream(is, "src name");
return d;
} catch (Exception e) {
return null;
}
}
}
new_layout.xml
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout android:id="@+id/linearLayout1"
android:layout_width="fill_parent" android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView android:src="@drawable/icon" android:id="@+id/imageView1"
android:layout_width="fill_parent" android:layout_height="320dp"></ImageView>
</LinearLayout>
清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.GridViewDemo"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="3" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".GridViewDemoActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".newActiivty"></activity>
</application>
</manifest>
这是额外的类:如果你有位图,那么使用这种方式:
package com.GridViewDemo;
import android.graphics.Bitmap;
public class test {
public static Bitmap PHOTO = null;
}
我在代码中评论所以,检查它,如果你有查询,然后在这个答案下面评论。
在第一个活动中首先确保你在顶部实例化位图,如位图位图;
然后在第一个活动中使用这个:-
ByteArrayOutputStream bs = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, bs);
byte[] byteArray = bs.toByteArray();
intent.putExtra("PICTURE", byteArray);
startActivity(intent);
在第二个活动中:-
byte[] byteArray = extras.getByteArray("PICTURE");
bitmap = BitmapFactory.decodeByteArray(byteArray,0,byteArray.length);
imgViewResult.setImageBitmap(bitmap);
您可以将图像的 URI 传递给下一个 Activity。
您从 onActivityResult() 获得的 URI
并在下一个 Activity 的 onCreate() 中。
再次解码Bitmap并将其设置为ImageView
看到这个帖子。
启动第二个 Activity 时,在第一个 Activity 中使用 putExtra。在第二个 Activity 中使用 getExtra() 如下:
在第一个活动中
Intent intent = new Intent(Activity1.this,Activity2.class);
intent.putExtra("bmp",selectedImage);
startActivity(intent);
在第二个活动
Bitmap bmp = this.getIntent().getParcelableExtra("bmp");
将您的图像转换为base64
字符串格式并将其传递给下一个活动,然后再次将其解码为位图。
在第一个活动中:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK){
Intent showImageIntent = new Intent(this, ShowCameraPicture.class);
showImageIntent.fillIn(data,Intent.FILL_IN_DATA);
startActivity(showImageIntent);
}
}
在第二个活动中:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = getIntent().getExtras();
if(bundle!=null){
Bitmap image = (Bitmap)bundle.get("data");
//do whatever you need to do with the bitmap here ...
}
}
/////////firstActivity.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.app.myapp.com.app44sendinginfofromoneactivitytoanother.MainActivity">
<RelativeLayout
android:layout_width="368dp"
android:layout_height="495dp"
tools:layout_editor_absoluteX="8dp"
tools:layout_editor_absoluteY="8dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:orientation="vertical">
<EditText
android:id="@+id/edtName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Enter NAme"
android:inputType="textPersonName" />
<EditText
android:id="@+id/edtLastName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Enter LastName"
android:inputType="textPersonName" />
<EditText
android:id="@+id/edtEmail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Enter Email"
android:inputType="textPersonName" />
<EditText
android:id="@+id/edtPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Enter Password"
android:inputType="textPassword" />
<ImageView
android:id="@+id/imgView"
android:layout_width="match_parent"
android:layout_height="200dp"
app:srcCompat="@android:drawable/ic_menu_report_image" />
<RadioGroup
android:id="@+id/rdoGroup"
android:layout_width="match_parent"
android:layout_height="50dp">
<RadioButton
android:id="@+id/rdoMale"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Male" />
<RadioButton
android:id="@+id/rdoFemale"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Female" />
</RadioGroup>
<Button
android:id="@+id/btnSend"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="Send" />
</LinearLayout>
</RelativeLayout>
</android.support.constraint.ConstraintLayout>
///////////// MainActivity.java
public class MainActivity extends AppCompatActivity implements View.OnClickListener,CompoundButton.OnCheckedChangeListener{
EditText edtName,edtLastName,edtEmail,edtPassword;
ImageView imgView;
RadioButton rdoMale,rdoFemale;
Button btnSend;
String genderType = "";
int CAMERA_PIC_REQUEST = 99;
Bitmap bitmap; // your bitmap
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edtName = (EditText) findViewById(R.id.edtName);
edtLastName = (EditText) findViewById(R.id.edtLastName);
edtEmail = (EditText) findViewById(R.id.edtEmail);
edtPassword = (EditText) findViewById(R.id.edtPassword);
btnSend = (Button) findViewById(R.id.btnSend);
imgView = (ImageView) findViewById(R.id.imgView);
rdoMale = (RadioButton) findViewById(R.id.rdoMale);
rdoFemale = (RadioButton) findViewById(R.id.rdoFemale);
btnSend.setOnClickListener(MainActivity.this);
imgView.setOnClickListener(MainActivity.this);
rdoMale.setOnCheckedChangeListener(MainActivity.this);
rdoFemale.setOnCheckedChangeListener(MainActivity.this);
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
switch (buttonView.getId()){
case R.id.rdoMale:
if (isChecked){
genderType = "Male";
}else{
buttonView.setChecked(false);
}
break;
case R.id.rdoFemale:
if (isChecked){
genderType = "Female";
}else{
buttonView.setChecked(false);
}
break;
}
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.btnSend:
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
intent.putExtra("NAME",edtName.getText().toString());
intent.putExtra("LASTNAME",edtLastName.getText().toString());
intent.putExtra("EMAIL",edtEmail.getText().toString());
intent.putExtra("PASSWORD",edtPassword.getText().toString());
intent.putExtra("GENDER",genderType);
//below is the code which you are looking for
--> ByteArrayOutputStream bs = new ByteArrayOutputStream();
--> bitmap.compress(Bitmap.CompressFormat.PNG, 100, bs);
byte[] byteArray = bs.toByteArray();
intent.putExtra("PICTURE", byteArray);
startActivity(intent);
break;
case R.id.imgView:
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
break;
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode,resultCode,data);
if (requestCode == CAMERA_PIC_REQUEST) {
bitmap = (Bitmap) data.getExtras().get("data");
imgView.setImageBitmap(bitmap);
}
}
}
////////////////// SecondActivity.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.app.myapp.com.app44sendinginfofromoneactivitytoanother.ResultActivity">
<RelativeLayout
android:layout_width="368dp"
android:layout_height="495dp"
tools:layout_editor_absoluteX="8dp"
tools:layout_editor_absoluteY="8dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:orientation="vertical">
<TextView
android:id="@+id/txtName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="FirstName:"
android:textSize="24sp" />
<TextView
android:id="@+id/txtLast"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="LastName:"
android:textSize="24sp" />
<TextView
android:id="@+id/txtEmail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="Email:"
android:textSize="24sp" />
<TextView
android:id="@+id/txtPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="Password:"
android:textSize="24sp" />
<TextView
android:id="@+id/txtGender"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="Gender:"
android:textSize="24sp" />
<ImageView
android:id="@+id/imgViewResult"
android:layout_width="match_parent"
android:layout_height="200dp"
app:srcCompat="@android:drawable/ic_menu_report_image" />
</LinearLayout>
</RelativeLayout>
</android.support.constraint.ConstraintLayout>
///////// SecondActivity.Java
public class SecondActivity extends AppCompatActivity {
Context ctx ;
TextView txtName,txtLast,txtEmail,txtPassword,txtGender;
ImageView imgViewResult;
Bitmap bitmap;
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
ctx = this;
setContentView(R.layout.activity_result);
txtName = (TextView) findViewById(R.id.txtName);
txtLast = (TextView) findViewById(R.id.txtLast);
txtEmail = (TextView) findViewById(R.id.txtEmail);
txtPassword = (TextView) findViewById(R.id.txtPassword);
txtGender = (TextView) findViewById(R.id.txtGender);
imgViewResult = (ImageView) findViewById(R.id.imgViewResult);
Bundle extras = getIntent().getExtras();
String Name = extras.getString("NAME");
String LastName = extras.getString("LASTNAME");
String Email = extras.getString("EMAIL");
String Password = extras.getString("PASSWORD");
String Gender = extras.getString("GENDER");
txtName.setText("Name: "+Name);
txtLast.setText("LastName: "+LastName);
txtEmail.setText("Email: "+Email);
txtPassword.setText("Password: "+Password);
txtGender.setText("Gender: "+Gender);
byte[] byteArray = extras.getByteArray("PICTURE");
bitmap = BitmapFactory.decodeByteArray(byteArray,0,byteArray.length);
imgViewResult.setImageBitmap(bitmap);
}
}
快乐编码 :)
第一个活动:
Intent intent = new Intent(CurrentActivity, secondActivity.class);
intent.putExtra("resId", R.drawable.your image);
startActivity(intent);
然后你的目标活动:
Bundle bundle = getIntent().getExtras();
if(bundle!=null){
int image = bundle.getInt("resId");
ImageId.setImageResource(image);
}