How to make the datepicker in spin view. Here is the image,

I want the datepi
activity_main.xml
datepickerdialog.java
import java.util.Calendar;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Typeface;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TableLayout.LayoutParams;
import android.widget.TextView;
import com.wheel.ArrayWheelAdapter;
import com.wheel.NumericWheelAdapter;
import com.wheel.OnWheelChangedListener;
import com.wheel.WheelView;
public class DatePickerDailog extends Dialog {
private Context Mcontex;
private int NoOfYear = 100;
public DatePickerDailog(Context context, Calendar calendar,
final DatePickerListner dtp) {
super(context);
Mcontex = context;
LinearLayout lytmain = new LinearLayout(Mcontex);
lytmain.setOrientation(LinearLayout.VERTICAL);
LinearLayout lytdate = new LinearLayout(Mcontex);
LinearLayout lytbutton = new LinearLayout(Mcontex);
Button btnset = new Button(Mcontex);
Button btncancel = new Button(Mcontex);
btnset.setText("Set");
btncancel.setText("Cancel");
final WheelView month = new WheelView(Mcontex);
final WheelView year = new WheelView(Mcontex);
final WheelView day = new WheelView(Mcontex);
lytdate.addView(day, new LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT, 1.2f));
lytdate.addView(month, new LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT, 0.8f));
lytdate.addView(year, new LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT, 1f));
requestWindowFeature(Window.FEATURE_NO_TITLE);
lytbutton.addView(btnset, new LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT, 1f));
lytbutton.addView(btncancel, new LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT, 1f));
lytbutton.setPadding(5, 5, 5, 5);
lytmain.addView(lytdate);
lytmain.addView(lytbutton);
setContentView(lytmain);
getWindow().setLayout(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT);
OnWheelChangedListener listener = new OnWheelChangedListener() {
public void onChanged(WheelView wheel, int oldValue, int newValue) {
updateDays(year, month, day);
}
};
// month
int curMonth = calendar.get(Calendar.MONTH);
String months[] = new String[] { "January", "February", "March",
"April", "May", "June", "July", "August", "September",
"October", "November", "December" };
month.setViewAdapter(new DateArrayAdapter(context, months, curMonth));
month.setCurrentItem(curMonth);
month.addChangingListener(listener);
Calendar cal = Calendar.getInstance();
// year
int curYear = calendar.get(Calendar.YEAR);
int Year = cal.get(Calendar.YEAR);
year.setViewAdapter(new DateNumericAdapter(context, Year - NoOfYear,
Year + NoOfYear, NoOfYear));
year.setCurrentItem(curYear-(Year-NoOfYear));
year.addChangingListener(listener);
// day
updateDays(year, month, day);
day.setCurrentItem(calendar.get(Calendar.DAY_OF_MONTH) - 1);
btnset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Calendar c = updateDays(year, month, day);
dtp.OnDoneButton(DatePickerDailog.this, c);
}
});
btncancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dtp.OnCancelButton(DatePickerDailog.this);
}
});
}
Calendar updateDays(WheelView year, WheelView month, WheelView day) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR,
calendar.get(Calendar.YEAR) + (year.getCurrentItem()-NoOfYear));
calendar.set(Calendar.MONTH, month.getCurrentItem());
int maxDays = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
day.setViewAdapter(new DateNumericAdapter(Mcontex, 1, maxDays, calendar
.get(Calendar.DAY_OF_MONTH) - 1));
int curDay = Math.min(maxDays, day.getCurrentItem() + 1);
day.setCurrentItem(curDay - 1, true);
calendar.set(Calendar.DAY_OF_MONTH, curDay);
return calendar;
}
private class DateNumericAdapter extends NumericWheelAdapter {
int currentItem;
int currentValue;
public DateNumericAdapter(Context context, int minValue, int maxValue,
int current) {
super(context, minValue, maxValue);
this.currentValue = current;
setTextSize(20);
}
@Override
protected void configureTextView(TextView view) {
super.configureTextView(view);
if (currentItem == currentValue) {
view.setTextColor(0xFF0000F0);
}
view.setTypeface(null, Typeface.BOLD);
}
@Override
public View getItem(int index, View cachedView, ViewGroup parent) {
currentItem = index;
return super.getItem(index, cachedView, parent);
}
}
private class DateArrayAdapter extends ArrayWheelAdapter {
int currentItem;
int currentValue;
public DateArrayAdapter(Context context, String[] items, int current) {
super(context, items);
this.currentValue = current;
setTextSize(20);
}
@Override
protected void configureTextView(TextView view) {
super.configureTextView(view);
if (currentItem == currentValue) {
view.setTextColor(0xFF0000F0);
}
view.setTypeface(null, Typeface.BOLD);
}
@Override
public View getItem(int index, View cachedView, ViewGroup parent) {
currentItem = index;
return super.getItem(index, cachedView, parent);
}
}
public interface DatePickerListner {
public void OnDoneButton(Dialog datedialog, Calendar c);
public void OnCancelButton(Dialog datedialog);
}
}
MainActivity.java
import android.app.Dialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
TextView tvDate;
Button btShow;
Calendar dateandtime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvDate=(TextView)findViewById(R.id.tvdate);
btShow=(Button)findViewById(R.id.Save);
dateandtime = Calendar.getInstance(Locale.US);
btShow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DatePickerDailog dp = new DatePickerDailog(MainActivity.this,
dateandtime, new DatePickerDailog.DatePickerListner() {
@Override
public void OnDoneButton(Dialog datedialog, Calendar c) {
datedialog.dismiss();
dateandtime.set(Calendar.YEAR, c.get(Calendar.YEAR));
dateandtime.set(Calendar.MONTH,
c.get(Calendar.MONTH));
dateandtime.set(Calendar.DAY_OF_MONTH,
c.get(Calendar.DAY_OF_MONTH));
tvDate.setText(new SimpleDateFormat("dd MMMM yyyy")
.format(c.getTime()));
}
@Override
public void OnCancelButton(Dialog datedialog) {
// TODO Auto-generated method stub
datedialog.dismiss();
}
});
dp.show();
}
});
}
}
add folder called wheel in com directoty i.e, c:\DatePicker\app\src\main\java\com\wheel\
In wheel folder NumericWheelAdapter.java i.e, c:\DatePicker\app\src\main\java\com\wheel\NumericWheelAdapter.java
import android.content.Context;
public class NumericWheelAdapter extends AbstractWheelTextAdapter {
/** The default min value */
public static final int DEFAULT_MAX_VALUE = 9;
/** The default max value */
private static final int DEFAULT_MIN_VALUE = 0;
// Values
private int minValue;
private int maxValue;
// format
private String format;
public NumericWheelAdapter(Context context) {
this(context, DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE);
}
public NumericWheelAdapter(Context context, int minValue, int maxValue) {
this(context, minValue, maxValue, null);
}
public NumericWheelAdapter(Context context, int minValue, int maxValue, String format) {
super(context);
this.minValue = minValue;
this.maxValue = maxValue;
this.format = format;
}
@Override
public CharSequence getItemText(int index) {
if (index >= 0 && index < getItemsCount()) {
int value = minValue + index;
return format != null ? String.format(format, value) : Integer.toString(value);
}
return null;
}
@Override
public int getItemsCount() {
return maxValue - minValue + 1;
}
}
create two interface in wheel folder 1. OnWheelClickedListener.java 2. OnWheelChangedListener.java
OnWheelClickedListener.java
package com.wheel;
public interface OnWheelClickedListener {
void onItemClicked(WheelView wheel, int itemIndex);
}
OnWheelChangedListener.java
package com.wheel;
public interface OnWheelChangedListener {
void onChanged(WheelView wheel, int oldValue, int newValue);
}
output screen like DatePicker
