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

简单来说就是在一个页面点击某一按钮或图标想要弹出这样一个弹窗,拿到这个需求第一眼看不错不错,简单,这不就像日历一样?系统内置的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;
}
}
网友评论