Спиннеры из дерева
Материалы: любые породы натурльного дерева, фанера, стабилизированное дерево и др.
Изготавливаем изделия по вашим пожеланиям: возможна любая форма, гравировка и покраска. Все изделия изготавливаются индивидуально с нуля в нашей мастерской и Вы можете получить фотоотчет о каждом этапе изготовления!
Заказать спиннер
Укажите в заказе размер, материал и цвет. Изготавливаем спиннеры любой формы!
Индивидуальные изделия
Изготавливаем все с нуля!
Покраска и защита
Возможна покраска изделия, морение в различные оттенки и защита маслом/лаком.
Эко-формат
Спиннеры изготавливаются из натурального дерева и вы можете выбрать любую породу дерева.
Можно нанести любую надпись или логотип.
Деревянный спиннер с фотографией и именем
Деревянный спиннер с фотографией и именем
Артикул: Spin-002
На данный момент спиннеры не изготавливаем.
Количество:
По запросу
Спиннер из дерева «Дуо» — мореный граб
Спиннер из дерева «Дуо» — мореный граб
Артикул: Spin-001
На данный момент спиннеры не изготавливаем.
Количество:
По запросу
Спиннер из дерева — Зебрано
Спиннер из дерева — Зебрано
Артикул: нет
На данный момент спиннеры не изготавливаем.
Количество:
По запросу
Спиннер из натурального дерева
Спиннер из натурального дерева
Артикул: нет
На данный момент спиннеры не изготавливаем.
Количество:
По запросу
Спиннер из дерева — Лайсвуд
Спиннер из дерева — Лайсвуд
Артикул: нет
На данный момент спиннеры не изготавливаем.
Количество:
По запросу
Спиннер «Микс» из нескольких пород дерева
Спиннер «Микс» из нескольких пород дерева
Артикул: нет
На данный момент спиннеры не изготавливаем.
Количество:
По запросу
Спиннер из дерева «Tri»
Спиннер из дерева «Tri»
Артикул: нет
На данный момент спиннеры не изготавливаем.
Количество:
По запросу
Спиннер из фанеры мореный
Спиннер из фанеры мореный
Артикул: нет
На данный момент спиннеры не изготавливаем.
Количество:
По запросу
Спиннер из дерева «Классик» из бука
Спиннер из дерева «Классик» из бука
Артикул: нет
На данный момент спиннеры не изготавливаем.
Количество:
По запросу
Бесплатный 3D файл Lulzbot Spinner (разделенные части)・Дизайн для загрузки и 3D-печати・Cults
Собранная башня из кубиков
Бесплатно
нижнее крепление лампы
Бесплатно
Макет мини-тисков V1
Бесплатно
pandamanthing
Бесплатно
Destiny_Ghost_David’s
Бесплатно
Дополнительные значки для выключателей
Бесплатно
Лучшие файлы для 3D-принтеров в категории Игра
star wars lamp
2,50 €RC Truck MAN 1:12 Dakar
26 €
G1 Transformers Bluestreak — No Support
Бесплатно
Super Bike
0,50 €
LEGO Duplo compatible spiral elevation train track
5,82 €
Among Us 6 Pack No brackets!
5,05 €
Grootskieur
0,50 €
Sukhoi Su-15TM Flagon F
1,50 €
Бестселлеры категории Игра
Комплект для преобразования целителя SM
6 €
USS EnterSurprise — контейнер для игры в печатной форме для крошечных реактивных истребителей F14
4,09 €
Артиллерия малой дальности для легионеров
10 €
Велосипед
1,40 €
Танцующий скелет
3,59 €
Подразделения Храфнагуд и РОКСС
10,25 €
Тяжелое имперское оружие огневой поддержки [Предварительная поддержка]
5 €
Octopus 2.
04,09 €
Мышь в сырной коробке
4,09 €
Бойцы эмберфолка
10,25 €
RC 1/10 Dodge Challenger
7,50 €
Хороший флекси-дракон
1,77 €
Лев Фу
5,50 €
Чемпион Алтейра
5,13 €
Исследователь Водфолка
10,25 €
Lazy Cat
4,09 €
Вы хотите поддержать Cults?
Вам нравятся Cults и вы хотите помочь нам продолжить наш путь самостоятельно? Обратите внимание, что мы — маленькая команда из 3 человек, поэтому поддержать нас в поддержании деятельности
и создании будущих разработок очень просто. Вот 4 решения, доступные для всех:РЕКЛАМА: Отключайте блокировщик баннеров AdBlock и кликайте на наши рекламные баннеры.
АФФИЛИАЦИЯ: Совершайте покупки онлайн, переходя по нашим партнерским ссылкам здесь Amazon.
ДОНАТЫ: Если хотите, то можно сделать пожертвование через PayPal здесь.
*ПРИГЛАШЕНИЕ ДРУЗЕЙ: * Приглашайте своих друзей, откройте для себя платформу и великолепные 3D-файлы, которыми делится сообщество!
Android: настройки Spinner. Реализуйте раскрывающийся список Android именно так… | Адам Стирк | TechTalks@Vattenfall
Реализуйте раскрывающийся список Android именно так, как вы хотите.
В этой статье я опишу два способа создания пользовательского счетчика для выбора страны, которые мне пришлось реализовать в приложении InCharge. Теперь мы официально поддерживаем 4 страны с зарядными станциями, в каждой стране есть свои юридические правила, положения и условия и т. д.
Мокапы экрана, которые я получил от нашего дизайнера, были именно такими:
Дизайн спиннера ||| Spinner Design — выпадающий списокТаким образом, дизайн для выбора не был похож на Android Spinner по умолчанию, поскольку он включал заголовок при переходе в раскрывающийся список. Можно ли реализовать с помощью Spinner Widget? Посмотрим.
Итак, приступим к реализации макета:
item_country.xml
xmlns:android="http://schemas.android.com/apk/res/android" 90:019 xml инструменты = "http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="@dimen/country_item_height"
android:paddingLeft="@dimen/general_margin"
android:paddingRight="@dimen/general_margin">
android:id= "@+id/ivCountry"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
tools:src="@drawable/ic_united_kingdom" />
android:id="@+id/tvCountry"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/general_margin"
android:layout_toRightOf="@id/ivCountry"
android:layout_centerVertical="true"
android:textColor ="@color/incharge_dark_grey"
android:textSize="18sp"
tools:text="United Kingdom"/>
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_alignParentRight ="true"
android:layout_centerVertical="true"
android:src="@drawable/arrow_down_grey"
/>
И добавьте виджет Spinner
:
android:id="@+id/sCountry"
android:layout_width ="match_parent"
android:layout_height="wrap_content"
. ..
android:background="@drawable/blue_outline"
android:popupBackground="@drawable/blue_outline_white_background"
android:spinnerMode="dropdown"
tools:listitem ="@layout/item_country"
/>
blue_outline.xml
Таким образом, мы только что создали виджет Spinner в нашем пользовательском интерфейсе. Благодаря tools:listitem="@layout/item_country"
мы можем увидеть в Android Studio Designer, как будет выглядеть Spinner, и правильно настроить отступы/поля 🙂
С помощью свойства android:background
мы можем добавить синий контур, когда Spinner находится в выбранном состоянии, а с помощью android:popupBackground
фон выпадающего списка — пока что это просто.
Волшебство добавления заголовка будет сделана в нашем CountryAdapter
Класс:
CountryAdapter.kt
Class CountryAdapter (
Контекст: контекст
): ArrayAdapterКонтекст: контекст
): ArrayAdapterval view: View
if (convertView == null) {
view = layoutInflater.inflate(R.layout.item_country, parent, false)
} else {
view = convertView
} getItem(position)?.let {страна ->
setItemForCountry (представление, страна) } вернуть переопределение вида fun getDropDownView (position: Int, convertView: View?, parent: ViewGroup): View {
val view: View if (position == 0) {
view = layoutInflater. раздувать (R.layout. header_country, родитель, ложь)
view.setOnClickListener {
val root = parent.rootView
root.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK))
root.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK))
} 900 {
view = layoutInflater.inflate(R.layout.item_country_dropdown, parent, false) getItem(position)?.let {country ->
setItemForCountry(view, country)
}
} return view
} override fun getItem(position: Int ): Страна эксплуатации? {
if (position == 0) {
return null
} return super.getItem(position - 1)
} override fun getCount() = super.getCount() + 1 override fun isEnabled(position: Int) = position != 0 private fun setItemForCountry(view: View, country: OperatedCountry) {
val tvCountry = view.findViewById(R.id.tvCountry)
val ivCountry = view.findViewById(R.id.ivCountry) val countryName = Регион ("", country.countryCode).displayCountry
tvCountry. text = countryName
ivCountry.setBackgroundResource(country.icon)
}
И перечисление для поддерживаемых стран реализовано так:
OperatedCountry.kt
enumval country OperatedCountry(StringCodeval class OperatedCountry icon: Int) {
UNITED_KINGDOM("UK", R.drawable.ic_united_kingdom),
НИДЕРЛАНДЫ("NL", R.drawable.ic_netherlands),
ГЕРМАНИЯ("DE", R.drawable.ic_germany),
ШВЕЦИЯ( "ЮВ", R.drawable.ic_sweden),
}
Есть несколько частей, которые необходимо объяснить…
Во-первых, давайте посмотрим, что метод getView()
будет создавать пользовательский интерфейс, когда Spinner находится в состоянии ожидания, а getDropDownView()
будет создавать определенные элементы, когда выпадающее меню Spinner получает открыт. Это место, где нам нужно ожидать position == 0
для создания заголовка с «Выбрать вариант» .
К сожалению, нет общедоступного метода Spinner для программного закрытия раскрывающегося списка . Итак, как мы можем закрыть его, когда щелкнут элемент заголовка? Есть пара хаков для решения этой проблемы, и вот один из них:
val root = parent.rootView
root.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK))
root.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_UP) , KeyEvent.KEYCODE_BACK))
поэтому мы делаем вид, что нажали кнопку BACK . Да, хаки…
Также, чтобы предотвратить выбор для представления заголовка и не запускать его поведение Spinner, мы переопределяем метод isEnabled
для возврата false
в этом случае.
Итак, мы смогли кое-как реализовать ожидаемый дизайн. Но является ли это окончательным решением? Нам пришлось использовать хак с закрытием раскрывающегося списка и сделать код грязным. Кроме того, что если дизайнер вдруг передумает и захочет применить какую-нибудь анимацию, например вращение стрелки? Во встроенном всплывающем окне появилась анимация, которая может прервать эту анимацию.
Технически android:popupAnimationStyle
применим к стилю Spinner, но он из SDK 24 , довольно высокий, верно?
Есть ли другое решение?
Если мы посмотрим на исходный код Spinner для Android, мы увидим, что под PopupWindow
используется для отображения раскрывающегося списка. Классы реализации являются закрытыми, поэтому мы не можем их использовать. Но сколько работы может быть, чтобы сделать это самостоятельно? Давай попробуем!
Давайте заменим виджет Spinner любым другим, что может включать item_country.xml
Теперь в части setOnClickListener { ... }
(попытка переопределить OnClickListener на Spinner приведет к RuntimeException).
vCountry.setOnClickListener {
popupWindow?.dismiss() if (popupWindow == null) {
ProvideCountryPopupWindow(it)
} popupWindow!!.showAsDropDown(it, 0, -it.height)
}private fun ProvideCountryPopupWindow(it : View) {
popupWindow = PopupWindow(it. width, ViewGroup.LayoutParams.WRAP_CONTENT)
.apply {
val backgroundDrawable = activity!!.getDrawable(
R.drawable.blue_outline_white_background)
.apply { }
setBackgroundDrawable(backgroundDrawable)
isOutsideTouchable = true val listView = layoutInflater.inflate(
R.layout.layout_90ry_01 ,
false) как ListView
listView.adapter = countryAdapter
listView.setOnItemClickListener { _, _, position, _ ->
val selectedCountry = countryAdapter.getItem(position)!!
ViewModel.SetlegalCountry (SelectedCountry) PopupWindow? .Dismiss ()
}
ContentView = ListView
}
}
, где
Layout_country_dropdown.xml
Layout_country_dropdown.xml
Layout_country_dropdown.xml
Mayout_country_dropdown.xml
. .android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/lvCountries"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@null"
tools:listheader="@layout/header_country" />Здесь мы сами обрабатываем выпадающее меню. У нас есть полный контроль над его пользовательским интерфейсом! Я выбрал ListView, может быть что угодно! Все отрендерено
layout_country_dropdown.xml
.Обратите внимание, что вы можете использовать тот же
CountryAdapter
, но переименовать методgetDropDownView()
вgetView()
и избавиться от существующегоgetView()
.Таким образом... Для перехода не потребовалось много труда 8) Это то, что мы все любим. Это решение кажется более чистым, без грязных хаков — просто добавьте
Spinner — собственная реализация с PopupWindowpopupWindow?.dismiss()
при нажатии на заголовок. Как это выглядит?Что насчет управления анимацией? Это просто. Мы могли бы установить пользовательскую анимацию для
PopupWindow
или просто отключить ее с помощью параметра:PopupWindow.animationStyle = 0 // или R.style.YourCountryPopupAnimation, затем в
CountryAdapter
при создании элемента заголовка добавьте что-то вроде:view. findViewById(R.id.ivArrow)
.animate()
.rotation(180f)
.setDuration(200)
.start ()И результат:
PopupWindow — анимацияПопробуйте сами написать анимацию поворота в выпадающем списке 😉
Ура!
Spinner в Android с примером
import
android.os.Bundle
import
android.view.View
import
android.widget.AdapterView
import
android.widget.AdapterView.OnItemSelectedListener
import
android.widget.ArrayAdapter
импорт
android.widget.Spinner
импорт
android. widget.Toast
импорт
android.appActivityx 9001compat0015
class
MainActivity : AppCompatActivity(), OnItemSelectedListener {
var courses = arrayOf
( "C"
,
«Структуры данных»
,
«Подготовка интервью»
,
"Алгоритмы"
,
,
15
"DSA with java"
,
"OS"
)
override fun onCreate(savedInstanceState: Bundle?) {
super
. onCreate(savedInstanceState)
SetContentView (R.Layout.Activity_Main)
0003
val spin = findViewById
(R.id.coursesspinner)
spin.onItemSelectedListener =
this
val ad : ArrayAdapter<*> = ArrayAdapter
(
этот
,
0015
android. R.layout.simple_spinner_item,
courses)
ad.setDropDownViewResource(
android.R.layout. simple_spinner_dropdown_item)
spin.adapter = ad
}
override fun onItemSelected(parent: AdapterView<*>?,
view: View, position: Int,
ID: Long) {
Toast.