2018-12-13 16:13:14 484浏览
今天扣丁学堂Android培训老师给大家介绍一下关于仿ios年龄、生日、性别滚轮效果源码详解,首先无论新项目Android和ios要做成统一样式,年龄,性别,时间,要做成滚轮效果,Android没有原生控件,只能自己定义,于是我较劲脑汁,终于写出来,本着分享精神,贴出部分代码,直接拷贝就能用。

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:id="@+id/activity_main" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:id="@+id/textView"/> <Button android:text="生日" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:id="@+id/button" android:onClick="date" android:layout_alignParentRight="true" android:layout_alignParentEnd="true"/> <Button android:text="时间" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/button" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:id="@+id/button2" android:onClick="time" android:layout_alignParentRight="true" android:layout_alignParentEnd="true"/> <Button android:text="性别" android:onClick="zidingyi" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/button2" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:id="@+id/button3" android:layout_alignParentRight="true" android:layout_alignParentEnd="true"/> </RelativeLayout>
public class MainActivity extends AppCompatActivity {
private Dialog dateDialog, timeDialog, chooseDialog;
private TextView mTextView;
private List<String> list = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.textView);
String[] data = getResources().getStringArray(R.array.list);
for (String str : data) {
list.add(str);
}
}
/**
* chooseDialog
*/
private void showChooseDialog(List<String> mlist) {
DataPickerDialog.Builder builder = new DataPickerDialog.Builder(this);
chooseDialog = builder.setData(mlist).setSelection(1).setTitle("取消")
.setOnDataSelectedListener(new DataPickerDialog.OnDataSelectedListener() {
@Override
public void onDataSelected(String itemValue, int position) {
mTextView.setText(itemValue);
}
@Override
public void onCancel() {
}
}).create();
chooseDialog.show();
}
private void showDateDialog(List<Integer> date) {
DatePickerDialog.Builder builder = new DatePickerDialog.Builder(this);
builder.setOnDateSelectedListener(new DatePickerDialog.OnDateSelectedListener() {
@Override
public void onDateSelected(int[] dates) {
mTextView.setText(dates[0] + "-" + (dates[1] > 9 ? dates[1] : ("0" + dates[1])) + "-"
+ (dates[2] > 9 ? dates[2] : ("0" + dates[2])));
}
@Override
public void onCancel() {
}
})
.setSelectYear(date.get(0) - 1)
.setSelectMonth(date.get(1) - 1)
.setSelectDay(date.get(2) - 1);
builder.setMaxYear(DateUtil.getYear());
builder.setMaxMonth(DateUtil.getDateForString(DateUtil.getToday()).get(1));
builder.setMaxDay(DateUtil.getDateForString(DateUtil.getToday()).get(2));
dateDialog = builder.create();
dateDialog.show();
}
private void showTimePick() {
if (timeDialog == null) {
TimePickerDialog.Builder builder = new TimePickerDialog.Builder(this);
timeDialog = builder.setOnTimeSelectedListener(new TimePickerDialog.OnTimeSelectedListener() {
@Override
public void onTimeSelected(int[] times) {
mTextView.setText(times[0] + ":" + times[1]);
}
}).create();
}
timeDialog.show();
}
public void time(View v) {
showTimePick();
}
public void date(View v) {
showDateDialog(DateUtil.getDateForString("1990-01-01"));
}
public void zidingyi(View v) {
showChooseDialog(list);
}
}
public class DataPickerDialog extends Dialog {
private Params params;
public DataPickerDialog(Context context, int themeResId) {
super(context, themeResId);
}
private void setParams(DataPickerDialog.Params params) {
this.params = params;
}
public void setSelection(String itemValue) {
if (params.dataList.size() > 0) {
int idx = params.dataList.indexOf(itemValue);
if (idx >= 0) {
params.initSelection = idx;
params.loopData.setCurrentItem(params.initSelection);
}
}
}
public interface OnDataSelectedListener {
void onDataSelected(String itemValue, int position);
void onCancel();
}
private static final class Params {
private boolean shadow = true;
private boolean canCancel = true;
private LoopView loopData;
private String title;
private String unit;
private int initSelection;
private OnDataSelectedListener callback;
private final List<String> dataList = new ArrayList<>();
}
public static class Builder {
private final Context context;
private final DataPickerDialog.Params params;
public Builder(Context context) {
this.context = context;
params = new DataPickerDialog.Params();
}
private final String getCurrDateValue() {
return params.loopData.getCurrentItemValue();
}
public Builder setData(List<String> dataList) {
params.dataList.clear();
params.dataList.addAll(dataList);
return this;
}
public Builder setTitle(String title) {
params.title = title;
return this;
}
public Builder setUnit(String unit) {
params.unit = unit;
return this;
}
public Builder setSelection(int selection) {
params.initSelection = selection;
return this;
}
public Builder setOnDataSelectedListener(OnDataSelectedListener onDataSelectedListener) {
params.callback = onDataSelectedListener;
return this;
}
public DataPickerDialog create() {
final DataPickerDialog dialog = new DataPickerDialog(context, params.shadow ? R.style.Theme_Light_NoTitle_Dialog : R.style.Theme_Light_NoTitle_NoShadow_Dialog);
View view = LayoutInflater.from(context).inflate(R.layout.layout_picker_data, null);
if (!TextUtils.isEmpty(params.title)) {
TextView txTitle = (TextView) view.findViewById(R.id.tx_title);
txTitle.setText(params.title);
txTitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
params.callback.onCancel();
}
});
}
if (!TextUtils.isEmpty(params.unit)) {
TextView txUnit = (TextView) view.findViewById(R.id.tx_unit);
txUnit.setText(params.unit);
}
final LoopView loopData = (LoopView) view.findViewById(R.id.loop_data);
loopData.setArrayList(params.dataList);
loopData.setNotLoop();
if (params.dataList.size() > 0) loopData.setCurrentItem(params.initSelection);
view.findViewById(R.id.tx_finish).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
params.callback.onDataSelected(getCurrDateValue(),loopData.getCurrentItem());
}
});
Window win = dialog.getWindow();
win.getDecorView().setPadding(0, 0, 0, 0);
WindowManager.LayoutParams lp = win.getAttributes();
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
win.setAttributes(lp);
win.setGravity(Gravity.BOTTOM);
win.setWindowAnimations(R.style.Animation_Bottom_Rising);
dialog.setContentView(view);
dialog.setCanceledOnTouchOutside(params.canCancel);
dialog.setCancelable(params.canCancel);
params.loopData = loopData;
dialog.setParams(params);
return dialog;
}
}
}
【关注微信公众号获取更多学习资料】