سؤال

I have four wheels which spin with the numbers 0-9:

enter image description here

I want to be able to input words into each of the wheels from four different arrays so each wheel would have its own specific array of words.

The code is posted below and would be very helpful if someone could take a look and edit the code to correct it.

public class PasswActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.passw_layout);
        initWheel(R.id.passw_1);
        initWheel(R.id.passw_2);
        initWheel(R.id.passw_3);
        initWheel(R.id.passw_4);

        Button mix = (Button)findViewById(R.id.btn_mix);
        mix.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                mixWheel(R.id.passw_1);
                mixWheel(R.id.passw_2);
                mixWheel(R.id.passw_3);
                mixWheel(R.id.passw_4);
            }
        });
   }

   // Wheel scrolled flag
   private boolean wheelScrolled = false;

   // Wheel scrolled listener
   OnWheelScrollListener scrolledListener = new OnWheelScrollListener() {
        public void onScrollingStarted(WheelView wheel) {
            wheelScrolled = true;
        } 
        public void onScrollingFinished(WheelView wheel) {
            wheelScrolled = false;
        }
   };

   // Wheel changed listener
   private OnWheelChangedListener changedListener = new OnWheelChangedListener() {
         public void onChanged(WheelView wheel, int oldValue, int newValue) {
             if (!wheelScrolled) {

            }
         }
   };


    /**
      * Initializes wheel
      * @param id the wheel widget Id
     */
    private void initWheel(int id) {
          WheelView wheel = getWheel(id);
          wheel.setViewAdapter(new NumericWheelAdapter(this, 0, 9));
          wheel.setCurrentItem((int)(Math.random() * 10));

          wheel.addChangingListener(changedListener);
          wheel.addScrollingListener(scrolledListener);
          wheel.setCyclic(true);
          wheel.setInterpolator(new AnticipateOvershootInterpolator());
    }

    /**
     * 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 entered PIN
      * @param v1
      * @param v2
      * @param v3
      * @param v4
      * @return true 
     */
     private boolean testPin(int v1, int v2, int v3, int v4) {
       return testWheelValue(R.id.passw_1, v1) && testWheelValue(R.id.passw_2, v2) &&
        testWheelValue(R.id.passw_3, v3) && testWheelValue(R.id.passw_4, v4);
     }

    /**
     * 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 boolean testWheelValue(int id, int value) {
            return getWheel(id).getCurrentItem() == value;
    }

     /**
     * Mixes wheel
     * @param id the wheel id
     */
     private void mixWheel(int id) {
            WheelView wheel = getWheel(id);
            wheel.scroll(-25 + (int)(Math.random() * 50), 2000);
     }
}
هل كانت مفيدة؟

المحلول

In Android Picker widget from http://code.google.com/p/android-wheel/ I have forked a project using http://android-wheel.googlecode.com/svn/trunk/

Then I have imported a new Android project - WheelDemo from source in my Eclipse IDE. After that I changed: in WheelDemo.java:

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    //Since another activity is being called in this way,
    //I am sending a list with every intent, but this can be changed

    Map map = (Map) l.getItemAtPosition(position);

    ArrayList<String> list = new ArrayList<String>();
    list.add("One");
    list.add("Two");

    Intent intent = (Intent) map.get("intent");
    intent.putStringArrayListExtra("list", list);
    startActivity(intent);
}

In CitiesActivity.java:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.cities_layout);
        String[] arrayString = null;

        ArrayList<String> list = new ArrayList<String>();
        list = getIntent().getExtras().getStringArrayList("list");

        if (list != null) {
            arrayString = new String[list.size()];
            if (!list.isEmpty()) {
                for (int i = 0; i < list.size(); i++)
                    arrayString[i] = list.get(i);
            } else
                System.out.println("list is empty");
        } else
            System.out.println("list is null");

        final WheelView country = (WheelView) findViewById(R.id.country);
        country.setVisibleItems(3);
        country.setViewAdapter(new CountryAdapter(this));

        final String cities[][] = new String[][] {
                new String[] { "New York", "Washington", "Chicago", "Atlanta",
                        "Orlando" },
                new String[] { "Ottawa", "Vancouver", "Toronto", "Windsor",
                        "Montreal" },
                new String[] { "Kiev", "Dnipro", "Lviv", "Kharkiv" },
                arrayString, };

.....

And then I get such a picture:

Wheel Widget Android

P.S. I have used WheelDemo source code, not Wheel one

نصائح أخرى

Within source (kankan.wheel.widget) you have also ArrayWheelAdapter class, use it instead od NumericWheelAdapter calass

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top