美文网首页
计时器功能(分,秒)

计时器功能(分,秒)

作者: Amy木婉清 | 来源:发表于2021-01-12 15:05 被阅读0次

废话不多说,我们直接上需求截图:


image.png

简单来说就是在一个页面点击某一按钮或图标想要弹出这样一个弹窗,拿到这个需求第一眼看不错不错,简单,这不就像日历一样?系统内置的API咔嚓一运用就完了。呕吼?写下去呢?哇去,不对啊,这弹窗有点东西,疯狂百度一波?好像都不太行呢。来,我们看看这顽固的弹窗怎么被征服的⑧。

首先要知道这是一个类似于计时器的弹窗,包括分和秒 ,而且弹窗内容可编辑,用户可选择。那怎么实现呢?上代码,我们首先来看布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#ffffff"
    android:orientation="vertical">      

    <TextView
        android:id="@+id/tv_dialog_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp"
        android:paddingBottom="5dp"
        android:text="XXXX标题"
        android:textColor="#FF0F41A6"
        android:textSize="18sp" />

    <LinearLayout
        android:id="@+id/ll_time"
        android:layout_width="match_parent"
        android:layout_height="350dp"
        android:gravity="center"
        android:orientation="horizontal"
        android:padding="5dp">

        <com.wx.wheelview.widget.WheelView
            android:id="@+id/wv_minute"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="3" />

        <TextView
            android:layout_marginLeft="@dimen/dimens_10dp"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="分"
            android:textColor="#ff333333"
            android:textSize="14sp"
            />

        <com.wx.wheelview.widget.WheelView
            android:id="@+id/wv_second"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="3" />
        <TextView
            android:layout_marginLeft="@dimen/dimens_10dp"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="秒"
            android:textColor="#ff333333"
            android:textSize="14sp"
            />
    </LinearLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="61dp"
        android:background="#ffffff"
        android:gravity="center">

        <TextView
            android:layout_alignParentBottom="true"
            android:id="@+id/tv_see"
            android:layout_width="match_parent"
            android:layout_height="44dp"
            android:layout_marginHorizontal="16dp"
            android:background="@drawable/bg_radius8_0f41a6"
            android:gravity="center"
            android:text="确定"
            android:textColor="#ffffffff"
            android:textSize="16sp" />
    </RelativeLayout>

</LinearLayout>

弹窗代码:

    private List<String> listMinute = new ArrayList<>();
    private List<String> listSecond = new ArrayList<>();
    private int currentMinute;
    private int currentSecond;
    private Context mContext;
    private TransparentPop mPop;
    private View rootView;
    private ConfirmListener confirmListener;

    public void setConfirmListener(ConfirmListener confirmListener) {
        this.confirmListener = confirmListener;
    }


    public CheckInoutPop(Context mContext) {
        this.mContext = mContext;
        init();
        initData();
        initView();
    }

    private void init() {
        rootView = LayoutInflater.from(mContext).inflate(R.layout.pop_input, new LinearLayout(mContext), false);
        ButterKnife.bind(this, rootView);
        mPop = new TransparentPop(mContext, this);
        tvSee.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int currentMinPosition = wvMinute.getCurrentPosition();
                int currentSecPosition = wvSecond.getCurrentPosition();
                if (confirmListener != null && currentMinPosition != -1 || currentSecPosition != -1) {
                    confirmListener.confirm(listMinute.get(currentMinPosition),listSecond.get(currentSecPosition));
                }
                dismiss();
            }
        });
    }

    public void show(View parent) {
        mPop.show(parent, false);
    }

    public void setDismissCallBack(TransparentPop.DismissListener dismissListener) {
        mPop.setDismissListener(dismissListener);
    }

    public void dismiss() {
        if (mPop != null) {
            mPop.dismiss(true);
        }
    }

    @Override
    public void invokeView(LinearLayout v) {
        v.setGravity(Gravity.BOTTOM);
        v.addView(rootView);
    }

    @Override
    public void releaseView(LinearLayout v) {

    }

    public interface ConfirmListener {
        void confirm(String min, String sec);
    }

    private void initData() {
        initMinute();
        initSecond();
    }

    /**
     * 集合添加分钟
     */
    private void initMinute() {
        for (int i = 0; i <= 60; i++) {
            listMinute.add(String.format("%d", i));
        }
    }


    /**
     * 集合添加秒钟
     */
    private void initSecond() {
        for (int i = 0; i <= 60; i++) {
            listSecond.add(String.format("%02d", i));
        }
    }

    private void initView() {
        //分
        wvMinute.setWheelAdapter(new ArrayWheelAdapter(mContext)); // 文本数据源
        wvMinute.setSkin(WheelView.Skin.Holo); // common皮肤
        wvMinute.setLoop(true);
        wvMinute.setWheelData(listMinute);
        wvMinute.setSelection(currentMinute);
        wvMinute.setVisibility(View.VISIBLE);

        //秒
        wvSecond.setWheelAdapter(new ArrayWheelAdapter(mContext)); // 文本数据源
        wvSecond.setSkin(WheelView.Skin.Holo); // common皮肤
        wvSecond.setLoop(true);
        wvSecond.setWheelData(listSecond);
        wvSecond.setSelection(currentSecond);
        wvSecond.setVisibility(View.VISIBLE);
    }

    /**
     * 获取时间
     *
     * @return
     */
    public String getDate() {
        String minute = wvMinute.getSelectionItem().toStrng().replace("分", "");
        String second = wvSecond.getSelectionItem().toString().replace("秒", "");
        return minute + second;
    }

}

相关文章

网友评论

      本文标题:计时器功能(分,秒)

      本文链接:https://www.haomeiwen.com/subject/ztqroktx.html