Android 滚动时间选择的示例代码

效果图 复制代码直接用!!!!

1.导入依赖

implementation 'com.bigkoo:pickerview:2.1.0'

2.三个bean类
PickerViewData

public class PickerViewData implements IPickerViewData {
  private String content;

  public PickerViewData(String content) {
    this.content = content;
  }

  public void setContent(String content) {
    this.content = content;
  }

  @Override
  public String getPickerViewText() {
    return content;
  }
}

ProvinceBean

public class ProvinceBean implements IPickerViewData {
  private long id;
  private String name;
  private String description;
  private String others;

  public ProvinceBean(long id,String name,String description,String others){
    this.id = id;
    this.name = name;
    this.description = description;
    this.others = others;
  }

  public long getId() {
    return id;
  }

  public void setId(long id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getDescription() {
    return description;
  }

  public void setDescription(String description) {
    this.description = description;
  }

  public String getOthers() {
    return others;
  }

  public void setOthers(String others) {
    this.others = others;
  }

  //这个用来显示在PickerView上面的字符串,PickerView会通过IPickerViewData获取getPickerViewText方法显示出来。
  @Override
  public String getPickerViewText() {
    return name;
  }
}

TimeBean

public class TimeBean implements IPickerViewData {
  private String time;

  public TimeBean(String time) {
    this.time = time;
  }

  public String getTime() {
    return time;
  }

  public void setTime(String time) {
    this.time = time;
  }

  @Override
  public String getPickerViewText() {
    return time;
  }
}

3,布局文件activity_main

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" >
  <TextView
    android:layout_margin="50dp"
    android:id="@+id/tvTime"
    android:text="时间"
    android:layout_width="match_parent"
    android:layout_height="50dp"/>
  <TextView
    android:id="@+id/tvOptions"
    android:layout_margin="50dp"
    android:layout_below="@+id/tvTime"
    android:text="条件"
    android:layout_width="match_parent"
    android:layout_height="50dp"/>

  <View
    android:id="@+id/vMasker"
    android:visibility="gone"
    android:background="#e0000000"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>

</RelativeLayout>

4.MainActivity

public class MainActivity extends Activity {

  private ArrayList<TimeBean> options1Items = new ArrayList<>();
  private ArrayList<ArrayList<String>> options2Items = new ArrayList<>();
  private ArrayList<ArrayList<ArrayList<IPickerViewData>>> options3Items = new ArrayList<>();
  private TextView tvTime, tvOptions;
  TimePickerView pvTime;
  OptionsPickerView pvOptions;
  View vMasker;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    vMasker=findViewById(R.id.vMasker);
    tvTime=(TextView) findViewById(R.id.tvTime);
    tvOptions=(TextView) findViewById(R.id.tvOptions);
    //时间选择器
    pvTime = new TimePickerView(this, TimePickerView.Type.MONTH_DAY_HOUR_MIN);
    //控制时间范围
//    Calendar calendar = Calendar.getInstance();
//    pvTime.setRange(calendar.get(Calendar.YEAR) - 20, calendar.get(Calendar.YEAR));//要在setTime 之前才有效果哦
    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));
      }
    });
    //弹出时间选择器
    tvTime.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View v) {
        pvTime.show();
      }
    });

    //选项选择器
    pvOptions = new OptionsPickerView(this);
    //选项1
    options1Items.add(new TimeBean("现在"));
    options1Items.add(new TimeBean("今天"));
    options1Items.add(new TimeBean("明天"));
    options1Items.add(new TimeBean("后天"));

    //选项 1 2
    ArrayList<String> options2Items_01=new ArrayList<>();
    options2Items_01.add("--");

    //22
    ArrayList<String> options2Items_02=getTodayHourData();
    //32
    ArrayList<String> options2Items_03=getHourData();
    //32
    ArrayList<String> options2Items_04=getHourData();

    options2Items.add(options2Items_01);
    options2Items.add(options2Items_02);
    options2Items.add(options2Items_03);
    options2Items.add(options2Items_04);

    //选项3
    ArrayList<ArrayList<IPickerViewData>> options3Items_01 = new ArrayList<>();
    ArrayList<ArrayList<IPickerViewData>> options3Items_02 = new ArrayList<>();
    ArrayList<ArrayList<IPickerViewData>> options3Items_03 = new ArrayList<>();
    ArrayList<ArrayList<IPickerViewData>> options3Items_04 = new ArrayList<>();

    ArrayList<IPickerViewData> options3Items_01_01=new ArrayList<>();
    options3Items_01_01.add(new PickerViewData("--"));
    options3Items_01.add(options3Items_01_01);
    options3Items_02 =getmD2();
    options3Items_03 =getmD();
    options3Items_04 =getmD();

    options3Items.add(options3Items_01);
    options3Items.add(options3Items_02);
    options3Items.add(options3Items_03);
    options3Items.add(options3Items_04);

    //三级联动效果
    pvOptions.setPicker(options1Items, options2Items, options3Items, true);
    //设置选择的三级单位
