https://github.com/Bigkoo/Android-PickerView
これは、時間セレクターとオプションセレクターを備えたiOSのようなPickerViewコントロールです。新しいバージョンの詳細な機能は次のとおりです。
-timePickerViewタイムピッカー。年、月、日、時間、年、月、日、年、月、時間、およびその他の形式をサポートします。
-optionsPickerViewオプションセレクター。1、2、および3レベルのオプション選択をサポートし、リンクするかどうかを設定できます。
- 3つのレベルのリンケージをサポート
- リンクするかどうかを設定する
- ループモードを設定する
- カスタムレイアウトをサポートします。
- アイテムディバイダー設定をサポートします。
- アイテム間隔設定をサポートします。
- 時間セレクターは、開始日と終了日の設定をサポートしています。
- 「年、月、日、時、分、秒」、「州、市、地区」、およびその他の単位(ラベル)の表示、非表示、カスタマイズのオプションをサポートします。
- カスタムテキスト、色、テキストサイズ、その他の属性をサポートする
- アイテムのテキストの長さが長すぎる場合、不完全な表示の問題を回避するために、テキストはアイテムの長さに適応的にスケーリングされます
- ダイアログモードをサポートします。
- カスタム設定コンテナをサポートします。
- リアルタイムのコールバック。
3Dスクロールホイール効果の実装メカニズムの研究に興味がある場合、ソースコードを徹底的に研究したい場合は、このブログを読むことができます。
Androidのソースコード分析-PickerViewシリーズ(2つ)
使用上の注意
- 注:時間の開始位置を設定するときは、月の設定に特に注意する必要があります
- 理由:カレンダーコンポーネントの月は0から始まります。つまり、0〜11は1〜12か月を表します。
- 間違ったユースケース:startDate.set(2013,1,1); endDate.set(2020,12,1);
- 正しいユースケース:startDate.set(2013,0,1); endDate.set(2020,11,1);
V4.1.9バージョンアップデート手順(2019-10-20)
- 修正:月の日に時々境界を越える問題。
- 最適化:デフォルトの大文字の問題を中国語と英語の両方で表示します。
- New:表示可能なアイテムの最大数は、開発者が設定するAPIを提供します。(setItemVisibleCount())
- 新しく追加された:スクロールホイールは中央から両側に透明度のグラデーションがあり、スイッチAPI設定を提供します。(IsAlphaGradient(true))
- 新規:選択したアイテムの円形の分割線スタイル。(DividerType.CIRCLE)
V4.1.8バージョンアップデート手順(2019-4-24)
- Gradleバージョンを更新すると、wheelviewベースライブラリがコンパイルからapi依存関係に変更され、gradle5.0以降を導入できないようになります。
- setTextXOffset割り当ての問題を修正します。
V4.1.7バージョンアップデート手順(2019-1-10)
- WheelViewが初期化されたときに、データが空で高さ= 0であり、表示されない問題を修正しました。
- キャンセルボタンのクリックイベント監視エントリを追加しました。
- データ型を標準化するためのパラメーター注釈が追加されました。
- setBackgroundIdメソッドは破棄され、updateメソッドの名前はsetOutSideColorになります。
過去のバージョンの詳細については、更新ログ(バージョン4.x)を参照してください。
メソッド名とパラメーターを参照してください:メソッド名とパラメーターの説明ドキュメント
使い方:
Android-PickerViewライブラリの使用例:
1.JcenterウェアハウスのGradle依存関係を追加します。
コンパイル 'com.contrarywind:Android-PickerView:4.1.9'
または
Maven
<dependency>
<groupId>com.contrarywind</groupId>
<artifactId>Android-PickerView</artifactId>
<version>4.1.9</version>
<type>pom</type>
</dependency>
2.次のコードをプロジェクトに追加します。
//时间选择器 TimePickerView pvTime =新しいTimePickerBuilder(MainActivity.this、新しいOnTimeSelectListener(){ @Override ます。public void onTimeSelect(日付、ビューV){ Toast.makeText(MainActivity.this、getTime(日)、Toast.LENGTH_SHORT) .show(); } })。build();
//条件セレクタ OptionsPickerView pvOptions =新しいOptionsPickerBuilder(MainActivity.this、新しいOnOptionsSelectListener(){ @Override 公共ボイドonOptionsSelect(INTオプション1、INTオプション2、INT options3、ビューV){ //戻り、選択場所の三つのレベルである 文字列TX = options1Items.get(options1).getPickerViewText() + options2Items.get(options1).get(option2) + options3Items.get(options1).get(option2).get(options3).getPickerViewText(); tvOptions。setText(tx) ; } })。build(); pvOptions.setPicker(options1Items、options2Items、options3Items); pvOptions.show();
以上です〜
3.デフォルトのスタイルが好みに合わない場合は、さまざまな属性をカスタマイズできます。
カレンダーselectedDate = Calendar.getInstance(); カレンダーstartDate = Calendar.getInstance(); //startDate.set(2013,1,1); カレンダーendDate = Calendar.getInstance(); //endDate.set(2020,1、 1); //正しい設定方法の理由:注意事項が説明されています startDate.set(2013,0,1); endDate.set(2020,11,31); pvTime = new TimePickerBuilder(this、new OnTimeSelectListener(){ @Override public void onTimeSelect(Date date、View v){//イベントコールバックを選択 tvTime.setText(getTime(date)); } })。 setType(new boolean [] {true、true、true、true、true、true })//デフォルトですべて表示されます 。setCancelText( "Cancel")//キャンセルボタンテキスト 。setSubmitText( "Sure")//ボタンテキストの確認 text.setContentSize(18)の//スクロールホイールのテキスト size.setTitleSize(20)// Title text size.setTitleText( "Title")// Title text.setOutSideCancelable(false)/ /ポイントがコントロールの外にあるときに、画面をクリックして、表示をキャンセルするかどうか 。isCyclic(true)// ループでスクロールするかどうか。setTitleColor(Color.BLACK)//タイトルテキスト color.setSubmitColor(Color.BLUE )// OKボタンのテキスト color.setCancelColor(Color.BLUE)//キャンセルボタンのテキストの色 .setTitleBgColor(0xFF666666)//タイトルの背景色ナイトモード .setBgColor(0xFF333333)//スクロールホイールの背景色ナイトモード .setDate(selectedDate) //設定されていない場合、デフォルトはシステム時間です* / .setRangDate(startDate、endDate)//開始と終了の年、月、日を設定します .setLabel( "year"、 "month"、 "day"、 "hour"、 "minute"、 "second")//デフォルト設定は年、月、日、時、分、秒です .isCenterLabel(false)//選択したアイテムのラベルテキストのみを中央に表示するかどうか、falseは各アイテムにラベルがあることを意味します。 .isDialog(true)//ダイアログ スタイルとして表示されるかどうか.build();
pvOptions =新しいOptionsPickerBuilder(この、新しいOptionsPickerView.OnOptionsSelectListener(){ @Override ます。public void onOptionsSelect(int型オプション1、int型オプション2、int型options3、ビューV){ //返回的分别是三个级别的选中位置 の文字列TX = options1Items。 get(options1).getPickerViewText() + options2Items.get(options1).get(option2) + options3Items.get(options1).get(option2).get(options3).getPickerViewText(); tvOptions.setText(tx); } })。setOptionsSelectChangeListener(new OnOptionsSelectChangeListener(){ @Override public void onOptionsSelectChanged(int options1、int options2、int options3){ String str = "options1:" + options1 + "\ noptions2:" + options2 + "\ noptions3:" + options3; Toast.makeText(MainActivity.this、str、 Toast.LENGTH_SHORT).show(); } })。 setSubmitText( "OK")// OKボタン text.setCancelText( "Cancel")//キャンセルボタン text.setTitleText( "City selection")// Title.setSubCalSize( 18)//テキスト サイズを決定してキャンセルします。setTitleSize(20)//タイトルテキスト サイズ.setTitleColor(Color.BLACK)//タイトルテキストカラー サイズ.setSubmitColor(Color.BLUE)// OKボタンのテキストの色 .setCancelColor(Color.BLUE)//キャンセルボタンのテキスト color.setTitleBgColor(0xFF333333)//タイトルの背景色ナイトモード .setBgColor(0xFF000000)//スクロールホイールの背景色ナイトモード .setContentTextSize(18)//スクロールホイールのテキスト サイズ。 setLinkage(false)//リンクするかどうかを設定します。デフォルトは trueです。setLabels( "Province"、 "City"、 "District")//選択した3レベルの ユニットを設定します。isCenterLabel(false)//表示するかどうかのみ中央で選択されたアイテムのラベルテキスト。falseの場合、各アイテムにはラベルがあります。 .setCyclic(false、false、false)//サイクルするかどうか 。setSelectOptions(1、1、1)// デフォルトの選択項目を設定します。setOutSideCancelable(false)//外部をクリックします。デフォルトを 閉じ .isDialog(true)//ダイアログスタイルとして表示するかどうか 閉じますtrue .isRestoreItem(true)//復元するかどうかを切り替えると、デフォルトで最初の項目が選択されます。 .build(); pvOptions.setPicker(options1Items、options2Items、options3Items); //データソースを追加
4.レイアウトをカスタマイズする必要がある場合:
//注:カスタムレイアウトでは、idがoptionspickerまたはtimepickerのレイアウトとそのサブコントロールが存在する必要があります。存在しない場合、nullポインターが報告されます 。// 詳細については、デモpvCustomOptionsの2つのカスタムレイアウトを参照してください。=新しいOptionsPickerBuilder(この、新しいOptionsPickerView.OnOptionsSelectListener(){ @Override ます。public void onOptionsSelect(int型のオプション1、INTオプション2、int型options3、ビューV){ //返された選択された位置、3つのレベルの 文字列TX = cardItem.get(オプション1) .getPickerViewText(); btn_CustomOptions.setText(TX); } }) .setLayoutRes(R.layout.pickerview_custom_options、新しいCustomListener(){ @Override 公共ボイドcustomLayout(ビューV){ //カスタムレイアウトでの初期化とイベント処理を制御します ivCancel.setOnClickListener(新View.OnClickListener(){ 最終的なTextViewtvSubmit =(TextView)v.findViewById(R.id.tv_finish); 最終的なTextViewtvAdd =(TextView)v.findViewById(R.id.tv_add); ImageView ivCancel =(ImageView)v.findViewById(R.id.iv_cancel); tvSubmit.setOnClickListener(新しいView.OnClickListener(){ @Override ます。public void onClickの(ビューV){ pvCustomOptions.returnData(tvSubmit); } }); public void onClick(View v){ @Override pvCustomOptions.dismiss(); } }); tvAdd.setOnClickListener(新しいView.OnClickListener(){ @Override ます。public void onClickの(ビューV){ のgetData(); pvCustomOptions.setPicker(cardItem); } }); } })。 build(); pvCustomOptions.setPicker(cardItem); //追加データ
5.使用法について質問がある場合は、デモコードを参照してください
6.実装ロジックを単独で拡張するためにWheelView基本コントロールのみが必要な場合は、基本コントロールライブラリを直接追加できます。Gradleは以下に依存します。
コンパイル 'com.contrarywind:wheelview:4.1.0'
WheelViewの使用コード例:
xmlレイアウト:
<com.contrarywind.view.WheelView android:id = "@ + id / Wheelview" android:layout_width = "match_parent" android:layout_height = "wrap_content" />
Javaコード:
WheelView WheelView = findViewById(R.id.wheelview); WheelView.setCyclic(false); 最終リスト<文字列> mOptionsItems = new ArrayList <>(); mOptionsItems.add( "item0"); mOptionsItems.add( "item1"); mOptionsItems.add( "item2"); WheelView.setAdapter(new ArrayWheelAdapter(mOptionsItems)); wheelView.setOnItemSelectedListener(新しいOnItemSelectedListener(){ @Override 公共ボイドonItemSelected(INTインデックス){ Toast.makeText(MainActivity.this、 "" + mOptionsItems.get(指数)、Toast.LENGTH_SHORT).SHOW(); } })。
効果画像(招商銀行クレジットカード「ハンドヘルドライフ」のコンディションセレクター、私のライブラリーを使用しており、実際のプロジェクトで参考にできます)
ありがとう
- WheelView
- androidWheelView