Галерея: эффект в выбранном элементе
Мне нужен свиток с элементами вместе, и выбранный элемент должен развернуть часть вниз.

В настоящее время я использую галерею (я пробовал с viewflow и viewpager, но элементы имеют много пространства между ними), но мне нужно знать, как я могу сделать этот эффект.
У меня есть 2 идеи, но я не знаю, как их реализовать.
1) расширяемая часть-это LinearLayout с visibility=gone, и когда элемент выбран, этот макет должен быть виден. (Галерея не имеет "onItemSelectedListener")
2) рассматривайте каждый элемент как фрагмент (как только я использую Viewpager, который использует это, https://github.com/mrleolink/SimpleInfiniteCarousel )
Это не обязательно должна быть галерея, любая идея приветствуется
Я работаю над одним видом деятельности.
3 ответов:
Зависит от поведения, которое вы хотите. Некоторые вопросы можно ли одновременно расширить несколько пунктов? Вы хотите, чтобы представления были выгружены (привязаны к месту) или плавно прокручивались?
Одно из моих предложений состоит в том, чтобы создать собственное представление для отдельных ячеек. Затем добавьте их программно в объект HorizontalScrollView.HorizontalScrollView hsv = new HorizontalScrollView(activity); LinearLayout hll = new LinearLayout(activity); hll.setOrientation(LinearLayout.HORIZONTAL); for(int i=0;i<items.length();i++){ hsv.addView(new CustomExpandView(item)); }CustomExpandView будет использоваться для ваших ячеек и может быть чем-то вроде этого...
public class CustomExpandView extends RelativeLayout implements OnClickListener { MyActivity mActivity = null; ImageView ivImage, ivOverImage; RelativeLayout rlView; public CustomExpandView(Context context) { super(context); initialize(); } public CustomExpandView(Context context, AttributeSet attrs) { super(context, attrs); initialize(); } public void initialize() { mActivity = (MyActivity) this.getContext(); LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.custom_cell_expand, this, true); //you can initialize subviews here rlView = (RelativeLayout) getChildAt(0); ivImage = (ImageView) rlView.getChildAt(0); ivOverImage = (ImageView) rlView.getChildAt(1); rlView.setOnFocusChangeListener(new OnFocusChangeListener(){ @Override public void onFocusChange(View v, boolean hasFocus) { LinearLayout expand = v.findViewById(R.id.view_i_want_to_expand); if(hasFocus) expand.setVisibility(View.VISIBLE); else expand.setVisibility(View.GONE); } }); }
Ты сам дал ответ. Вы можете использовать видоискатель с фрагментами и анимацией для расширения нижней части окна. Зависит от того, хотите ли вы, чтобы окна были полноэкранными или нет. Видоискателю не обязательно нужны фрагменты, вы можете использовать обычные виды и соответствующий адаптер. Просто поиграйте с ним и посмотрите, какое решение вам больше всего нравится.
В следующий раз просто создайте код и приложение и задайте гораздо более конкретный вопрос с кодом для иллюстрации проблемы ты переживаешь.
Вы можете просто определить
Я не знаю, будет ли у вас статическое числоTableViewс помощью только одногоTableRow(или столько, сколько вам нужно) и установитьonClickListenerдля каждого из этихViewвнутриTableRow, что сделает так, что при любом щелчке мыши выбранныйViewрасширится.Views внутри этой строки или вы построите их динамически, но это должно работать для любого из них, настоящая "работа" здесь о заполнении этой строки.Как только у вас есть строка
Views, просто объявитеonClickListener()на каждом из них. Например, этого должно быть достаточно:OnClickListener myListener = new OnClickListener() { @Override public void onClick(final View v) { v.setVisibility(View.VISIBLE); } };И как событие
onClickдля всех ваших элементов внутриTableRow:For (View v : myTableRowViews) В. setOnClickListener(myListener);
Это имеет недостаток: вы можете знать, какой
Viewбыл выбран для выбора, но изначально вы не можете знать, какой был снят, поэтому вам нужно будет отслеживать последнюю выбранную вкладку, объявляющую переменную класса и устанавливающую ее каждый раз, когдаonClick()будет выбран. уволен, так что ваш слушатель станет чем-то вроде этого:// In your class declare a variable like this View lastSelected = null; OnClickListener myListener = new OnClickListener() { @Override public void onClick(final View v) { if (lastSelected != null) lastSelected.setVisibility(View.GONE); v.setVisibility(View.VISIBLE); lastSelected = v; } };Кроме того, вы можете настроить анимацию на эффект, чтобы сделать его более привлекательным, но в основном это идея.
И последнее: чтобы заставить его работать таким образом, вам нужно будет установить
layout_heightкак вашихTableRow, так иViewэлементов внутри, так что он может расшириться впоследствии, когда вы установите дополнительную часть как видимую. Кроме того, чтобы он выглядел хорошо, все вашиViewдолжны быть одинаковой высоты (как в уменьшенном, так и в уменьшенном виде). расширенное состояние).
Comments