#android #android_imageview
Недавно начал изучать Android. Дошёл до recycleWiew. Столкнулся с необходимостью открыть imageView из ячейки полноэкранном режиме по нажатию на него. Сейчас я делаю так: onBindViewHolder Glide.with(context).load(new File(path + "/" + galleryList.get(i))).into(viewHolder.img); А в cell.xml я использовал разные другие библиотеки, но добился только того что по тапу приложение масштабировалось в рамках ячейки. Попытки прорвать границы ухищрениями типо adjustViewBounds не помогли. Сейчас мне кажется что ошибка где - то в подходе. Подскажите, как сделать правильно? Заранее спасибо. Upd: Попробовал по совету Jarvis_J в комментарии, но натыкаюсь на NPE при попытке присвоить imageView изображение.Я так понял что этот imageView не нужно инициализировать в конструкторе ViewHolder, это ведь общей для всех элемент, просто с разным наполнением. Поэтому я просто написал: public class Adapter extends RecyclerView.Adapter { ... ImageView scaledImg; ... ... public void onBindViewHolder(final Adapter.ViewHolder viewHolder, final int i) { ... scaledImg.findViewById(R.id.scaledImage); final File n = new File(path + itemLlist.get(i)); scaledImg.setImageURI(Uri.fromFile(n)); ... ... viewHolder.img.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!isScaled) { scaledImg.setVisibility(View.VISIBLE); isScaled = !isScaled; } } Где я ошибаюсь?
Ответы
Ответ 1
Ваш ImageView в любом случае будет ограничен родителем - (ячейкой) RecyclerView. Если вы хотите сделать изображение на весь экран - вам нужен другой ImageView, который будет размером с корневой layout. Например, так:По нажатию делайте этот ImageView видимым (setVisibility(View.VISIBLE)) и устанавливайте ему картинку из ячейки recyclerView (setImageResource(...)). По нажатию на увеличенное изображение вновь скрывайте его (setVisibility(View.GONE)). Ответ 2
Можно это сделать с красивой анимацией открытия. Использовать для этого две активити. Первая с RecyclerView (RvActivity назовем), а вторая просто с imageView (IvActivity). RvActivity:IvActivity: По клику на элемент RecyclerView делаем старт активити из RvActivity (пример на Kotlin): if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { startActivity(Intent(this, IvActivity::class.java), ActivityOptions.makeSceneTransitionAnimation(this, rv,"imageTag") .toBundle()) } else { startActivity(Intent(this, IvActivity::class.java)) } На Java будет что-то типо того (пишу без теста, по памяти. Давно джавку не юзал): if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { startActivity(new Intent(this, IvActivity.class), ActivityOptions.makeSceneTransitionAnimation(this, findViewById(R.id.rv),"imageTag") .toBundle()); } else { startActivity(new Intent(this, IvActivity.class)); } Ну и соответственно в IvActivity в ImageView установите ту картинку по которой кликнули (передать информацию о адресе кликнутой картинки можно через Intent)
Комментариев нет:
Отправить комментарий