開篇
??花了點時間親手擼了一個酷炫高質量的滾輪控件WheelView
開源。掃描文中的二維碼下載體驗App。希望童鞋們能喜歡!
WheelView
性能盤點:
- 1、繪制優化(繪制條數 = 顯示條數 + 2,不會過多繪制)
- 2、支持各種數據類型(數據類型實現IWheel接口)
- 3、支持點擊選中
- 4、封裝了多列底部彈窗
- 5、封裝了日期時間選擇底部彈出
效果截屏
wheel_view
column_dialog
date_time_dialog
立即體驗
掃描以下二維碼下載體驗App(體驗App內嵌版本更新檢測功能):
掃描下載體驗App
WheelViewLibrary傳送門:https://github.com/JustinRoom/WheelViewDemo
簡析源碼
本篇就不做源碼分析了
gradle引用
compile 'jsc.kit.wheel:wheel-view:_latestVersion'
屬性
名稱 | 類型 | 描述 |
---|---|---|
wheelTextColor |
color | 選中item字體顏色 |
wheelTextSize |
dimension | 字體大小 |
wheelShowCount |
integer | 顯示item條數,與wheelItemVerticalSpace 決定了控件的高度 |
wheelTotalOffsetX |
dimension | X軸方向總彎曲度,決定弧形效果 |
wheelItemVerticalSpace |
dimension | 兩個item之間的間距,與wheelShowCount 決定了控件的高度 |
wheelRotationX |
float | 已X軸為軸心旋轉角度,決定3D效果 |
wheelVelocityUnits |
integer | 自動翻滾速度單位 |
名稱 | 類型 | 描述 |
---|---|---|
wheelMaskLineColor |
color | 中間選中item的兩條分割線顏色 |
子View | 類型 | 屬性 |
---|---|---|
wheelView |
WheelView | WheelView所有屬性 |
wheelMaskView |
WheelMaskView | WheelMaskView所有屬性 |
使用示例
組件 | 使用示例 |
---|---|
WheelView | WheelViewFragment |
ColumnWheelDialog | ColumnWheelFragment |
DateTimeWheelDialog | DateTimeWheelFragment |
<jsc.kit.wheel.base.WheelItemView
android:id="@+id/wheel_view_left"
android:layout_width="160dp"
android:layout_height="wrap_content"
app:wheelItemVerticalSpace="12dp"
app:wheelTotalOffsetX="12dp" />
<jsc.kit.wheel.base.WheelView
android:id="@+id/wheel_view_left"
android:layout_width="160dp"
android:layout_height="wrap_content"
app:wheelItemVerticalSpace="12dp"
app:wheelTotalOffsetX="-12dp" />
- 2、 ColumnWheelDialog
多列互不關聯底部彈窗,最多支持5列。相應的列有數據則顯示,無數據則不顯示。
private ColumnWheelDialog showDialog() {
ColumnWheelDialog<WheelItem, WheelItem, WheelItem, WheelItem, WheelItem> dialog = new ColumnWheelDialog<>(getActivity());
dialog.show();
dialog.setTitle("選擇菜單");
dialog.setCancelButton("取消", null);
dialog.setOKButton("確定", new ColumnWheelDialog.OnClickCallBack<WheelItem, WheelItem, WheelItem, WheelItem, WheelItem>() {
@Override
public boolean callBack(View v, @Nullable WheelItem item0, @Nullable WheelItem item1, @Nullable WheelItem item2, @Nullable WheelItem item3, @Nullable WheelItem item4) {
return false;
}
});
dialog.setItems(
initItems("菜單選項一"),
initItems("菜單選項二"),
initItems("菜單選項三"),
initItems("菜單選項四"),
initItems("菜單選項五")
);
dialog.setSelected(
new Random().nextInt(50),
new Random().nextInt(50),
new Random().nextInt(50),
new Random().nextInt(50),
new Random().nextInt(50)
);
private WheelItem[] initItems(String label) {
final WheelItem[] items = new WheelItem[50];
for (int i = 0; i < 50; i++) {
items[i] = new WheelItem(label + (i < 10 ? "0" + i : "" + i));
}
return items;
}
- 3、DateTimeWheelDialog
日期時間選擇底部彈窗,最多支持到分鐘。
private DateTimeWheelDialog showDialog(int type) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, 2015);
calendar.set(Calendar.MONTH, 0);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
Date startDate = calendar.getTime();
calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, 2020);
Date endDate = calendar.getTime();
DateTimeWheelDialog dialog = new DateTimeWheelDialog(getActivity());
dialog.show();
dialog.setTitle("選擇時間");
int config = DateTimeWheelDialog.SHOW_YEAR_MONTH_DAY_HOUR_MINUTE;
switch (type) {
case 1://只顯示年
config = DateTimeWheelDialog.SHOW_YEAR;
break;
case 2://顯示年、月
config = DateTimeWheelDialog.SHOW_YEAR_MONTH;
break;
case 3://顯示年、月、日
config = DateTimeWheelDialog.SHOW_YEAR_MONTH_DAY;
break;
case 4://顯示年、月、日、時
config = DateTimeWheelDialog.SHOW_YEAR_MONTH_DAY_HOUR;
break;
case 5://顯示年、月、日、時、分
config = DateTimeWheelDialog.SHOW_YEAR_MONTH_DAY_HOUR_MINUTE;
break;
}
dialog.configShowUI(config);
dialog.setCancelButton("取消", null);
dialog.setOKButton("確定", new DateTimeWheelDialog.OnClickCallBack() {
@Override
public boolean callBack(View v, @NonNull Date selectedDate) {
tvResult.setText(SimpleDateFormat.getInstance().format(selectedDate));
return false;
}
});
dialog.setDateArea(startDate, endDate, true);
dialog.updateSelectedDate(new Date());
}
使用介紹就到這里。
從0擼出這個開源庫不容易,希望童鞋們在GitHub上給一顆星星?支持下。謝謝!如果在使用過程中不懂(或需要改進的地方),可以在評論里給我留言,也可以聯系我。
微信:eoy9527
、QQ:1006368252
。
平時可能很少登錄QQ。
篇尾
有所作為是生活的最高境界。 —— 恩格斯