Muszę przenieść obraz z jednej czynności do drugiej. W pierwszej czynności użytkownik wybiera obraz z kilku obrazów z widoku przewijania i obraz ten musi być wyświetlany w widoku obrazu następnego działania. Wymagana pomoc.Chcę przenieść obraz z jednej aktywności do innej
Odpowiedz
W swojej pierwszej działalności
Konwersja ImageView do Bitmap
imageView.buildDrawingCache();
Bitmap bitmap = imageView.getDrawingCache();
Intent intent = new Intent(this, NewActivity.class);
intent.putExtra("BitmapImage", bitmap);
W drugim Aktywny
Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapImage");
następnie wyświetlić bitmapę w ImageView.
Uwaga: nie jest to zalecane. Należy faktycznie zapisać obraz gdzieś i przekazać ścieżkę zamiast i pobrać z drugiej działalności.
Nie działa, ponieważ daje błąd w stosunku do polecenia putExtra i muszę przenieść obraz widoku obrazu, który ma id "imageview" do widoku obrazu następnego działania, które ma id "obrazy". –
zaktualizowałem moją odpowiedź, która powinna ci pomóc. – Raghunandan
dzięki @Raghunandan: dużo szukałem na to pytanie, żadna z nich nie pomogła, twoja odpowiedź zadziałała dla mnie w końcu .. dziękuję –
Możesz przekazać identyfikator URI obrazu do następnej aktywności.
URI, które można uzyskać z onActivityResult()
aw onCreate() następnego działania.
Decode bitmapy ponownie i ustaw ją na ImageView
można przekazać go jako tablicy bajtów i budować bitmapę do wyświetlenia w następnym działalności. Na przykład:
W swojej pierwszej działalności:
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);
w drugim aktywności
if(getIntent().hasExtra("byteArray")) {
ImageView previewThumbnail = new ImageView(this);
Bitmap b = BitmapFactory.decodeByteArray(
getIntent().getByteArrayExtra("byteArray"),0,getIntent().getByteArrayExtra("byteArray").length);
previewThumbnail.setImageBitmap(b);
}
putextra nie działa –
Zobacz this post.
Użyj putExtra w pierwszym działaniu, gdy rozpoczynasz drugą aktywność. Aw drugim Aktywny używać getExtra() następująco:
W pierwszej czynności
Intent intent = new Intent(Activity1.this,Activity2.class);
intent.putExtra("bmp",selectedImage);
startActivity(intent);
W drugiej Aktywny
Bitmap bmp = this.getIntent().getParcelableExtra("bmp");
Właściwie putextra nie działa z –
następnie użyj ByteArrayOutputStream bs = new ByteArrayOutputStream(); b.compress (Bitmap.CompressFormat.PNG, 50, bs); przed putExtras(). –
Można to zrobić z wielu sposób. proste jest z zamiarem. ale może zawiesić urządzenie, a także spowodować brak pamięci Wyjątek w wielu urządzeniach takich jak Galaxy S3.
więc dam ci bardzo prosty sposób, patrz poniżej.
można utworzyć static
zmienna w jednej klasie, takich jak:.
public class ABC{
public static Bitmap PHOTO = null;
}
teraz gdy masz bitmapę z galerii lub jakikolwiek inny sposób to trzeba zapisać bitmapę w tej zmiennej fotograficzne (jest to możliwe tylko w onActivityResult , mam rację?)
jeśli otrzymasz zdjęcie z aparatu, to kod jest.
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, CAMERA_PIC_REQUEST);
i
@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;
}
}
i używać tej zmiennej fotograficznego w każdym innym działaniem.
możesz użyć tej samej metody, wybierając zdjęcie z galerii.
Witam to jest edytowane ans.
to tylko przykładowy widok siatki. tutaj masz pojęcie o tym, jak przekazać obraz z jednej aktywności do drugiej.
jest głównym klasa aktywny:
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;
}
}
}
main.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>
plik manifestu
<?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>
to ekstra klasa: jeśli masz bitmapę następnie wykorzystać w ten sposób:
package com.GridViewDemo;
import android.graphics.Bitmap;
public class test {
public static Bitmap PHOTO = null;
}
i komentarz w kodzie tak, to sprawdzić, a jeśli masz zapytanie następnie komentarz poniżej tego ans .
Oto kod funkcji, który jest wywoływany, gdy użytkownik naciśnie przycisk "ok" w pierwszej czynności "public void ok" (View view) { \t Intencja intent = new Intent (this, Data.class); EditText editText = (EditText) findViewById (R.id.text); String message = editText.getText(). ToString(); intent.putExtra (EXTRA_MESSAGE, wiadomość); startActivity (zamiar); Zamiar intencyjny1 = nowy cel (szablon.to, klasa danych); ImageView image = (ImageView) findViewById (R.id.imageview); intent1.putExtra ("bmp", obraz); startActivity (zamiar); } –
to jest złe. umieść swój kod w swoim pytaniu. mijasz imageView. musisz przekazać bitmapę lub ścieżkę obrazu, bez względu na to, czego używasz do wyświetlania obrazów w trybie przewijania. –
Muszę przekazać obraz obrazu w pierwszej czynności, której identyfikator jest dobrze widoczny, sugeruję kod –
Konwertuj obraz w formacie base64
i przenieś go do następnego działania i ponownie zdekoduj go do bitmapy.
W pierwszej czynności:
@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);
}
}
na drugim aktywność:
@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);
}
}
HappyCoding :)
w pierwszej Aktywny najpierw upewnij się utworzyć instancję bitmapy na górze jak bitmapy Bitmap;
a następnie użyj tego: - w pierwszym Aktywny
ByteArrayOutputStream bs = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, bs);
byte[] byteArray = bs.toByteArray();
intent.putExtra("PICTURE", byteArray);
startActivity(intent);
aw drugim aktywności: -
byte[] byteArray = extras.getByteArray("PICTURE");
bitmap = BitmapFactory.decodeByteArray(byteArray,0,byteArray.length);
imgViewResult.setImageBitmap(bitmap);
- 1. Jak wysłać zdjęcie z jednej aktywności do innej
- 2. Prześlij listę tablicową z jednej aktywności do innej
- 3. Jak przekazywać wartości z jednej aktywności do poprzedniej aktywności?
- 4. Uzyskaj dane z innej aktywności
- 5. Jak przenieść instancje ec2 do innej podsieci
- 6. Czy jest jakiś sposób na zwolnienie kamery z innej aktywności po nabyciu jej z innej aktywności.?
- 7. Chcę skopiować tabelę zawartą z jednej bazy danych i wstawić do innej tabeli bazy danych
- 8. Android: Przekierowanie do innej aktywności po opóźnieniu
- 9. Dlaczego tak trudno jest przekazać listę obiektów z jednej aktywności do innej działalności
- 10. MYSQL Wstaw wartości z innej tabeli do jednej kolumny
- 11. Przenieść obraz częściowo z ekranu w Androidzie
- 12. Jak dodać obraz tła do aktywności Androida?
- 13. Jak opóźnić wywołanie działania z innej aktywności?
- 14. Jak przenieść dane i ustawienia z jednej bazy do drugiej?
- 15. Jak zakończyć działanie z innej aktywności
- 16. Usuwanie elementów z jednej listy w innej
- 17. Jak przenieść git z master do innej istniejącej gałęzi
- 18. Funkcja z jednej biblioteki dopasowanej do szablonu z innej biblioteki
- 19. Skopiuj tabelę z jednej bazy danych do innej
- 20. Jak przenieść główną metodę do innej klasy w Scali?
- 21. Bezpieczne przesyłanie użytkownika z jednej aplikacji ASP .NET do innej
- 22. Przekazywanie danych z jednej aktywności do drugiej przy użyciu pakunku - brak wyświetlania w drugiej aktywności
- 23. Wstaw odrębne wartości z jednej tabeli do innej tabeli
- 24. Nawigowanie wśród fragmentów w ramach jednej aktywności
- 25. Przekazywanie danych z jednej strony WWW do innej
- 26. Jak skopiować plik z jednej lokalizacji do innej?
- 27. Przenoszenie z jednej aktywności na inną Aktywność w Androidzie
- 28. Odejmowanie jednej tablicy od innej
- 29. negując własność css jednej klasy z innej
- 30. Wyślij wiadomość z jednej działającej aplikacji konsolowej do innej
minięciu bitmapę od jednej czynności do drugiej jest to zły pomysł. należy rozważyć przekazanie ścieżki lub URI. – minhaz