//    pwOptions.setLabels("省", "市", "区");
    pvOptions.setTitle(" ");
    pvOptions.setCyclic(false, false, false);
    //设置默认选中的三级项目
    //监听确定选择按钮
    pvOptions.setSelectOptions(0, 0, 0);
    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).getPickerViewText();
        tvOptions.setText(tx);
        vMasker.setVisibility(View.GONE);
      }
    });
    //点击弹出选项选择器
    tvOptions.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View v) {
        pvOptions.show();
      }
    });
  }

  public static String getTime(Date date) {
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    return format.format(date);
  }

  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
      if(pvOptions.isShowing()||pvTime.isShowing()){
        pvOptions.dismiss();
        pvTime.dismiss();
        return true;
      }
      if(pvTime.isShowing()){
        pvTime.dismiss();
        return true;
      }
    }
    return super.onKeyDown(keyCode, event);
  }

  /**
   * 今天 点
   */
  private ArrayList<String> getTodayHourData(){
    int max =currentHour();
    if (max<23&&currentMin()>45){
      max=max+1;
    }
    ArrayList<String> lists=new ArrayList<>();
    for (int i=max;i<24;i++){
      lists.add(i+"点");
    }
    return lists;
  }

  /**
   * 明天 后天 点
   */
  private ArrayList<String> getHourData(){
    ArrayList<String> lists=new ArrayList<>();
    for (int i=0;i<24;i++){
      lists.add(i+"点");
    }
    return lists;
  }

  /**
   * 明天 后天 分
   */
  private ArrayList<IPickerViewData> getMinData(){
    ArrayList<IPickerViewData> dataArrayList=new ArrayList<>();
    for (int i=0;i<6;i++){
      dataArrayList.add(new PickerViewData((i*10)+"分"));
    }
    return dataArrayList;
  }
  /**
   * 明天 后天
   */
  private ArrayList<ArrayList<IPickerViewData>> getmD(){
    ArrayList<ArrayList<IPickerViewData>> d=new ArrayList<>();
    for (int i=0;i<24;i++){
      d.add(getMinData());
    }
    return d;
  }

  /**
   * 明天 后天 2222
   */
  private ArrayList<ArrayList<IPickerViewData>> getmD2(){
    //14
    int max =currentHour();
    if (currentMin()>45){
      max=max+1;
    }
    int value =24-max;
    ArrayList<ArrayList<IPickerViewData>> d=new ArrayList<>();
    for (int i=0;i<value;i++){
      if (i==0){
        d.add(getTodyMinData());
      }else {
        d.add(getMinData());
      }

    }
    return d;
  }

  /**
   * 明天 后天 分2222
   */
  private ArrayList<IPickerViewData> getTodyMinData(){

    int min = currentMin();
    int current=0;
    if (min>35&&min<=45){
      current =0;
    }else if (min>45&&min<=55){
      current=1;
    } else if (min>55){
      current=2;
    }else if (min<=5){
      current=2;
    }else if (min>5&&min<=15){
      current=3;
    }else if (min>15&&min<=25){
      current=4;
    }else if (min>25&&min<=35){
      current=5;
    }
    int max =currentHour();
    if (max>23&& min>35){
      current=5;
    }

    ArrayList<IPickerViewData> dataArrayList=new ArrayList<>();
    for (int i=current;i<6;i++){
      dataArrayList.add(new PickerViewData((i*10)+"分"));
    }
    return dataArrayList;
  }

  private int currentMin(){
    Calendar cal = Calendar.getInstance();
    return cal.get(Calendar.MINUTE);
  }

  private int currentHour(){
    Calendar cal = Calendar.getInstance();
    return cal.get(Calendar.HOUR_OF_DAY);
  }
}

