文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么在Android应用中实现一个IOS 滚轮选择控件

2023-05-31 08:32

关注

今天就跟大家聊聊有关怎么在Android应用中实现一个IOS 滚轮选择控件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

代码如下:

public class Util {    public interface TimerPickerCallBack {    void onTimeSelect(String date);  }    public static void alertTimerPicker(Context context, TimePickerView.Type type, final String format, final TimerPickerCallBack callBack) {    TimePickerView pvTime = new TimePickerView(context, type);    //控制时间范围    //    Calendar calendar = Calendar.getInstance();    //    pvTime.setRange(calendar.get(Calendar.YEAR) - 20, calendar.get(Calendar.YEAR));    pvTime.setTime(new Date());    pvTime.setCyclic(false);    pvTime.setCancelable(true);    //时间选择后回调    pvTime.setOnTimeSelectListener(new TimePickerView.OnTimeSelectListener() {      @Override      public void onTimeSelect(Date date) {//            tvTime.setText(getTime(date));        SimpleDateFormat sdf = new SimpleDateFormat(format);        callBack.onTimeSelect(sdf.format(date));      }    });    pvTime.setTextSize(16);    //弹出时间选择器    pvTime.show();  }    public interface OnWheelViewClick {    void onClick(View view, int postion);  }    public static void alertBottomWheelOption(Context context, ArrayList<?> list, final OnWheelViewClick click) {    final PopupWindow popupWindow = new PopupWindow();    View view = LayoutInflater.from(context).inflate(R.layout.layout_bottom_wheel_option, null);    TextView tv_confirm = (TextView) view.findViewById(R.id.btnSubmit);    final WheelView wv_option = (WheelView) view.findViewById(R.id.wv_option);    wv_option.setAdapter(new ArrayWheelAdapter(list));    wv_option.setCyclic(false);    wv_option.setTextSize(16);    tv_confirm.setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View view) {        popupWindow.dismiss();        click.onClick(view, wv_option.getCurrentItem());      }    });    view.findViewById(R.id.btnCancel).setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View view) {        // TODO: 2016/8/11 0011 取消        popupWindow.dismiss();      }    });    view.setOnTouchListener(new View.OnTouchListener() {      @Override      public boolean onTouch(View view, MotionEvent motionEvent) {        int top = view.findViewById(R.id.ll_container).getTop();        if (motionEvent.getAction() == MotionEvent.ACTION_UP) {          int y = (int) motionEvent.getY();          if (y < top) {            popupWindow.dismiss();          }        }        return true;      }    });    popupWindow.setContentView(view);    popupWindow.setOutsideTouchable(true);    popupWindow.setFocusable(true);    popupWindow.setBackgroundDrawable(new BitmapDrawable());    popupWindow.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);    popupWindow.setHeight(ViewGroup.LayoutParams.MATCH_PARENT);    popupWindow.showAtLocation(((ViewGroup) ((Activity) context).findViewById(android.R.id.content)).getChildAt(0), Gravity.CENTER, 0, 0);  }}

单项选择

这里是模拟传入 ArrayList 形式的 String 类型 :

// 单项选择    for (int i = 0; i <= 10; i++) {      mList.add("模拟数据" + i);    }    tv_single_option.setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View v) {        Util.alertBottomWheelOption(MainActivity.this, mList, new Util.OnWheelViewClick() {          @Override          public void onClick(View view, int postion) {            Toast.makeText(MainActivity.this, mList.get(postion), Toast.LENGTH_SHORT).show();          }        });      }    });

补充:我们实际项目中用法可能是传入一个实体对象,那么我们到 WheelView 中找到设置显示内容的方法:

