Передача изображения из одной активности другого действия
На SO есть похожие вопросы, но никто не работал для меня.
Я хочу получить щелкнутое изображение в Activity1 и отобразить его в Activity2.
Я получаю изображение с идентификатором щелкнутого изображения следующим образом:
((ImageView) v).getId()
и передавая его через намерение к другой деятельности.
- Удалить панель действий по умолчанию для Android по умолчанию
- Вызов сканера штрих-кода при нажатии кнопки в приложении Android
- Как преобразовать Drawable в Bitmap?
- OnClickListener не отвечает
- Прослушать собственное удаление приложения на Android
Во втором действии я использую идентификатор изображения следующим образом:
imageView.setImageResource(imgId);
Я зарегистрировал значение og image id как в действиях, так и в том же самом.
Но я получаю следующее исключение:
android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x12/d=0x0 a=2 r=0x7f050000}
Я думаю, проблема здесь: getId()
возвращает Id ImageView
а не его исходное изображение .
Все эти изображения присутствуют в drawable
.
Любая помощь оценивается.
- Бесконечная прокрутка Image ViewPager
- Пользовательская строка заголовка без дополнения (Android)
- Android OCR Library
- Как изменить цвет в круговом индикаторе выполнения?
- android - listview получить просмотр позиции по позиции
- Функция SQLiteDatabase close () вызывает NullPointerException при использовании нескольких streamов
- Добавление пользовательского шрифта в тему на Android
- Как настроить инъекцию зависимостей DAGGER с нуля в проекте Android?
Для решения этой проблемы есть 3 решения.
1) Сначала преобразуйте изображение в массив байтов, а затем перейдите в Intent и в следующем действии получите массив байтов из Bundle и Convert into Image (Bitmap) и установите в ImageView.
Преобразование битмапа в байт-массив: –
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteArray = stream.toByteArray();
Передайте массив байтов в цель: –
Intent intent = new Intent(this, NextActivity.class); intent.putExtra("picture", byteArray); startActivity(intent);
Получить байт-массив из Bundle и преобразовать в bitmap: –
Bundle extras = getIntent().getExtras(); byte[] byteArray = extras.getByteArray("picture"); Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); ImageView image = (ImageView) findViewById(R.id.imageView1); image.setImageBitmap(bmp);
2) Сначала сохраните изображение в SDCard и в следующем режиме установите это изображение в ImageView.
3) Передайте Bitmap в Intent и получите bitmap в следующей активности из пакета, но проблема в том, что размер вашего Bitmap / Image большой в то время, когда изображение не загружается в следующем действии.
Это не сработает. Вы должны попробовать это так.
Установите для DrawingCache вашего ImageView значение true, а затем сохраните фон в виде растрового изображения и передайте его через putExtra.
image.setDrawingCacheEnabled(true); Bitmap b=image.getDrawingCache(); Intent i = new Intent(this, nextActivity.class); i.putExtra("Bitmap", b); startActivity(i);
И в вашей следующей деятельности,
Bitmap bitmap = (Bitmap) intent.getParcelableExtra("Bitmap"); imageView.setImageBitmap(bitmap);
Идеальный способ сделать это коротким. Это код отправителя .class file
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher; Intent intent = new Intent(); Intent.setClass(.this,
и это код файла classа получателя.
Bitmap bitmap = (Bitmap)this.getIntent().getParcelableExtra("Bitmap"); ImageView viewBitmap = (ImageView)findViewById(R.id.bitmapview); viewBitmap.setImageBitmap(bitmap);
Не нужно сжимать. это оно