Friday, June 8, 2012

Android Wheelpicker

Now you can with Android-Wheel – the sexy WheelPicker for Android:
Android-Wheel: http://code.google.com/p/android-wheel/
It comes with a handy ScrollListener for listen to touch events on the wheel component. Yah …..C-A-S-I-N-O!


Some Notes:
  • Sometimes you need to adjust the wheel width..I know I had to do this to prevent text from overflowing ..and the wheels rolling off…I think WheelView.java is where it at!
  • res/drawables – contains the styles/gradients etc.
The Application:
The Code:
import kankan.wheel.widget.ArrayWheelAdapter;
import kankan.wheel.widget.OnWheelChangedListener;
import kankan.wheel.widget.OnWheelScrollListener;
import kankan.wheel.widget.WheelView;
import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.TextView;

public class Main extends Activity
 {
  // TODO: Externalize string-array
  String wheelMenu1[] = new String[]{"Right Arm", "Left Arm", "R-Abdomen", "L-Abdomen", "Right Thigh", "Left Thigh"};
  String wheelMenu2[] = new String[]{"Upper", "Middle", "Lower"};
  String wheelMenu3[] = new String[]{"R", "L"};

  // 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.empty_layout);

    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();
   }
 }
 
 

1 comment:

  1. I'm having trouble importing the .zip into Eclipse. Can you explain how to do it?

    I went to my project build path and tried to import the .zip file as an external JAR file... That didn't work. I unzipped the file and added the .apk to my build path and that didn't work either. Any help?

    ReplyDelete