  private String getContentText(Object item) {    String contentText = item.toString();    try {      Class<?> clz = item.getClass();      Method m = clz.getMethod(GETPICKERVIEWTEXT);      contentText = m.invoke(item, new Object[0]).toString();    } catch (NoSuchMethodException e) {    } catch (InvocationTargetException e) {    } catch (IllegalAccessException e) {    } catch (Exception e){    }    return contentText;  }

根据以上代码,可以看到如果是一个实体对象,那么就是通过对象内部定义的一个方法名为 GETPICKERVIEWTEXT(静态常量=”getPickerViewText”)的返回值来作为显示内容,

所以在创建对象的时候,要注意在对象内部添加一个 getPickerViewText()方法,代码如下:

public class TypeBean {  private int id;  private String name;  public TypeBean(int id, String name) {    this.id = id;    this.name = name;  }  public int getId() {    return id;  }  public void setId(int id) {    this.id = id;  }  public String getName() {    return name;  }  public void setName(String name) {    this.name = name;  }  //这个用来显示在PickerView上面的字符串,PickerView会通过反射获取getPickerViewText方法显示出来。  public String getPickerViewText() {    //这里还可以判断文字超长截断再提供显示    return name;  }}

日期选择

这里是传入 选择日期类型,和 回调时间格式 就能直接得到想要的结果,

@Override  public void onClick(View v) {    String format = "";    TimePickerView.Type type = null;    switch (v.getId()) {      case R.id.btn_ymdhm:        type = TimePickerView.Type.ALL;        format = "yyyy-MM-dd HH:mm";        break;      case R.id.btn_ymdh:        type = TimePickerView.Type.YEAR_MONTH_DAY_HOUR;        format = "yyyy-MM-dd HH";        break;      case R.id.btn_ymd:        type = TimePickerView.Type.YEAR_MONTH_DAY;        format = "yyyy-MM-dd";        break;      case R.id.btn_mdhm:        type = TimePickerView.Type.MONTH_DAY_HOUR_MIN;        format = "MM-dd HH:mm";        break;      case R.id.btn_hm:        type = TimePickerView.Type.HOURS_MINS;        format = "HH:mm";        break;      case R.id.btn_ym:        type = TimePickerView.Type.YEAR_MONTH;        format = "yyyy-MM";        break;    }    Util.alertTimerPicker(this, type, format, new Util.TimerPickerCallBack() {      @Override      public void onTimeSelect(String date) {        Toast.makeText(TestActivity.this, date, Toast.LENGTH_SHORT).show();      }    });  }

条件选择

private ArrayList<ProvinceBean> options1Items = new ArrayList<ProvinceBean>();private ArrayList<ArrayList<String>> options2Items = new ArrayList<ArrayList<String>>();private ArrayList<ArrayList<ArrayList<String>>> options3Items = new ArrayList<ArrayList<ArrayList<String>>>();OptionsPickerView pvOptions;private void showOptions(){    //选项选择器    pvOptions = new OptionsPickerView(this);    // 初始化三个列表数据    DataModel.initData(options1Items, options2Items, options3Items);    //三级联动效果    pvOptions.setPicker(options1Items, options2Items, options3Items, true);    //设置选择的三级单位//    pwOptions.setLabels("省", "市", "区");    pvOptions.setTitle("选择城市");    pvOptions.setCyclic(false, false, false);    //设置默认选中的三级项目    //监听确定选择按钮    pvOptions.setSelectOptions(1, 1, 1);    pvOptions.setTextSize(18);    pvOptions.setOnoptionsSelectListener(new OptionsPickerView.OnOptionsSelectListener() {      @Override      public void onOptionsSelect(int options1, int option2, int options3) {        //返回的分别是三个级别的选中位置        String tx = options1Items.get(options1).getPickerViewText()            + options2Items.get(options1).get(option2)            + options3Items.get(options1).get(option2).get(options3);        tvOptions.setText(tx);        vMasker.setVisibility(View.GONE);      }    });    //点击弹出选项选择器    tvOptions.setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View v) {        pvOptions.show();      }    });  }

看完上述内容,你们对怎么在Android应用中实现一个IOS 滚轮选择控件有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