Изменить выбранный элемент в Numpicker Android

Я пытаюсь понять каким-то образом достичь следующего вида взгляда. На данный момент я попытался создать Listview и просто увеличил выделенный элемент. Но я не могу сделать выбранный элемент всегда посредине моего представления. Так что теперь я пытаюсь получить это с помощью numberpicker.

Но я не нашел способа скрыть панель разделителя и сделать другой выбранный элемент и остальную часть обзора. Идея – получить что-то вроде нижнего изображения.

Надеюсь, что кто-то сможет мне помочь! Спасибо!

Введите описание изображения здесь

Я хотел добиться такого же эффекта в одном из моих проектов, где я хотел, чтобы средний элемент моего обзора был более заметным. В моем случае этот предмет только z-переведен для создания впечатления от фокуса, но результат очень похож на то, что вы описываете. Я напишу свой код здесь, если он поможет вам в правильном направлении:

//We're on the onCreateView in a fragment here mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); //First I find the first visible element int firstVisiblePosition = mLayoutManager.findFirstVisibleItemPosition(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (firstVisiblePosition != -1) { int lastVisiblePosition = mLayoutManager.findLastVisibleItemPosition(); int itemHeight = mLayoutManager.getChildAt(0).getMeasuredHeight(); int itemTop = mLayoutManager.getChildAt(0).getTop(); //We use a '+' as itemTop will be negative int delta = itemHeight + itemTop; int currentItemToBeFocused = (delta < (itemHeight / 2)) ? 1 : 0; //Reset the z-translation of other items to 0 for (int i = 0, last = (lastVisiblePosition - firstVisiblePosition); i <= last; ++i) { if (mLayoutManager.getChildAt(i) != null) { mLayoutManager.getChildAt(i).setTranslationZ(0); } } //And set the z-translation of the current "centered" item if (mLayoutManager.getChildAt(currentItemToBeFocused) != null) { mLayoutManager.getChildAt(currentItemToBeFocused).setTranslationZ(10); } } } } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); } }); 

Я думаю, что ListView может быть более настраиваемым, чем NumberPicker.

Что вы можете сделать, так это использовать разные макеты строк, если они являются средними или другими, поэтому ваш метод getView (…) будет выглядеть так:

 public View getView(int position, View convertView, ViewGroup parent) { if (position == 1) { convertView = LayoutInflater.from(getContext()).inflate(R.layout.focused_layout, parent, false); // Do whatever with this view } else { convertView = LayoutInflater.from(getContext()).inflate(R.layout.not_focused_layout, parent, false); // Do whatever with this view } return convertView; } 

Таким образом вы можете настроить оба макета как в XML, так и в коде. Yo может изменить условие, если вы хотите «специальный» элемент любым другим способом.

Ниже приведен набор чисел с настраиваемыми значениями отображения:

  final NumberPicker aNumberPicker = new NumberPicker(context); List<Integer> ids = getIds(); aNumberPicker.setMaxValue(ids.size()-1); aNumberPicker.setMinValue(0); mDisplayedIds = new String[ids.size()]; for (int i = 0; i < ids.size(); i++) { mDisplayedIds[i] = "Nombre"+String.valueOf(ids.get(i)) ; } aNumberPicker.setDisplayedValues(mDisplayedIds); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(50, 50); RelativeLayout.LayoutParams numPickerParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); numPickerParams.addRule(RelativeLayout.CENTER_HORIZONTAL); relativeLayout.setLayoutParams(params); relativeLayout.addView(aNumberPicker, numPickerParams); 

Кроме того, вы можете проверить библиотеку с открытым исходным кодом, такую ​​как AndroidPicker

Вы можете реализовать это с помощью RecyclerView с одним держателем для обычного элемента и одним держателем для выбранного элемента.

Внутри адаптера RecyclerView

 private static int SELECTED_ITEM_POSITION = 2; private static int NORMAL_ITEM = 1; private static int SELECTED_ITEM = 2; @Override public int getItemViewType(int position) { if(position == SELECTED_ITEM_POSITION) return SELECTED_ITEM; else return NORMAL_ITEM; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext()); if(viewType == SELECTED_ITEM) { YourSelectedViewHolder selectedViewHolder = (YourSelectedViewHolder)layoutInflater.inflate(R.layout.selected_item_layout, parent, false); return selectedViewHolder; } else //viewType == NORMAL_ITEM { YourNormalViewHolder normalViewHolder = (YourNormalViewHolder)layoutInflater.inflate(R.layout.normal_item_layout, parent, false); return normalViewHolder; } } 
Intereting Posts
FileObserver не работает на внешнем хранилище в Android 6.0 Marshmallow (API 23) Android Studio Preview 3.0 – При установке приложения не удалось выполнить мгновенное приложение Создать проект из существующего источника в android ADT 20 Редактировать имя / номер телефона контакта программно SupportMapFragment загружается чрезвычайно медленно в первый раз, но быстро в последующих нагрузках (включая различные действия) Как вызвать javascript из Android? Android работает с sdk 1.6 и выше Android: GC не уважает SoftReferences? Как сделать несколько запросов и ждать, пока данные будут получены из всех запросов в версии 2.0 – android Как сменить стрелку вниз Стрелка для Spinner Control в Android? Как развернуть qt5 qml-плагин для Android? Существуют ли какие-либо HTTP-прокси, такие как скрипач или проводник на андроиде? Почему `hasEnrolledFingerprints` дает ошибку, что она требует разрешения только в моем фрагменте, но не в действии в примере Google? В Android есть Task == Application? Получить файл по Bluetooth через OBEX Object PushProfile