如何制作一个轮子选择器

我试图制作一个这样的轮子选择器我尝试下载这个项目,但.zip下载中包含的唯一文件是wheel-demo.apk和notes.txt。 Notes.txt没有关于如何在android studio中使用此文件的任何说明。 我find了一篇建议使用ListViews创建相同效果的post。 而不是制作我自己的,我花了一天时间搜索互联网,我在这里find了源代码,但当我将文件导入我的项目时,IDE显示了几十个错误。 通过反复试验,我设法修复了除3个错误之外的所有错误。 很确定我已将相关代码放在下面
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(wheelMenu1)); //cannot resolve method 'setAdapter(com.projectname.ArrayWheelAdapter) 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 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; } } 

所有3个.java文件都已添加到MainActivity的导入列表中,认为它可以解决问题,但事实并非如此。 感谢您的建议到目前为止。

尝试这个

 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(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(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(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中

                   

也试试这个演示

在此处输入图像描述

您可以使用自API 11以来Android中包含的默认NumberPicker 。您可以使用NumberPicker #setDisplayedValues显示所需的任何字符串。

XML:

  

Java的:

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

截图:

显示城市的NumberPicker