How to make a wheel picker

I am trying to make a wheel picker, for example this I tried to download this project, but the only files included in the .zip download are the -demo.apk and notes.txt wheels. Notes.txt does not provide instructions on how to use this file in Android studio. I found a post that suggested using ListViews to create the same effect. Instead of making my own, I spent another day on the Internet and I found the source code here , but when I imported the files into my project, the IDE showed dozens of errors. Through the trial version and the error, I managed to fix everything except 3 errors. Pretty sure I put the appropriate code below
MainActivity.java:

OnWheelScrollListener scrolledListener = new OnWheelScrollListener() { public void onScrollingStarted(WheelView wheel) { wheelScrolled = true;// "Cannot resolve symbol wheelScrolled } public void onScrollingFinished(WheelView wheel) { wheelScrolled = false;// "Cannot resolve symbol wheelScrolled updateStatus(); } }; // Wheel changed listener private final OnWheelChangedListener changedListener = new OnWheelChangedListener() { public void onChanged(WheelView wheel, int oldValue, int newValue) { if (!wheelScrolled)// "Cannot resolve symbol wheelScrolled { updateStatus(); } } }; private void initWheel1(int id) { WheelView wheel = (WheelView) findViewById(id); wheel.setAdapter(new ArrayWheelAdapter<String>(wheelMenu1)); //cannot resolve method 'setAdapter(com.projectname.ArrayWheelAdapter<Java.lang.String>) wheel.setVisibleItems(2); wheel.setCurrentItem(0); wheel.addChangingListener(changedListener); wheel.addScrollingListener(scrolledListener); } 

OnWheelScrollListener.java:

 public interface OnWheelScrollListener { /** * Callback method to be invoked when scrolling started. * @param wheel the wheel view whose state has changed. */ void onScrollingStarted(WheelView wheel); /** * Callback method to be invoked when scrolling ended. * @param wheel the wheel view whose state has changed. */ void onScrollingFinished(WheelView wheel);} 

OnWheelChangedListener.java:

  public interface OnWheelChangedListener { /** * Callback method to be invoked when current item changed * @param wheel the wheel view whose state has changed * @param oldValue the old value of current item * @param newValue the new value of current item */ void onChanged(WheelView wheel, int oldValue, int newValue); } 

ArrayWheelAdapter.java

  public class ArrayWheelAdapter<T> extends AbstractWheelTextAdapter { // items private T items[]; /** * Constructor * @param context the current context * @param items the items */ public ArrayWheelAdapter(Context context, T items[]) { super(context); //setEmptyItemResource(TEXT_VIEW_ITEM_RESOURCE); this.items = items; } @Override public CharSequence getItemText(int index) { if (index >= 0 && index < items.length) { T item = items[index]; if (item instanceof CharSequence) { return (CharSequence) item; } return item.toString(); } return null; } @Override public int getItemsCount() { return items.length; } } 

All 3 .java files were added to the import list in MainActivity, thinking that this might solve the problem, but this did not happen. Thanks for the advice so far.

+5
source share
2 answers

try it

 public class MainActivity extends Activity { // TODO: Externalize string-array String wheelMenu1[] = new String[]{"name 1", "name 2", "name 3", "name 4", "name 5", "name 6","name 7","name 8","name 9"}; String wheelMenu2[] = new String[]{"age 1", "age 2", "age 3"}; String wheelMenu3[] = new String[]{"10", "20","30","40","50","60"}; // Wheel scrolled flag private boolean wheelScrolled = false; private TextView text; private EditText text1; private EditText text2; private EditText text3; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initWheel1(R.id.p1); initWheel2(R.id.p2); initWheel3(R.id.p3); text1 = (EditText) this.findViewById(R.id.r1); text2 = (EditText) this.findViewById(R.id.r2); text3 = (EditText) this.findViewById(R.id.r3); text = (TextView) this.findViewById(R.id.result); } // Wheel scrolled listener OnWheelScrollListener scrolledListener = new OnWheelScrollListener() { public void onScrollStarts(WheelView wheel) { wheelScrolled = true; } public void onScrollEnds(WheelView wheel) { wheelScrolled = false; updateStatus(); } }; // Wheel changed listener private final OnWheelChangedListener changedListener = new OnWheelChangedListener() { public void onChanged(WheelView wheel, int oldValue, int newValue) { if (!wheelScrolled) { updateStatus(); } } }; /** * Updates entered PIN status */ private void updateStatus() { text1.setText(wheelMenu1[getWheel(R.id.p1).getCurrentItem()]); text2.setText(wheelMenu2[getWheel(R.id.p2).getCurrentItem()]); text3.setText(wheelMenu3[getWheel(R.id.p3).getCurrentItem()]); text.setText(wheelMenu1[getWheel(R.id.p1).getCurrentItem()] + " - " + wheelMenu2[getWheel(R.id.p2).getCurrentItem()] + " - " + wheelMenu3[getWheel(R.id.p3).getCurrentItem()]); } /** * Initializes wheel * * @param id * the wheel widget Id */ private void initWheel1(int id) { WheelView wheel = (WheelView) findViewById(id); wheel.setAdapter(new ArrayWheelAdapter<String>(wheelMenu1)); wheel.setVisibleItems(2); wheel.setCurrentItem(0); wheel.addChangingListener(changedListener); wheel.addScrollingListener(scrolledListener); } private void initWheel2(int id) { WheelView wheel = (WheelView) findViewById(id); wheel.setAdapter(new ArrayWheelAdapter<String>(wheelMenu2)); wheel.setVisibleItems(2); wheel.setCurrentItem(0); wheel.addChangingListener(changedListener); wheel.addScrollingListener(scrolledListener); } private void initWheel3(int id) { WheelView wheel = (WheelView) findViewById(id); wheel.setAdapter(new ArrayWheelAdapter<String>(wheelMenu3)); wheel.setVisibleItems(2); wheel.setCurrentItem(0); wheel.addChangingListener(changedListener); wheel.addScrollingListener(scrolledListener); } /** * Returns wheel by Id * * @param id * the wheel Id * @return the wheel with passed Id */ private WheelView getWheel(int id) { return (WheelView) findViewById(id); } /** * Tests wheel value * * @param id * the wheel Id * @param value * the value to test * @return true if wheel value is equal to passed value */ private int getWheelValue(int id) { return getWheel(id).getCurrentItem(); } } 

main.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:background="@drawable/layout_bg"> <LinearLayout android:layout_marginTop="24dp" android:layout_gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <com.example.wheel.WheelView android:id="@+id/p1" android:layout_height="wrap_content" android:layout_width="wrap_content" /> <com.example.wheel.WheelView android:id="@+id/p2" android:layout_height="wrap_content" android:layout_width="wrap_content" /> <com.example.wheel.WheelView android:id="@+id/p3" android:layout_height="wrap_content" android:layout_width="wrap_content" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="24dp"> <EditText android:id="@+id/r1" android:layout_width="100dip" android:layout_height="wrap_content" android:layout_marginTop="24dp" android:layout_gravity="center_horizontal" android:textSize="18sp" android:textColor="#000"> </EditText> <EditText android:id="@+id/r2" android:layout_width="80dip" android:layout_height="wrap_content" android:layout_marginTop="24dp" android:layout_gravity="center_horizontal" android:textSize="18sp" android:textColor="#000"> </EditText> <EditText android:id="@+id/r3" android:layout_width="80dip" android:layout_height="wrap_content" android:layout_marginTop="24dp" android:layout_gravity="center_horizontal" android:textSize="18sp" android:textColor="#000"> </EditText> </LinearLayout> <TextView android:id="@+id/result" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="24dp" android:layout_gravity="center_horizontal" android:textSize="18sp" android:textColor="#FFF" android:text="Your choice"> </TextView> </LinearLayout> 

Also try demo

enter image description here

+7
source

You can simply use the default NumberPicker included with Android with API 11. You can display any strings you want with NumberPicker # setDisplayedValues.

XML:

 <NumberPicker android:id="@+id/number_picker" android:layout_width="match_parent" android:layout_height="180dp" /> 

Java:

  String[] data = new String[]{"Berlin", "Moscow", "Tokyo", "Paris"}; picker.setMinValue(0); picker.setMaxValue(data.length-1); picker.setDisplayedValues(data); 

Screenshot:

NumberPicker display Cities

+23
source

Source: https://habr.com/ru/post/1233413/


All Articles