Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 7 additions & 8 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
apply plugin: 'com.android.application'

android {
compileSdkVersion 24
buildToolsVersion "24.0.3"
compileSdkVersion 27
defaultConfig {
applicationId "you.xiaochen.wheel"
minSdkVersion 14
targetSdkVersion 22
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
Expand All @@ -20,11 +19,11 @@ android {
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
implementation fileTree(dir: 'libs', include: ['*.jar'])
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.0'
compile 'com.android.support:recyclerview-v7:24.2.0'
testCompile 'junit:junit:4.12'
implementation 'com.android.support:appcompat-v7:27.1.0'
implementation 'com.android.support:recyclerview-v7:27.1.0'
testImplementation 'junit:junit:4.12'
}
41 changes: 32 additions & 9 deletions app/src/main/java/you/xiaochen/wheel/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,28 @@

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;

import you.xiaochen.wheel.widget.DatePickerDialog;
import you.xiaochen.wheel.widget.WheelView;

public class MainActivity extends AppCompatActivity {
private WheelView wv_city, wv_county, wv_name;
private WheelView wv_number;

private CityAdapter cityAdapter;
private CountyAdapter countyAdapter;

private TextView tv_city, tv_county, tv_number;
private TextView tv_city, tv_county, tv_number, tvDatePicker;

private DatePickerDialog dialog;

private WheelView wv_number;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Expand All @@ -34,13 +38,15 @@ protected void onCreate(Bundle savedInstanceState) {
tv_county = (TextView) findViewById(R.id.tv_county);
tv_number = (TextView) findViewById(R.id.tv_number);

tvDatePicker = (TextView) findViewById(R.id.datePicker);

/* 市滑轮控件 */

cityAdapter = new CityAdapter();
wv_city.setAdapter(cityAdapter);
wv_city.setOnItemSelectedListener(new WheelView.OnItemSelectedListener() {
@Override
public void onItemSelected(int index) {
public void onItemSelected(WheelView wheelView, int index) {
tv_city.setText("市: "+cityAdapter.getItem(index));
List<String> strs = Arrays.asList(TestDatas.AREAS[index]);
countyAdapter.strs.clear();
Expand All @@ -54,10 +60,9 @@ public void onItemSelected(int index) {


/* 区滑轮控件 */

wv_county.setOnItemSelectedListener(new WheelView.OnItemSelectedListener() {
@Override
public void onItemSelected(int index) {
public void onItemSelected(WheelView wheelView, int index) {
tv_county.setText("县: "+countyAdapter.getItem(index));
}
});
Expand Down Expand Up @@ -92,16 +97,35 @@ protected String getItem(int index) {
});
wv_number.setOnItemSelectedListener(new WheelView.OnItemSelectedListener() {
@Override
public void onItemSelected(int index) {
public void onItemSelected(WheelView wheelView, int index) {
tv_number.setText("水平布局"+index);
}
});
wv_number.setCurrentItem(88);


dialog = new DatePickerDialog(this);
dialog.setDate(Calendar.getInstance(), false);
dialog.setOnDateSelectedListener(new DatePickerDialog.OnDateSelectedListener() {
@Override
public void onDateSelected(int year, int month, int dayOfMonth) {
tvDatePicker.setText(String.format("%s年%s月%s日", year, month + 1, dayOfMonth));
}
});

//Activity2.lanuch(this);
}

private class CityAdapter extends WheelView.WheelAdapter {
public void viewClick(View view) {
String tag = (String) view.getTag();
if ("WheelRecyclerView".equals(tag)) {
Activity2.lanuch(this);
} else {
dialog.show();
}
}

private static class CityAdapter extends WheelView.WheelAdapter {
@Override
protected int getItemCount() {
return TestDatas.NAMES.length;
Expand All @@ -113,7 +137,7 @@ protected String getItem(int index) {
}
}

private class CountyAdapter extends WheelView.WheelAdapter {
private static class CountyAdapter extends WheelView.WheelAdapter {
private List<String> strs;

CountyAdapter() {
Expand All @@ -131,5 +155,4 @@ protected String getItem(int index) {
}
}


}
212 changes: 212 additions & 0 deletions app/src/main/java/you/xiaochen/wheel/widget/DatePickerDialog.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,212 @@
package you.xiaochen.wheel.widget;

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;


import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import you.xiaochen.wheel.R;

public class DatePickerDialog extends Dialog implements View.OnClickListener, WheelView.OnItemSelectedListener {

WheelView yearWheelView;
WheelView monthWheelView;
WheelView dayWheelView;
View doneView;

WheelView.SimpleAdapter yearAdapter = new WheelView.SimpleAdapter();
WheelView.SimpleAdapter monthAdapter = new WheelView.SimpleAdapter();
WheelView.SimpleAdapter dayAdapter = new WheelView.SimpleAdapter();

List<Integer> years = new ArrayList<>();

Calendar selectedCalendar;

int selectedYearIndex, selectedMonthIndex, selectedDayIndex;

OnDateSelectedListener listener;

int initYear, initMonth, initDay;

boolean mOnlyHistory;

public DatePickerDialog(@NonNull Context context) {
this(context, R.style.disFloatingDialog);
}

public DatePickerDialog(@NonNull Context context, int themeResId) {
super(context, themeResId);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WindowManager.LayoutParams attr = getWindow().getAttributes();
attr.height = WindowManager.LayoutParams.WRAP_CONTENT;
attr.gravity = Gravity.BOTTOM;
// attr.windowAnimations = R.style.bottomWindowAnim;

//setCanceledOnTouchOutside(true);

setContentView(R.layout.dialog_date_picker);
View root = getWindow().findViewById(Window.ID_ANDROID_CONTENT);
if (root != null) {
yearWheelView = root.findViewWithTag("yearWheel");
monthWheelView = root.findViewWithTag("monthWheel");
dayWheelView = root.findViewWithTag("dayWheel");
doneView = root.findViewWithTag("done");
doneView.setOnClickListener(this);
}
}

public void setOnDateSelectedListener(OnDateSelectedListener l) {
listener = l;
}

public void setDate(Calendar calendar) {
setDate(calendar, true);
}

public void setDate(Calendar calendar, boolean onlyHistory) {
mOnlyHistory = onlyHistory;
if (calendar == null) {
calendar = Calendar.getInstance();
}
selectedCalendar = calendar;
int year, month, x;
year = calendar.get(Calendar.YEAR);
initMonth = selectedMonthIndex = calendar.get(Calendar.MONTH);
month = calendar.get(Calendar.DAY_OF_MONTH);
initDay = selectedDayIndex = month - 1;
for (int i = 10; i > 0; i--) {
x = year - i;
years.add(x);
yearAdapter.add(String.format("%s年", x));
}
years.add(year);
yearAdapter.add(String.format("%s年", year));
initYear = selectedYearIndex = years.size() - 1;
if (!onlyHistory) {
for (int i = 1; i < 11; i++) {
x = year + i;
years.add(x);
yearAdapter.add(String.format("%s年", x));
}
}
updateMonths();
updateDays();
}

private void updateMonths() {
selectedCalendar.set(Calendar.YEAR, years.get(selectedYearIndex));
int months = selectedCalendar.getActualMaximum(Calendar.MONTH) + 1;
int x;
monthAdapter.clear();
for (int i = 0; i < months; i++) {
if (mOnlyHistory && selectedYearIndex == initYear) {
if (i > initMonth) continue;
x = i + 1;
monthAdapter.add(String.format("%s月", x));
} else {
x = i + 1;
monthAdapter.add(String.format("%s月", x));
}
}
monthAdapter.notifyDataSetChanged();
if (monthWheelView != null) {
if (selectedMonthIndex >= monthAdapter.size()) {
selectedMonthIndex = monthAdapter.size() - 1;
}
monthWheelView.setCurrentItem(selectedMonthIndex);
}
}

private void updateDays() {
selectedCalendar.set(Calendar.YEAR, years.get(selectedYearIndex));
selectedCalendar.set(Calendar.MONTH, selectedMonthIndex);
int daysOfMonth = selectedCalendar.getActualMaximum(Calendar.DAY_OF_MONTH);
int x;
dayAdapter.clear();
for (int i = 0; i < daysOfMonth; i++) {
if (mOnlyHistory && selectedYearIndex == initYear
&& selectedMonthIndex == initMonth) {
if (i > initDay) continue;
x = i + 1;
dayAdapter.add(String.format("%s日", x));
} else {
x = i + 1;
dayAdapter.add(String.format("%s日", x));
}
}
dayAdapter.notifyDataSetChanged();
if (dayWheelView != null) {
if (selectedDayIndex >= dayAdapter.size()) {
selectedDayIndex = dayAdapter.size() - 1;
}
dayWheelView.setCurrentItem(selectedDayIndex);
}
}

@Override
public void onItemSelected(WheelView wheelView, int index) {
String tag = wheelView.getTag().toString();
switch (tag) {
case "yearWheel":
selectedYearIndex = index;
updateMonths();
updateDays();
break;
case "monthWheel":
selectedMonthIndex = index;
updateDays();
break;
case "dayWheel":
selectedDayIndex = index;
}
}

@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
yearWheelView.setOnItemSelectedListener(this);
yearWheelView.setAdapter(yearAdapter);
yearWheelView.setCurrentItem(selectedYearIndex);
monthWheelView.setOnItemSelectedListener(this);
monthWheelView.setAdapter(monthAdapter);
monthWheelView.setCurrentItem(selectedMonthIndex);
dayWheelView.setOnItemSelectedListener(this);
dayWheelView.setAdapter(dayAdapter);
dayWheelView.setCurrentItem(selectedDayIndex);
}

@Override
public void show() {
super.show();
}

@Override
public void dismiss() {
super.dismiss();
}

@Override
public void onClick(View v) {
if (listener != null) {
listener.onDateSelected(years.get(selectedYearIndex), selectedMonthIndex, selectedDayIndex + 1);
}
dismiss();
}

public interface OnDateSelectedListener {
void onDateSelected(int year, int month, int dayOfMonth);
}
}
Loading