How to make a Wheel picker

后端 未结 2 1099
醉酒成梦
醉酒成梦 2020-12-03 15:33

I am trying to make a wheel picker like this I have tried downloading this project but the only files included in the .zip download are wheel-demo.apk and notes.txt. Notes.

相关标签:
2条回答
  • 2020-12-03 16:04

    You can just use the default NumberPicker included in Android since API 11. You can display any Strings you want by using 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:

    0 讨论(0)
  • 2020-12-03 16:19

    Try this

    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 this demo

    0 讨论(0)
提交回复
热议问题