扣丁学堂Android培训之仿ios年龄、生日、性别滚轮效果

2018-12-13 16:13:14 444浏览

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


布局:activity_main.xml

<?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>

MainActivity

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

DatePickerDialog

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

以上就是关于扣丁学堂Android培训之仿ios年龄、生日、性别滚轮效果的全部内容,希望对大家的学习有所帮助,扣丁学堂IT职业在线学习教育平台为您提供完整的体系Android视频教程让你快速掌握Android从入门到精通开发实战技能。

扣丁学堂微信公众号


【关注微信公众号获取更多学习资料】


查看更多关于“Android开发技术的相关资讯>>

标签: Android培训 Android学习路线 Android视频教程 Android开发培训 Android培训班

热门专区

暂无热门资讯

课程推荐

微信
微博
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
京ICP备12003911号-6   Copyright © 2013 - 2019

京公网安备 11010802030908号