到此这篇关于Android 滚动时间选择的示例代码的文章就介绍到这了,更多相关Android 滚动时间选择内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android仿iphone自定义滚动选择器

    本文实例为大家分享了Android仿iphone自定义滚动选择器的具体代码,供大家参考,具体内容如下 一.多的不说,效果图,先走起 二.实例源码 (1)自定义控件 package com.pickerscrollview.views; import java.util.ArrayList; import java.util.List; import java.util.Timer; import java.util.TimerTask; import android.annotation.Sup

  • Android自定义wheelview实现滚动日期选择器

    本文实例为大家分享了Android实现滚动日期选择器的具体代码,供大家参考,具体内容如下 wheelview滚动效果的View 这段时间需要用到一个时间选择器,但是不能使用日期对话框, 因为它是筛选条件框架下的,只能是View!这个WheelView改造后可以达到要求! 这个wheelview框架使用的类不多,就几个,还有一些资源文件. 我根据这个框架设计了日期的选择器. 主页面: 第一种日期选择器页面: 动态效果: 使用: 具体的实现是一个LoopView的类,这是一个继承View的类! 理解

  • Android自定义可循环的滚动选择器CycleWheelView

    最近碰到个项目要使用到滚动选择器,原生的NumberPicker可定制性太差,不大符合UI要求. 网上开源的WheelView是用ScrollView写的,不能循环滚动,而且当数据量很大时要加载的Item太多,性能非常低. 然后,还是自己写一个比较靠谱,用的是ListView实现的.写完自己体验了一下,性能不错,再大的数据也不怕了. 感觉不错,重新封装了一下,提供了一些接口可以直接按照自己的需求定制,调用方法在MainActivity中. 补个图片: 不多说了,直接上代码: CycleWheel

  • Android自定义滚动选择器实例代码

    Android自定义滚动选择器 实现图片的效果 代码如下 package com.linzihui.widget; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Paint.Align; import android.graph

  • Android自定义控件实现按钮滚动选择效果

    本文实例为大家分享了Android实现按钮滚动选择效果的具体代码,供大家参考,具体内容如下 效果图 代码实现 package com.demo.ui.view; import android.annotation.TargetApi; import android.content.Context; import android.os.Build; import android.os.Handler; import android.support.v4.content.ContextCompat;

  • Android自定义半圆形圆盘滚动选择器

    前段时间公司项目要求做一个特效的滑动选择器,效果如下图的样子: 功能要求:两边的半圆形转盘可以转动,转盘上的图标也一起滚动,蓝红色图标指着的小图标变成高亮选中状态. 第一眼看到这个需求就想到这个必须要用自定义控件来做才行,于是产生了这样的思路: 半圆形的滚动的转盘自定义view继承viewgroup,重写滑动事件,自定义圆盘上图片的摆放角度,至于蓝色和红色箭头图标指向的选中状态可以用坐标数组绘制一个区域来判断是否有符合条件的图标滚动到了这个位置,如果有的话就将这个图标所在的控件透明度设置为1,如

  • Android PickerView滚动选择器的使用方法

    手机里设置闹钟需要选择时间,那个选择时间的控件就是滚动选择器,前几天用手机刷了MIUI,发现自带的那个时间选择器效果挺好看的,于是就自己仿写了一个,权当练手.先来看效果: 效果还行吧?实现思路就是自定义一个PickerView,单独滚动的是一个PickerView,显然上图中有分和秒的选择所以在布局里用了两个PickerView.由于这里不涉及到text的点击事件,所以只需要继承View就行了,直接把text用canvas画上去.PickerView的实现的主要难点: 难点1: 字体随距离的渐变

  • Android DSelectorBryant 单选滚动选择器的实例代码

    单选滚动选择器.diy丰富.有阻尼效果.简单美观.触摸or点击模式 (Rolling Selector, Diy Rich, Damping Effect, Simple and Beautiful, Touch or Click Mode) Github地址 YangsBryant/DSelectorBryant (Github排版比较好,建议进入这里查看详情,如果觉得好,点个star吧!) 引入module allprojects { repositories { google() jcen

  • Android 滚动时间选择的示例代码

    效果图 复制代码直接用!!!! 1.导入依赖 implementation 'com.bigkoo:pickerview:2.1.0' 2.三个bean类 PickerViewData public class PickerViewData implements IPickerViewData { private String content; public PickerViewData(String content) { this.content = content; } public voi

  • ImageView 实现Android colorPikcer 选择器的示例代码

    本文介绍了ImageView 实现Android colorPikcer 选择器的示例代码,分享给大家,具体如下: Android colorPikcer 选择器 环形的ColorPicker,主要思路是: Color 选在放在ImageView 的background上面,根据点击的位置判断选择的颜色. 重写onTouch,在onTouch 里面判断点击点的颜色. 根据当前选择的颜色设置图片的src. 获取Bitmap 在 ColorPickerView 构造函数中初始化 Bitmap.因为g

  • Android 曲线图的绘制示例代码

    本文介绍了Android 曲线图的绘制示例代码,分享给大家,具体如下: 效果展示 效果展示.gif 使用方式 // 初始化数据表格相关 with(mTableView) { // 配置坐标系 setupCoordinator("日", "人", /*这里是横坐标的值*/0f, 5f, 10f, 15f, 20f, 25f, 30f) // 添加曲线, 确保纵坐标的数值位数相等 addWave(ContextCompat.getColor(this@MainActiv

  • Android进程间通信实践的示例代码

    本文介绍了Android进程间通信实践的示例代码,分享给大家,具体如下: 因为线程间的内存是共享的,所以它们之间的通信简单,比如可以通过共享变量等方式实现.而进程间想要通信就要麻烦许多了.要想实现进程间通信,我们需要在不同进程之间定义一套它们可以共同理解的接口描述语言,也即 IDL.比较常用的 IDL 有 JSON.Protocol Buffers 等.而 Android 不同进程之间的通信也有个特别的语言,叫 AIDL(Android Interface Definition Language

  • Docker Swarm实现服务的滚动更新的示例代码

    一.什么是Docker Swarm? Docker Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源.Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些. Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创

  • vue实现公告栏文字上下滚动效果的示例代码

    本文详细的介绍了vue实现公告栏文字上下滚动效果的示例代码,分享给大家,具体入如下: 代码实现: 在项目结构的components中新建text-scroll.vue文件 <template> <div class="text-container"> <transition class="" name="slide" mode="out-in"> <p class="text

  • Qt实现字幕滚动效果的示例代码

    目录 一.项目介绍 二.项目基本配置 三.UI界面设计 四.主程序实现 4.1 widget.h头文件 4.2 widget.cpp源文件 五.效果演示 一.项目介绍 利用QTimer实现字幕滚动功能,可以实现自行更改文本内容.自适应文本大小.自由调整速度等功能. 二.项目基本配置 新建一个Qt案例,项目名称为“TextScroll”,基类选择“QWidget”,取消创建UI界面复选框的选中状态,完成项目创建. 三.UI界面设计 无UI界面 四.主程序实现 4.1 widget.h头文件 声明私

  • android使用flutter的ListView实现滚动列表的示例代码

    现如今打开一个 App,比如头条.微博,都会有长列表,随着我们不断地滑动,视窗内的内容也会不断地更新.今天就用 Flutter 实现一下这种效果. 这里的表现其实就相当于有一个固定长度的容器,然后超出的内容是不可见的,只有当你向上或向下滑动屏幕时,视窗外看不见的内容才会出现在视窗中.如果在 web 开发时,是需要容器加上样式 overflow: auto; 要想用 Flutter 实现,其实也是很简单的,因为 Flutter 为我们提供了 ListView 组件. ListView 主要有以下几

  • Android 使用 Scroller 实现平滑滚动功能的示例代码

    记录使用Scroller实现平滑滚动,效果图如下: 一.自定义View中实现View的平滑滚动 public class ScrollerView extends View { private Scroller mScroller; private Paint mPaint; /** * 屏幕拖动最小像素 */ private int mTouchSlop; /** * View宽度 */ private int width; /** * View高度 */ private int height

  • Android解析json数据示例代码(三种方式)

    Json数据 复制代码 代码如下: [{"code":"110000","sheng":"11","di":"00","xian":"00","name":"北京市","level":1},{"code":"659004","sheng&q

随机推荐