Commit db27de12ce6c74ee408e24598e094682613dbece

Authored by xiongwei
1 parent e54c424ab1
Exists in master

完成大多数界面,时间选择器,地区选择器

Showing 67 changed files with 5511 additions and 34 deletions   Show diff stats
PersonalCenter/.idea/gradle.xml
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <project version="4"> 2 <project version="4">
3 <component name="GradleSettings"> 3 <component name="GradleSettings">
4 <option name="linkedExternalProjectsSettings"> 4 <option name="linkedExternalProjectsSettings">
5 <GradleProjectSettings> 5 <GradleProjectSettings>
6 <option name="distributionType" value="LOCAL" /> 6 <option name="distributionType" value="LOCAL" />
7 <option name="externalProjectPath" value="$PROJECT_DIR$" /> 7 <option name="externalProjectPath" value="$PROJECT_DIR$" />
8 <option name="gradleHome" value="C:\Program Files\Android\Android Studio\gradle\gradle-2.14.1" /> 8 <option name="gradleHome" value="C:\Program Files\Android\Android Studio\gradle\gradle-2.14.1" />
9 <option name="modules"> 9 <option name="modules">
10 <set> 10 <set>
11 <option value="$PROJECT_DIR$" /> 11 <option value="$PROJECT_DIR$" />
12 <option value="$PROJECT_DIR$/app" /> 12 <option value="$PROJECT_DIR$/app" />
13 <option value="$PROJECT_DIR$/circledialog" /> 13 <option value="$PROJECT_DIR$/circledialog" />
14 <option value="$PROJECT_DIR$/pickerview" />
14 </set> 15 </set>
15 </option> 16 </option>
16 <option name="resolveModulePerSourceSet" value="false" /> 17 <option name="resolveModulePerSourceSet" value="false" />
17 </GradleProjectSettings> 18 </GradleProjectSettings>
18 </option> 19 </option>
19 </component> 20 </component>
20 </project> 21 </project>
PersonalCenter/.idea/modules.xml
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <project version="4"> 2 <project version="4">
3 <component name="ProjectModuleManager"> 3 <component name="ProjectModuleManager">
4 <modules> 4 <modules>
5 <module fileurl="file://$PROJECT_DIR$/PersonalCenter.iml" filepath="$PROJECT_DIR$/PersonalCenter.iml" /> 5 <module fileurl="file://$PROJECT_DIR$/PersonalCenter.iml" filepath="$PROJECT_DIR$/PersonalCenter.iml" />
6 <module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" /> 6 <module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
7 <module fileurl="file://$PROJECT_DIR$/circledialog/circledialog.iml" filepath="$PROJECT_DIR$/circledialog/circledialog.iml" /> 7 <module fileurl="file://$PROJECT_DIR$/circledialog/circledialog.iml" filepath="$PROJECT_DIR$/circledialog/circledialog.iml" />
8 <module fileurl="file://$PROJECT_DIR$/pickerview/pickerview.iml" filepath="$PROJECT_DIR$/pickerview/pickerview.iml" />
8 </modules> 9 </modules>
9 </component> 10 </component>
10 </project> 11 </project>
PersonalCenter/app/build.gradle
1 apply plugin: 'com.android.application' 1 apply plugin: 'com.android.application'
2 2
3 android { 3 android {
4 compileSdkVersion 25 4 compileSdkVersion 25
5 buildToolsVersion "25.0.3" 5 buildToolsVersion "25.0.3"
6 defaultConfig { 6 defaultConfig {
7 applicationId "com.hjx.personalcenter" 7 applicationId "com.hjx.personalcenter"
8 minSdkVersion 15 8 minSdkVersion 15
9 targetSdkVersion 25 9 targetSdkVersion 25
10 versionCode 1 10 versionCode 1
11 versionName "1.0" 11 versionName "1.0"
12 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 12 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
13 } 13 }
14 buildTypes { 14 buildTypes {
15 release { 15 release {
16 minifyEnabled false 16 minifyEnabled false
17 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 17 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
18 } 18 }
19 } 19 }
20 } 20 }
21 21
22 dependencies { 22 dependencies {
23 compile fileTree(include: ['*.jar'], dir: 'libs') 23 compile fileTree(include: ['*.jar'], dir: 'libs')
24 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 24 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
25 exclude group: 'com.android.support', module: 'support-annotations' 25 exclude group: 'com.android.support', module: 'support-annotations'
26 }) 26 })
27 compile 'com.android.support:appcompat-v7:25.3.1' 27 compile 'com.android.support:appcompat-v7:25.3.1'
28 testCompile 'junit:junit:4.12' 28 testCompile 'junit:junit:4.12'
29 compile project(':circledialog') 29 compile project(':circledialog')
30 compile project(':pickerview')
30 } 31 }
31 32
PersonalCenter/app/src/main/AndroidManifest.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 package="com.hjx.personalcenter"> 3 package="com.hjx.personalcenter">
4 4
5 <application 5 <application
6 android:allowBackup="true" 6 android:allowBackup="true"
7 android:icon="@mipmap/ic_launcher" 7 android:icon="@mipmap/ic_launcher"
8 android:label="@string/app_name" 8 android:label="@string/app_name"
9 android:supportsRtl="true" 9 android:supportsRtl="true"
10 android:theme="@style/Theme.AppCompat.Light.NoActionBar"> 10 android:theme="@style/Theme.AppCompat.Light.NoActionBar">
11 <activity 11 <activity
12 android:name=".activity.MainActivity" 12 android:name=".activity.MainActivity"
13 android:launchMode="singleTask" 13 android:launchMode="singleTask"
14 android:screenOrientation="landscape"> 14 android:screenOrientation="landscape">
15 <intent-filter> 15 <intent-filter>
16 <action android:name="android.intent.action.MAIN" /> 16 <action android:name="android.intent.action.MAIN" />
17 17
18 <category android:name="android.intent.category.LAUNCHER" /> 18 <category android:name="android.intent.category.LAUNCHER" />
19 </intent-filter> 19 </intent-filter>
20 </activity> 20 </activity>
21 <activity 21 <activity
22 android:name=".activity.LoginAndRegisterActivity" 22 android:name=".activity.LoginAndRegisterActivity"
23 android:launchMode="singleTask" 23 android:launchMode="singleTask"
24 android:screenOrientation="landscape"> 24 android:screenOrientation="landscape">
25 25
26 </activity> 26 </activity>
27 <activity 27 <activity
28 android:name=".activity.ForgotPasswordActivity" 28 android:name=".activity.ForgotPasswordActivity"
29 android:launchMode="singleTask" 29 android:launchMode="singleTask"
30 android:screenOrientation="landscape"> 30 android:screenOrientation="landscape">
31 31
32 </activity> 32 </activity>
33 <activity 33 <activity
34 android:name=".activity.ChangePasswordActivity" 34 android:name=".activity.ChangePasswordActivity"
35 android:launchMode="singleTask" 35 android:launchMode="singleTask"
36 android:screenOrientation="landscape"> 36 android:screenOrientation="landscape">
37 37
38 </activity> 38 </activity>
39 <activity 39 <activity
40 android:name=".activity.RegisterInfoActivity" 40 android:name=".activity.RegisterInfoActivity"
41 android:launchMode="singleTask" 41 android:launchMode="singleTask"
42 android:screenOrientation="landscape"> 42 android:screenOrientation="landscape">
43 43
44 </activity> 44 </activity>
45 <activity 45 <activity
46 android:name=".activity.ElectronicCardValidationActivity" 46 android:name=".activity.ElectronicCardValidationActivity"
47 android:launchMode="singleTask" 47 android:launchMode="singleTask"
48 android:screenOrientation="landscape"> 48 android:screenOrientation="landscape">
49 49
50 </activity> 50 </activity>
51 <activity 51 <activity
52 android:name=".activity.ChangeBangDingActivity" 52 android:name=".activity.ChangeBangDingActivity"
53 android:launchMode="singleTask" 53 android:launchMode="singleTask"
54 android:screenOrientation="landscape"> 54 android:screenOrientation="landscape">
55 55
56 </activity> 56 </activity>
57 <activity 57 <activity
58 android:name=".activity.ChangeElectronicCardInfoActivity" 58 android:name=".activity.ChangeElectronicCardInfoActivity"
59 android:launchMode="singleTask" 59 android:launchMode="singleTask"
60 android:screenOrientation="landscape"> 60 android:screenOrientation="landscape">
61 61
62 </activity> 62 </activity>
63 <activity 63 <activity
64 android:name=".activity.ChangeEletronicCardPhone" 64 android:name=".activity.ChangeEletronicCardPhoneActivity"
65 android:launchMode="singleTask" 65 android:launchMode="singleTask"
66 android:screenOrientation="landscape"> 66 android:screenOrientation="landscape">
67 67
68 </activity> 68 </activity>
69 <activity 69 <activity
70 android:name=".activity.ChoiseTextBookActivity" 70 android:name=".activity.ChoiseTextBookActivity"
71 android:launchMode="singleTask" 71 android:launchMode="singleTask"
72 android:screenOrientation="landscape"> 72 android:screenOrientation="landscape">
73 73
74 </activity> 74 </activity>
75 <activity 75 <activity
76 android:name=".activity.TheStartPageActivity" 76 android:name=".activity.TheStartPageActivity"
77 android:launchMode="singleTask" 77 android:launchMode="singleTask"
78 android:screenOrientation="landscape"> 78 android:screenOrientation="landscape">
79 79
80 </activity> 80 </activity>
81 <activity
82 android:name=".activity.ElectronicCardEditInfoActivity"
83 android:launchMode="singleTask"
84 android:screenOrientation="landscape">
85
86 </activity>
87 <activity
88 android:name=".activity.ElectronicCardInfoOKActivity"
89 android:launchMode="singleTask"
90 android:screenOrientation="landscape">
91
92 </activity>
93 <activity
94 android:name=".activity.ElectronicCardLookInfoActivity"
95 android:launchMode="singleTask"
96 android:screenOrientation="landscape">
97
98 </activity>
99 <activity
100 android:name=".activity.FeedBackActivity"
101 android:launchMode="singleTask"
102 android:screenOrientation="landscape">
103
104 </activity>
81 </application> 105 </application>
82 106
83 </manifest> 107 </manifest>
PersonalCenter/app/src/main/java/com/hjx/personalcenter/activity/ChangeEletronicCardPhone.java
1 package com.hjx.personalcenter.activity; File was deleted
2
3 import android.app.Activity;
4 import android.os.Bundle;
5
6 import com.hjx.personalcenter.R;
7
8 /**
9 * Created by h on 2017/8/9.
10 */
11
12 public class ChangeEletronicCardPhone extends Activity {
13 @Override
14 protected void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.activity_electronicard_phone);
17 }
18 }
19 1 package com.hjx.personalcenter.activity;
PersonalCenter/app/src/main/java/com/hjx/personalcenter/activity/ChangeEletronicCardPhoneActivity.java
File was created 1 package com.hjx.personalcenter.activity;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5
6 import com.hjx.personalcenter.R;
7
8 /**
9 * Created by h on 2017/8/9.
10 */
11
12 public class ChangeEletronicCardPhoneActivity extends Activity {
13 @Override
14 protected void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.activity_electronicard_phone);
17 }
18 }
19
PersonalCenter/app/src/main/java/com/hjx/personalcenter/activity/ElectronicCardEditInfoActivity.java
File was created 1 package com.hjx.personalcenter.activity;
2
3 import android.app.Activity;
4 import android.graphics.Color;
5 import android.os.Bundle;
6 import android.view.View;
7 import android.widget.Button;
8 import android.widget.LinearLayout;
9 import android.widget.TextView;
10
11 import com.bigkoo.pickerview.TimePickerView;
12 import com.hjx.personalcenter.R;
13
14 import java.text.SimpleDateFormat;
15 import java.util.Calendar;
16 import java.util.Date;
17
18 /**填写保卡信息 熊巍
19 * Created by h on 2017/8/11.
20 */
21
22 public class ElectronicCardEditInfoActivity extends Activity implements View.OnClickListener {
23 private LinearLayout lineL_buy_time;
24 private TextView tv_buy_time;
25 private TimePickerView pvTime;
26
27 @Override
28 protected void onCreate(Bundle savedInstanceState) {
29 super.onCreate(savedInstanceState);
30 setContentView(R.layout.activity_electroniccard_info);
31 initView();
32 initData();
33 initLister();
34 initTimePicker();
35 }
36
37 private void initView() {
38 lineL_buy_time = (LinearLayout) findViewById(R.id.lineL_buy_time);
39 tv_buy_time = (TextView) findViewById(R.id.tv_buy_time);
40 }
41
42 private void initData() {
43
44 }
45
46 private void initLister() {
47 lineL_buy_time.setOnClickListener(this);
48
49 }
50 private void initTimePicker() {
51 //控制时间范围(如果不设置范围,则使用默认时间1900-2100年,此段代码可注释)
52 //因为系统Calendar的月份是从0-11的,所以如果是调用Calendar的set方法来设置时间,月份的范围也要是从0-11
53 Calendar selectedDate = Calendar.getInstance();
54 Calendar startDate = Calendar.getInstance();
55 startDate.set(2013, 0, 23);
56 Calendar endDate = Calendar.getInstance();
57 endDate.set(2019, 11, 28);
58 //时间选择器
59 pvTime = new TimePickerView.Builder(this, new TimePickerView.OnTimeSelectListener() {
60 @Override
61 public void onTimeSelect(Date date, View v) {//选中事件回调
62 // 这里回调过来的v,就是show()方法里面所添加的 View 参数,如果show的时候没有添加参数,v则为null
63 /*btn_Time.setText(getTime(date));*/
64 Button btn = (Button) v;
65 btn.setText(getTime(date));
66 }
67 })
68 //年月日时分秒 的显示与否,不设置则默认全部显示
69 .setType(new boolean[]{true, true, true, false, false, false})
70 .setLabel("", "", "", "", "", "")
71 .isCenterLabel(false)
72 .setDividerColor(Color.DKGRAY)
73 .setContentSize(21)
74 .setDate(selectedDate)
75 .setRangDate(startDate, endDate)
76 .setBackgroundId(0x00FFFFFF) //设置外部遮罩颜色
77 .setDecorView(null)
78 .build();
79 }
80 private String getTime(Date date) {//可根据需要自行截取数据显示
81 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
82 return format.format(date);
83 }
84
85 @Override
86 public void onClick(View v) {
87 switch (v.getId()){
88 case R.id.lineL_buy_time:
89 pvTime.show(v);//弹出时间选择器,传递参数过去,回调的时候则可以绑定此view
90 break;
91 }
92
93
94 }
95 }
96
PersonalCenter/app/src/main/java/com/hjx/personalcenter/activity/ElectronicCardInfoOKActivity.java
File was created 1 package com.hjx.personalcenter.activity;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5
6 import com.hjx.personalcenter.R;
7
8 /**
9 * Created by h on 2017/8/11.
10 */
11
12 public class ElectronicCardInfoOKActivity extends Activity{
13 @Override
14 protected void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.activity_ok_cardinfo);
17 }
18 }
19
PersonalCenter/app/src/main/java/com/hjx/personalcenter/activity/ElectronicCardLookInfoActivity.java
File was created 1 package com.hjx.personalcenter.activity;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5
6 import com.hjx.personalcenter.R;
7
8 /**
9 * Created by h on 2017/8/11.
10 */
11
12 public class ElectronicCardLookInfoActivity extends Activity{
13 @Override
14 protected void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.activity_electronic_look_cardinfo);
17 }
18 }
19
PersonalCenter/app/src/main/java/com/hjx/personalcenter/activity/FeedBackActivity.java
File was created 1 package com.hjx.personalcenter.activity;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5
6 import com.hjx.personalcenter.R;
7
8 /**
9 * Created by h on 2017/8/11.
10 */
11
12 public class FeedBackActivity extends Activity{
13 @Override
14 protected void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.activity_feedback);
17 }
18 }
19
PersonalCenter/app/src/main/java/com/hjx/personalcenter/activity/MainActivity.java
1 package com.hjx.personalcenter.activity; 1 package com.hjx.personalcenter.activity;
2 2
3 import android.content.Intent; 3 import android.content.Intent;
4 import android.support.v7.app.AppCompatActivity; 4 import android.support.v7.app.AppCompatActivity;
5 import android.os.Bundle; 5 import android.os.Bundle;
6 import android.view.View; 6 import android.view.View;
7 import android.widget.TextView; 7 import android.widget.TextView;
8 8
9 import com.hjx.personalcenter.R; 9 import com.hjx.personalcenter.R;
10 10
11 public class MainActivity extends AppCompatActivity { 11 public class MainActivity extends AppCompatActivity {
12 TextView ssss; 12 TextView ssss;
13 @Override 13 @Override
14 protected void onCreate(Bundle savedInstanceState) { 14 protected void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState); 15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.activity_main); 16 setContentView(R.layout.activity_main);
17 ssss = (TextView) findViewById(R.id.ssss); 17 ssss = (TextView) findViewById(R.id.ssss);
18 ssss.setOnClickListener(new View.OnClickListener() { 18 ssss.setOnClickListener(new View.OnClickListener() {
19 @Override 19 @Override
20 public void onClick(View v) { 20 public void onClick(View v) {
21 Intent intent = new Intent(MainActivity.this,LoginAndRegisterActivity.class); 21 Intent intent = new Intent(MainActivity.this,RegisterInfoActivity.class);
22 startActivity(intent); 22 startActivity(intent);
23 } 23 }
24 }); 24 });
25 } 25 }
26 } 26 }
27 27
PersonalCenter/app/src/main/res/drawable/corcle_blue_bg.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <shape xmlns:android="http://schemas.android.com/apk/res/android"
3 android:shape="rectangle">
4 <solid
5 android:color="@color/white"/>
6 <corners
7 android:bottomLeftRadius="20dp"
8 android:topLeftRadius="20dp"
9 android:bottomRightRadius="20dp"
10 android:topRightRadius="20dp"/>
11 <stroke android:width="1dp"
12 android:color="@color/login_text_blue"/>
13 </shape>
PersonalCenter/app/src/main/res/drawable/corcle_white_bg.xml
1 <?xml version="1.0" encoding="utf-8"?> File was deleted
2 <shape xmlns:android="http://schemas.android.com/apk/res/android"
3 android:shape="rectangle">
4 <solid
5 android:color="@color/colorAccent"/>
6 <corners
7 android:bottomLeftRadius="20dp"
8 android:topLeftRadius="20dp"
9 android:bottomRightRadius="20dp"
10 android:topRightRadius="20dp"/>
11 <stroke android:width="1dp"
12 android:color="@color/cutoff_line"/>
13 </shape>
PersonalCenter/app/src/main/res/layout/activity_electronic_look_cardinfo.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:orientation="vertical">
6
7 <RelativeLayout
8 android:id="@+id/title"
9 android:layout_width="match_parent"
10 android:layout_height="wrap_content"
11 android:background="@color/login_text_blue"
12 android:minHeight="50dp">
13
14 <ImageView
15 android:id="@+id/cancel"
16 android:layout_width="wrap_content"
17 android:layout_height="wrap_content"
18 android:layout_centerVertical="true"
19 android:paddingLeft="20dp"
20 android:paddingRight="20dp"
21 android:src="@mipmap/title_back" />
22
23 <TextView
24 android:id="@+id/menu_title"
25 android:layout_width="wrap_content"
26 android:layout_height="wrap_content"
27 android:layout_centerInParent="true"
28 android:text="@string/string_electroniccard_info_look"
29 android:textColor="@android:color/white"
30 android:textSize="22sp" />
31 </RelativeLayout>
32
33 <LinearLayout
34 android:layout_width="match_parent"
35 android:layout_height="wrap_content"
36 android:layout_margin="20dp"
37 android:background="@mipmap/cardbackgrangd"
38 android:gravity="center"
39 android:orientation="vertical">
40
41 <LinearLayout
42 android:layout_width="match_parent"
43 android:layout_height="wrap_content"
44 android:layout_marginTop="70dp"
45 android:gravity="center_vertical"
46 android:orientation="horizontal">
47
48 <LinearLayout
49 android:layout_width="wrap_content"
50 android:layout_height="wrap_content"
51 android:layout_marginLeft="200dp"
52 android:gravity="center_vertical">
53
54 <ImageView
55 android:layout_width="wrap_content"
56 android:layout_height="wrap_content"
57 android:src="@mipmap/logo_info" />
58
59 <TextView
60 android:layout_width="wrap_content"
61 android:layout_height="wrap_content"
62 android:layout_marginLeft="50dp"
63 android:background="@null"
64 android:text="电子保卡"
65 android:textColor="@color/electronic_card"
66 android:textSize="22sp" />
67
68 </LinearLayout>
69
70 <LinearLayout
71 android:layout_width="wrap_content"
72 android:layout_height="80dp"
73 android:layout_marginLeft="200dp"
74 android:gravity="center_vertical">
75
76 <TextView
77 android:layout_width="wrap_content"
78 android:layout_height="wrap_content"
79 android:text="客户姓名"
80 android:textColor="@color/btn_text_color"
81 android:textSize="22sp" />
82
83 <TextView
84 android:layout_width="wrap_content"
85 android:layout_height="wrap_content"
86 android:layout_marginLeft="60dp"
87 android:text="王小明"
88 android:textColor="@color/btn_text_color"
89 android:textSize="22sp" />
90
91 </LinearLayout>
92
93 </LinearLayout>
94
95 <LinearLayout
96 android:layout_width="match_parent"
97 android:layout_height="wrap_content"
98 android:gravity="center_vertical"
99 android:orientation="horizontal">
100
101 <LinearLayout
102 android:layout_width="wrap_content"
103 android:layout_height="60dp"
104 android:layout_marginLeft="200dp"
105 android:gravity="center_vertical">
106
107 <TextView
108 android:layout_width="wrap_content"
109 android:layout_height="wrap_content"
110 android:text="产品型号"
111 android:textColor="@color/btn_text_color"
112 android:textSize="22sp" />
113
114 <TextView
115 android:layout_width="wrap_content"
116 android:layout_height="wrap_content"
117 android:layout_marginLeft="50dp"
118 android:text="IPone888"
119 android:textSize="22sp" />
120
121
122 </LinearLayout>
123
124 <LinearLayout
125 android:layout_width="wrap_content"
126 android:layout_height="60dp"
127 android:layout_marginLeft="250dp"
128 android:gravity="center_vertical">
129
130 <TextView
131 android:layout_width="wrap_content"
132 android:layout_height="wrap_content"
133 android:text="客户地址"
134 android:textSize="22sp" />
135
136 <TextView
137 android:layout_width="wrap_content"
138 android:layout_height="wrap_content"
139 android:layout_marginLeft="98dp"
140 android:background="@null"
141 android:text="北京市昭阳区三里屯"
142 android:textSize="22sp" />
143 <TextView
144 android:layout_width="wrap_content"
145 android:layout_height="wrap_content"
146 android:layout_marginLeft="18dp"
147 android:background="@drawable/corcle_blue_bg"
148 android:text="修改"
149 android:paddingLeft="5dp"
150 android:paddingRight="5dp"
151 android:textColor="@color/login_text_blue"
152 android:textSize="18sp" />
153
154
155 </LinearLayout>
156
157 </LinearLayout>
158
159 <LinearLayout
160 android:layout_width="match_parent"
161 android:layout_height="wrap_content"
162 android:gravity="center_vertical"
163 android:orientation="horizontal">
164
165 <LinearLayout
166 android:layout_width="wrap_content"
167 android:layout_height="60dp"
168 android:layout_marginLeft="200dp"
169 android:gravity="center_vertical">
170
171 <TextView
172 android:layout_width="wrap_content"
173 android:layout_height="wrap_content"
174 android:text="MAC地址"
175 android:textSize="22sp" />
176
177 <TextView
178 android:layout_width="wrap_content"
179 android:layout_height="wrap_content"
180 android:layout_marginLeft="50dp"
181 android:background="@null"
182 android:text="237462873463278"
183 android:textSize="22sp" />
184
185 </LinearLayout>
186
187 <LinearLayout
188 android:layout_width="wrap_content"
189 android:layout_height="60dp"
190 android:layout_marginLeft="210dp"
191 android:gravity="center_vertical">
192
193 <TextView
194 android:layout_width="wrap_content"
195 android:layout_height="wrap_content"
196 android:text="购买时间"
197 android:textColor="@color/btn_text_color"
198 android:textSize="22sp" />
199
200 <TextView
201 android:layout_width="wrap_content"
202 android:layout_height="wrap_content"
203 android:layout_marginLeft="25dp"
204 android:background="@null"
205 android:text="4433322-334--34"
206 android:textColor="@color/btn_text_color"
207 android:textSize="22sp" />
208 </LinearLayout>
209
210 </LinearLayout>
211
212 <LinearLayout
213 android:layout_width="match_parent"
214 android:layout_height="wrap_content"
215 android:gravity="center_vertical"
216 android:orientation="horizontal">
217
218 <LinearLayout
219 android:layout_width="wrap_content"
220 android:layout_height="60dp"
221 android:layout_marginLeft="200dp"
222 android:gravity="center_vertical">
223
224 <TextView
225 android:layout_width="wrap_content"
226 android:layout_height="wrap_content"
227 android:text="机身编码"
228 android:textColor="@color/btn_text_color"
229 android:textSize="22sp" />
230
231 <TextView
232 android:layout_width="wrap_content"
233 android:layout_height="wrap_content"
234 android:layout_marginLeft="50dp"
235 android:hint="473463746343"
236 android:textSize="22sp" />
237
238 </LinearLayout>
239
240 <LinearLayout
241 android:layout_width="wrap_content"
242 android:layout_height="60dp"
243 android:layout_marginLeft="210dp"
244 android:gravity="center_vertical">
245
246 <TextView
247 android:layout_width="wrap_content"
248 android:layout_height="wrap_content"
249 android:text="购买地址"
250 android:textColor="@color/btn_text_color"
251 android:textSize="22sp" />
252
253 <TextView
254 android:layout_width="wrap_content"
255 android:layout_height="wrap_content"
256 android:layout_marginLeft="25dp"
257 android:text="啥啥啥 专卖店"
258 android:textColor="@color/btn_text_color"
259 android:textSize="22sp" />
260 </LinearLayout>
261
262 </LinearLayout>
263
264 <LinearLayout
265 android:layout_width="match_parent"
266 android:layout_height="wrap_content"
267 android:gravity="center_vertical"
268 android:orientation="horizontal">
269
270 <LinearLayout
271 android:layout_width="wrap_content"
272 android:layout_height="60dp"
273 android:layout_marginLeft="200dp"
274 android:gravity="center_vertical">
275
276 <TextView
277 android:layout_width="wrap_content"
278 android:layout_height="wrap_content"
279 android:text="手机号码"
280 android:textColor="@color/btn_text_color"
281 android:textSize="22sp" />
282
283 <TextView
284 android:layout_width="wrap_content"
285 android:layout_height="wrap_content"
286 android:layout_marginLeft="50dp"
287 android:text="IPone888"
288 android:textSize="22sp" />
289 <TextView
290 android:layout_width="wrap_content"
291 android:layout_height="wrap_content"
292 android:layout_marginLeft="18dp"
293 android:background="@drawable/corcle_blue_bg"
294 android:text="修改"
295 android:paddingLeft="5dp"
296 android:paddingRight="5dp"
297 android:textColor="@color/login_text_blue"
298 android:textSize="18sp" />
299
300
301 </LinearLayout>
302
303 <LinearLayout
304 android:layout_width="wrap_content"
305 android:layout_height="60dp"
306 android:layout_marginLeft="250dp"
307 android:gravity="center_vertical">
308
309 <TextView
310 android:layout_width="wrap_content"
311 android:layout_height="wrap_content"
312 android:text="本地售后电话"
313 android:textSize="22sp" />
314
315 <TextView
316 android:layout_width="wrap_content"
317 android:layout_height="wrap_content"
318 android:layout_marginLeft="98dp"
319 android:background="@null"
320 android:text="1111111"
321 android:textSize="22sp" />
322
323 </LinearLayout>
324
325 </LinearLayout>
326 </LinearLayout>
327
328 <LinearLayout
329 android:layout_width="match_parent"
330 android:layout_height="wrap_content"
331 android:layout_marginTop="5dp"
332 android:gravity="center"
333 android:orientation="vertical">
334
335 <TextView
336 android:layout_width="wrap_content"
337 android:layout_height="wrap_content"
338 android:layout_marginTop="5dp"
339 android:text="@string/electronic_card"
340 android:textColor="@color/electronic_text"
341 android:textSize="18sp" />
342
343
344
345 </LinearLayout>
346 <LinearLayout
347 android:layout_width="match_parent"
348 android:layout_height="wrap_content"
349 android:layout_marginTop="30dp"
350 android:gravity="center"
351 android:orientation="horizontal">
352
353 <ImageView
354 android:layout_width="wrap_content"
355 android:layout_height="wrap_content"
356 android:src="@mipmap/phone"/>
357 <TextView
358 android:layout_width="wrap_content"
359 android:layout_height="wrap_content"
360 android:textSize="30sp"
361 android:layout_marginLeft="5dp"
362 android:textColor="@color/login_text_blue"
363 android:text="400-400-000"/>
364
365
366 </LinearLayout>
367
368
369
370 </LinearLayout>
PersonalCenter/app/src/main/res/layout/activity_electroniccard_info.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:orientation="vertical">
6
7 <RelativeLayout
8 android:id="@+id/title"
9 android:layout_width="match_parent"
10 android:layout_height="wrap_content"
11 android:background="@color/login_text_blue"
12 android:minHeight="50dp">
13
14 <ImageView
15 android:id="@+id/cancel"
16 android:layout_width="wrap_content"
17 android:layout_height="wrap_content"
18 android:layout_centerVertical="true"
19 android:paddingLeft="20dp"
20 android:paddingRight="20dp"
21 android:src="@mipmap/title_back" />
22
23 <TextView
24 android:id="@+id/menu_title"
25 android:layout_width="wrap_content"
26 android:layout_height="wrap_content"
27 android:layout_centerInParent="true"
28 android:text="@string/change_electroniccard_info_fill"
29 android:textColor="@android:color/white"
30 android:textSize="22sp" />
31 </RelativeLayout>
32
33 <ImageView
34 android:layout_width="wrap_content"
35 android:layout_height="wrap_content"
36 android:layout_gravity="center"
37 android:layout_marginTop="20dp"
38 android:src="@mipmap/change_info_icon" />
39 <LinearLayout
40 android:layout_width="wrap_content"
41 android:layout_height="wrap_content"
42 android:layout_marginTop="20dp"
43 android:orientation="horizontal">
44 <View
45 android:layout_width="450dp"
46 android:layout_height="0.7dp"
47 android:layout_marginLeft="150dp"
48 android:background="@color/electronic_text">
49
50 </View>
51 <View
52 android:layout_width="400dp"
53 android:layout_height="0.7dp"
54 android:layout_marginLeft="80dp"
55 android:background="@color/electronic_text">
56
57 </View>
58
59
60 </LinearLayout>
61
62 <LinearLayout
63 android:layout_width="match_parent"
64 android:layout_height="wrap_content"
65 android:gravity="center_vertical"
66 android:orientation="horizontal">
67
68 <LinearLayout
69 android:layout_width="wrap_content"
70 android:layout_height="80dp"
71 android:layout_marginLeft="200dp"
72 android:gravity="center_vertical">
73
74 <TextView
75 android:layout_width="wrap_content"
76 android:layout_height="wrap_content"
77 android:text="客户姓名"
78 android:textColor="@color/btn_text_color"
79 android:textSize="22sp" />
80
81 <EditText
82 android:layout_width="wrap_content"
83 android:layout_height="wrap_content"
84 android:background="@null"
85 android:layout_marginLeft="50dp"
86 android:textColor="@color/electronic_text"
87 android:hint="请输入"
88 android:textSize="22sp" />
89
90 </LinearLayout>
91
92 <LinearLayout
93 android:layout_width="wrap_content"
94 android:layout_height="80dp"
95 android:layout_marginLeft="300dp"
96 android:gravity="center_vertical">
97
98 <TextView
99 android:layout_width="wrap_content"
100 android:layout_height="wrap_content"
101 android:text="购买地址"
102 android:textColor="@color/btn_text_color"
103 android:textSize="22sp" />
104
105 <TextView
106 android:layout_width="wrap_content"
107 android:layout_height="wrap_content"
108 android:text="请选择地区"
109 android:layout_marginLeft="60dp"
110 android:textColor="@color/btn_text_color"
111 android:textSize="22sp" />
112
113 <ImageView
114 android:layout_width="wrap_content"
115 android:layout_height="wrap_content"
116 android:layout_marginLeft="50dp"
117 android:src="@mipmap/xiajiantou">
118
119 </ImageView>
120 </LinearLayout>
121
122 </LinearLayout>
123 <LinearLayout
124 android:layout_width="wrap_content"
125 android:layout_height="wrap_content"
126 android:orientation="horizontal">
127 <View
128 android:layout_width="450dp"
129 android:layout_height="0.7dp"
130 android:layout_marginLeft="150dp"
131 android:background="@color/electronic_text">
132
133 </View>
134 <View
135 android:layout_width="400dp"
136 android:layout_height="0.7dp"
137 android:layout_marginLeft="80dp"
138 android:background="@color/electronic_text">
139
140 </View>
141
142
143 </LinearLayout>
144
145 <LinearLayout
146 android:layout_width="match_parent"
147 android:layout_height="wrap_content"
148 android:gravity="center_vertical"
149 android:orientation="horizontal">
150
151 <LinearLayout
152 android:layout_width="wrap_content"
153 android:layout_height="80dp"
154 android:layout_marginLeft="200dp"
155 android:gravity="center_vertical">
156
157 <TextView
158 android:layout_width="wrap_content"
159 android:layout_height="wrap_content"
160 android:text="客户地址"
161 android:textColor="@color/btn_text_color"
162 android:textSize="22sp" />
163
164 <TextView
165 android:layout_width="wrap_content"
166 android:layout_height="wrap_content"
167 android:text="请选择地区"
168 android:layout_marginLeft="50dp"
169 android:textSize="22sp" />
170
171 <ImageView
172 android:layout_width="wrap_content"
173 android:layout_height="wrap_content"
174 android:layout_marginLeft="50dp"
175 android:src="@mipmap/xiajiantou">
176
177 </ImageView>
178
179
180 </LinearLayout>
181
182 <LinearLayout
183 android:layout_width="wrap_content"
184 android:layout_height="80dp"
185 android:layout_marginLeft="200dp"
186 android:gravity="center_vertical">
187 <TextView
188 android:layout_width="wrap_content"
189 android:layout_height="wrap_content"
190 android:text=" "
191 android:textColor="@color/white"
192 android:textSize="22sp" />
193 <EditText
194 android:layout_width="wrap_content"
195 android:layout_height="wrap_content"
196 android:layout_marginLeft="98dp"
197 android:background="@null"
198 android:hint="请输入商店名称"
199 android:textSize="22sp" />
200
201 </LinearLayout>
202
203 </LinearLayout>
204 <LinearLayout
205 android:layout_width="wrap_content"
206 android:layout_height="wrap_content"
207
208 android:orientation="horizontal">
209 <View
210 android:layout_width="450dp"
211 android:layout_height="0.7dp"
212 android:layout_marginLeft="150dp"
213 android:background="@color/electronic_text">
214
215 </View>
216 <View
217 android:layout_width="400dp"
218 android:layout_height="0.7dp"
219 android:layout_marginLeft="80dp"
220 android:background="@color/electronic_text">
221
222 </View>
223
224
225 </LinearLayout>
226
227 <LinearLayout
228 android:layout_width="match_parent"
229 android:layout_height="wrap_content"
230 android:gravity="center_vertical"
231 android:orientation="horizontal">
232
233 <LinearLayout
234 android:layout_width="wrap_content"
235 android:layout_height="80dp"
236 android:gravity="center_vertical"
237 android:layout_marginLeft="200dp">
238 <TextView
239 android:layout_width="wrap_content"
240 android:layout_height="wrap_content"
241 android:text=" "
242 android:textColor="@color/white"
243 android:textSize="22sp" />
244
245 <EditText
246 android:layout_width="wrap_content"
247 android:layout_height="wrap_content"
248 android:layout_marginLeft="100dp"
249 android:background="@null"
250 android:hint="请输入详细地址"
251 android:textSize="22sp" />
252
253 </LinearLayout>
254
255 <LinearLayout
256 android:layout_width="wrap_content"
257 android:layout_height="80dp"
258 android:layout_marginLeft="210dp"
259 android:gravity="center_vertical">
260
261 <TextView
262 android:layout_width="wrap_content"
263 android:layout_height="wrap_content"
264 android:text="本地售后电话"
265 android:textColor="@color/btn_text_color"
266 android:textSize="22sp" />
267
268 <EditText
269 android:layout_width="wrap_content"
270 android:layout_height="wrap_content"
271 android:hint="请输入"
272 android:background="@null"
273 android:layout_marginLeft="25dp"
274 android:textColor="@color/btn_text_color"
275 android:textSize="22sp" />
276 </LinearLayout>
277
278 </LinearLayout>
279 <LinearLayout
280 android:layout_width="wrap_content"
281 android:layout_height="wrap_content"
282
283 android:orientation="horizontal">
284 <View
285 android:layout_width="450dp"
286 android:layout_height="0.7dp"
287 android:layout_marginLeft="150dp"
288 android:background="@color/electronic_text">
289
290 </View>
291 <View
292 android:layout_width="400dp"
293 android:layout_height="0.7dp"
294 android:layout_marginLeft="80dp"
295 android:background="@color/electronic_text">
296
297 </View>
298
299
300 </LinearLayout>
301
302 <LinearLayout
303 android:layout_width="match_parent"
304 android:layout_height="wrap_content"
305 android:gravity="center_vertical"
306 android:orientation="horizontal">
307
308 <LinearLayout
309 android:id="@+id/lineL_buy_time"
310 android:layout_width="wrap_content"
311 android:layout_height="80dp"
312 android:layout_marginLeft="200dp"
313 android:gravity="center_vertical">
314
315 <TextView
316 android:layout_width="wrap_content"
317 android:layout_height="wrap_content"
318 android:text="购买时间"
319 android:textColor="@color/btn_text_color"
320 android:textSize="22sp" />
321
322 <TextView
323 android:id="@+id/tv_buy_time"
324 android:layout_width="wrap_content"
325 android:layout_height="wrap_content"
326 android:hint="请选择时间"
327 android:layout_marginLeft="50dp"
328 android:textSize="22sp" />
329 <ImageView
330 android:layout_width="wrap_content"
331 android:layout_height="wrap_content"
332 android:layout_marginLeft="50dp"
333 android:src="@mipmap/xiajiantou">
334
335 </ImageView>
336
337 </LinearLayout>
338
339 </LinearLayout>
340 <LinearLayout
341 android:layout_width="wrap_content"
342 android:layout_height="wrap_content"
343
344 android:orientation="horizontal">
345 <View
346 android:layout_width="450dp"
347 android:layout_height="0.7dp"
348 android:layout_marginLeft="150dp"
349 android:background="@color/electronic_text">
350
351 </View>
352
353
354 </LinearLayout>
355 <Button
356 android:layout_marginLeft="200dp"
357 android:layout_marginRight="200dp"
358 android:layout_marginTop="80dp"
359 android:id="@+id/btn_ok"
360 style="@style/button_login_register_style"
361 android:text="@string/string_regist_next" />
362
363
364 </LinearLayout>
PersonalCenter/app/src/main/res/layout/activity_feedback.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical" android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:background="@color/backgerangde_laout">
6 <RelativeLayout
7 android:id="@+id/title"
8 android:layout_width="match_parent"
9 android:layout_height="50dp"
10 android:background="@color/login_text_blue">
11
12 <ImageView
13 android:id="@+id/cancel"
14 android:layout_width="wrap_content"
15 android:layout_height="match_parent"
16 android:paddingLeft="20dp"
17 android:paddingRight="20dp"
18 android:src="@mipmap/title_back" />
19
20 <TextView
21 android:id="@+id/menu_title"
22 android:layout_width="wrap_content"
23 android:layout_height="match_parent"
24 android:layout_centerInParent="true"
25 android:gravity="center_vertical"
26 android:text="意见反馈"
27 android:textColor="@android:color/white"
28 android:textSize="22sp" />
29 <TextView
30 android:id="@+id/feedback_sub"
31 android:layout_width="wrap_content"
32 android:layout_height="match_parent"
33 android:paddingLeft="20dp"
34 android:paddingRight="20dp"
35 android:gravity="center_vertical"
36 android:layout_alignParentRight="true"
37 android:text="提交"
38 android:textColor="@android:color/white"
39 android:textSize="22sp" />
40
41
42 </RelativeLayout>
43 <EditText
44 android:id="@+id/feedback_content"
45 android:layout_width="match_parent"
46 android:layout_height="250dp"
47 android:hint="@string/feedback"
48 android:textColor="@color/electronic_text"
49 android:textSize="18sp"
50 android:textScaleX="1"
51 android:padding="20dp"
52 android:gravity="top"
53 android:background="@color/white"/>
54 <LinearLayout
55 android:id="@+id/take_phone"
56 android:layout_width="match_parent"
57 android:layout_height="wrap_content"
58 android:background="@color/white">
59 <ImageView
60 android:layout_margin="20dp"
61 android:layout_width="wrap_content"
62 android:layout_height="wrap_content"
63 android:src="@mipmap/feedback_take_phone"/>
64
65 </LinearLayout>
66 <EditText
67 android:layout_width="match_parent"
68 android:layout_marginTop="20dp"
69 android:background="@color/white"
70 android:hint="@string/qq"
71 android:padding="20dp"
72 android:layout_height="60dp" />
73 <TextView
74 android:layout_width="match_parent"
75 android:text="@string/hint"
76 android:padding="20dp"
77 android:textSize="18sp"
78 android:layout_height="60dp" />
79
80
81
82 </LinearLayout>
PersonalCenter/app/src/main/res/layout/activity_ok_cardinfo.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:orientation="vertical">
6
7 <RelativeLayout
8 android:id="@+id/title"
9 android:layout_width="match_parent"
10 android:layout_height="wrap_content"
11 android:background="@color/login_text_blue"
12 android:minHeight="50dp">
13
14 <ImageView
15 android:id="@+id/cancel"
16 android:layout_width="wrap_content"
17 android:layout_height="wrap_content"
18 android:layout_centerVertical="true"
19 android:paddingLeft="20dp"
20 android:paddingRight="20dp"
21 android:src="@mipmap/title_back" />
22
23 <TextView
24 android:id="@+id/menu_title"
25 android:layout_width="wrap_content"
26 android:layout_height="wrap_content"
27 android:layout_centerInParent="true"
28 android:text="@string/string_electroniccard_info_ok"
29 android:textColor="@android:color/white"
30 android:textSize="22sp" />
31 </RelativeLayout>
32
33 <LinearLayout
34 android:layout_width="match_parent"
35 android:layout_height="wrap_content"
36 android:layout_margin="20dp"
37 android:background="@mipmap/cardbackgrangd"
38 android:gravity="center"
39 android:orientation="vertical">
40
41 <LinearLayout
42 android:layout_width="match_parent"
43 android:layout_height="wrap_content"
44 android:layout_marginTop="70dp"
45 android:gravity="center_vertical"
46 android:orientation="horizontal">
47
48 <LinearLayout
49 android:layout_width="wrap_content"
50 android:layout_height="wrap_content"
51 android:layout_marginLeft="200dp"
52 android:gravity="center_vertical">
53
54 <ImageView
55 android:layout_width="wrap_content"
56 android:layout_height="wrap_content"
57 android:src="@mipmap/logo_info" />
58
59 <TextView
60 android:layout_width="wrap_content"
61 android:layout_height="wrap_content"
62 android:layout_marginLeft="50dp"
63 android:background="@null"
64 android:text="电子保卡"
65 android:textColor="@color/login_text_blue"
66 android:textSize="22sp" />
67
68 </LinearLayout>
69
70 <LinearLayout
71 android:layout_width="wrap_content"
72 android:layout_height="80dp"
73 android:layout_marginLeft="200dp"
74 android:gravity="center_vertical">
75
76 <TextView
77 android:layout_width="wrap_content"
78 android:layout_height="wrap_content"
79 android:text="客户姓名"
80 android:textColor="@color/btn_text_color"
81 android:textSize="22sp" />
82
83 <TextView
84 android:layout_width="wrap_content"
85 android:layout_height="wrap_content"
86 android:layout_marginLeft="60dp"
87 android:text="王小明"
88 android:textColor="@color/btn_text_color"
89 android:textSize="22sp" />
90
91 </LinearLayout>
92
93 </LinearLayout>
94
95 <LinearLayout
96 android:layout_width="match_parent"
97 android:layout_height="wrap_content"
98 android:gravity="center_vertical"
99 android:orientation="horizontal">
100
101 <LinearLayout
102 android:layout_width="wrap_content"
103 android:layout_height="60dp"
104 android:layout_marginLeft="200dp"
105 android:gravity="center_vertical">
106
107 <TextView
108 android:layout_width="wrap_content"
109 android:layout_height="wrap_content"
110 android:text="产品型号"
111 android:textColor="@color/btn_text_color"
112 android:textSize="22sp" />
113
114 <TextView
115 android:layout_width="wrap_content"
116 android:layout_height="wrap_content"
117 android:layout_marginLeft="50dp"
118 android:text="IPone888"
119 android:textSize="22sp" />
120
121
122 </LinearLayout>
123
124 <LinearLayout
125 android:layout_width="wrap_content"
126 android:layout_height="60dp"
127 android:layout_marginLeft="250dp"
128 android:gravity="center_vertical">
129
130 <TextView
131 android:layout_width="wrap_content"
132 android:layout_height="wrap_content"
133 android:text="客户地址"
134 android:textSize="22sp" />
135
136 <TextView
137 android:layout_width="wrap_content"
138 android:layout_height="wrap_content"
139 android:layout_marginLeft="98dp"
140 android:background="@null"
141 android:text="北京市昭阳区三里屯"
142 android:textSize="22sp" />
143
144 </LinearLayout>
145
146 </LinearLayout>
147
148 <LinearLayout
149 android:layout_width="match_parent"
150 android:layout_height="wrap_content"
151 android:gravity="center_vertical"
152 android:orientation="horizontal">
153
154 <LinearLayout
155 android:layout_width="wrap_content"
156 android:layout_height="60dp"
157 android:layout_marginLeft="200dp"
158 android:gravity="center_vertical">
159
160 <TextView
161 android:layout_width="wrap_content"
162 android:layout_height="wrap_content"
163 android:text="MAC地址"
164 android:textSize="22sp" />
165
166 <TextView
167 android:layout_width="wrap_content"
168 android:layout_height="wrap_content"
169 android:layout_marginLeft="50dp"
170 android:background="@null"
171 android:text="237462873463278"
172 android:textSize="22sp" />
173
174 </LinearLayout>
175
176 <LinearLayout
177 android:layout_width="wrap_content"
178 android:layout_height="60dp"
179 android:layout_marginLeft="210dp"
180 android:gravity="center_vertical">
181
182 <TextView
183 android:layout_width="wrap_content"
184 android:layout_height="wrap_content"
185 android:text="购买时间"
186 android:textColor="@color/btn_text_color"
187 android:textSize="22sp" />
188
189 <TextView
190 android:layout_width="wrap_content"
191 android:layout_height="wrap_content"
192 android:layout_marginLeft="25dp"
193 android:background="@null"
194 android:text="4433322-334--34"
195 android:textColor="@color/btn_text_color"
196 android:textSize="22sp" />
197 </LinearLayout>
198
199 </LinearLayout>
200
201 <LinearLayout
202 android:layout_width="match_parent"
203 android:layout_height="wrap_content"
204 android:gravity="center_vertical"
205 android:orientation="horizontal">
206
207 <LinearLayout
208 android:layout_width="wrap_content"
209 android:layout_height="60dp"
210 android:layout_marginLeft="200dp"
211 android:gravity="center_vertical">
212
213 <TextView
214 android:layout_width="wrap_content"
215 android:layout_height="wrap_content"
216 android:text="机身编码"
217 android:textColor="@color/btn_text_color"
218 android:textSize="22sp" />
219
220 <TextView
221 android:layout_width="wrap_content"
222 android:layout_height="wrap_content"
223 android:layout_marginLeft="50dp"
224 android:hint="473463746343"
225 android:textSize="22sp" />
226
227 </LinearLayout>
228
229 <LinearLayout
230 android:layout_width="wrap_content"
231 android:layout_height="60dp"
232 android:layout_marginLeft="210dp"
233 android:gravity="center_vertical">
234
235 <TextView
236 android:layout_width="wrap_content"
237 android:layout_height="wrap_content"
238 android:text="购买地址"
239 android:textColor="@color/btn_text_color"
240 android:textSize="22sp" />
241
242 <TextView
243 android:layout_width="wrap_content"
244 android:layout_height="wrap_content"
245 android:layout_marginLeft="25dp"
246 android:text="啥啥啥 专卖店"
247 android:textColor="@color/btn_text_color"
248 android:textSize="22sp" />
249 </LinearLayout>
250
251 </LinearLayout>
252
253 <LinearLayout
254 android:layout_width="match_parent"
255 android:layout_height="wrap_content"
256 android:gravity="center_vertical"
257 android:orientation="horizontal">
258
259 <LinearLayout
260 android:layout_width="wrap_content"
261 android:layout_height="60dp"
262 android:layout_marginLeft="200dp"
263 android:gravity="center_vertical">
264
265 <TextView
266 android:layout_width="wrap_content"
267 android:layout_height="wrap_content"
268 android:text="手机号码"
269 android:textColor="@color/btn_text_color"
270 android:textSize="22sp" />
271
272 <TextView
273 android:layout_width="wrap_content"
274 android:layout_height="wrap_content"
275 android:layout_marginLeft="50dp"
276 android:text="IPone888"
277 android:textSize="22sp" />
278
279
280 </LinearLayout>
281
282 <LinearLayout
283 android:layout_width="wrap_content"
284 android:layout_height="60dp"
285 android:layout_marginLeft="250dp"
286 android:gravity="center_vertical">
287
288 <TextView
289 android:layout_width="wrap_content"
290 android:layout_height="wrap_content"
291 android:text="本地售后电话"
292 android:textSize="22sp" />
293
294 <TextView
295 android:layout_width="wrap_content"
296 android:layout_height="wrap_content"
297 android:layout_marginLeft="98dp"
298 android:background="@null"
299 android:text="1111111"
300 android:textSize="22sp" />
301
302 </LinearLayout>
303
304 </LinearLayout>
305 </LinearLayout>
306
307 <LinearLayout
308 android:layout_width="match_parent"
309 android:layout_height="wrap_content"
310 android:layout_marginTop="5dp"
311 android:gravity="center"
312 android:orientation="vertical">
313
314 <TextView
315 android:layout_width="wrap_content"
316 android:layout_height="wrap_content"
317 android:layout_marginTop="5dp"
318 android:text="@string/electronic_card3"
319 android:textColor="@color/electronic_text"
320 android:textSize="18sp" />
321
322 <TextView
323 android:layout_width="wrap_content"
324 android:layout_height="wrap_content"
325 android:layout_marginTop="5dp"
326 android:text="@string/electronic_card4"
327 android:textColor="@color/electronic_text"
328 android:textSize="18sp" />
329
330
331 </LinearLayout>
332
333 <LinearLayout
334 android:layout_width="match_parent"
335 android:layout_height="wrap_content"
336 android:layout_marginTop="30dp"
337 android:gravity="center"
338 android:orientation="horizontal">
339
340 <Button
341 android:id="@+id/btn_bangding"
342 android:layout_width="300dp"
343 android:layout_height="wrap_content"
344 android:background="@drawable/selector_blue_btn_bg"
345 android:text="@string/bangding"
346 android:textColor="@color/white"
347 android:textSize="23sp" />
348
349 <Button
350 android:id="@+id/btn_ok"
351 android:layout_width="300dp"
352 android:layout_height="wrap_content"
353 android:layout_marginLeft="50dp"
354 android:background="@drawable/selector_blue_btn_bg"
355 android:text="@string/finish"
356 android:textColor="@color/white"
357 android:textSize="23sp" />
358
359
360 </LinearLayout>
361
362
363 </LinearLayout>
PersonalCenter/app/src/main/res/mipmap-xhdpi/cardbackgrangd.png

8.88 KB

PersonalCenter/app/src/main/res/mipmap-xhdpi/change_info_icon.png

5.91 KB

PersonalCenter/app/src/main/res/mipmap-xhdpi/feedback_take_phone.png

2.85 KB

PersonalCenter/app/src/main/res/mipmap-xhdpi/logo_info.png

5.04 KB

PersonalCenter/app/src/main/res/mipmap-xhdpi/phone.png

772 Bytes

PersonalCenter/app/src/main/res/mipmap-xhdpi/pic_phone.png

1.66 KB

PersonalCenter/app/src/main/res/mipmap-xhdpi/xiajiantou.png

429 Bytes

PersonalCenter/app/src/main/res/values/colors.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <resources> 2 <resources>
3 <color name="colorPrimary">#3F51B5</color> 3 <color name="colorPrimary">#3F51B5</color>
4 <color name="colorPrimaryDark">#303F9F</color> 4 <color name="colorPrimaryDark">#303F9F</color>
5 <color name="colorAccent">#FF4081</color> 5 <color name="colorAccent">#FF4081</color>
6 <color name="white">#ffffffff</color> 6 <color name="white">#ffffffff</color>
7 <color name="login_edittext_hint">#afafaf</color> 7 <color name="login_edittext_hint">#afafaf</color>
8 <color name="login_text_blue">#1cb8ff</color> 8 <color name="login_text_blue">#1cb8ff</color>
9 <color name="login_text_black">#313131</color> 9 <color name="login_text_black">#313131</color>
10 <color name="login_edittext_normal">#d4d4d4</color> 10 <color name="login_edittext_normal">#d4d4d4</color>
11 <color name="error_hint">#ED1c24</color> 11 <color name="error_hint">#ED1c24</color>
12 <color name="login_edittext_pressed">#1cb8ff</color> 12 <color name="login_edittext_pressed">#1cb8ff</color>
13 <color name="cutoff_line">#CCCCCC</color> 13 <color name="cutoff_line">#CCCCCC</color>
14 <color name="electronic_card">#ff480f</color> 14 <color name="electronic_card">#ff480f</color>
15 <color name="electronic_text">#afafaf</color>
16 <color name="backgerangde_laout">#eeeeee</color>
15 17
16 </resources> 18 </resources>
17 19
PersonalCenter/app/src/main/res/values/strings.xml
1 <resources> 1 <resources>
2 <string name="app_name">PersonalCenter</string> 2 <string name="app_name">PersonalCenter</string>
3 3
4 4
5 5
6 //登录注册 6 //登录注册
7 <string name="cancel">取 消</string> 7 <string name="cancel">取 消</string>
8 <string name="ok">确 定</string> 8 <string name="ok">确 定</string>
9 <string name="forget_pwd">忘记密码</string> 9 <string name="forget_pwd">忘记密码</string>
10 <string name="string_menu_title">修改密码</string> 10 <string name="string_menu_title">修改密码</string>
11 <string name="string_regist_info">填写注册信息</string> 11 <string name="string_regist_info">填写注册信息</string>
12 <string name="string_textbook_info">选择教材版本</string> 12 <string name="string_textbook_info">选择教材版本</string>
13 <string name="string_regist_username">用户名</string> 13 <string name="string_regist_username">用户名</string>
14 <string name="string_regist_region">地区</string> 14 <string name="string_regist_region">地区</string>
15 <string name="string_regist_grade">年级</string> 15 <string name="string_regist_grade">年级</string>
16 <string name="string_regist_school">学校</string> 16 <string name="string_regist_school">学校</string>
17 <string name="string_regist_next">下一步</string> 17 <string name="string_regist_next">下一步</string>
18 <string name="string_start_page">开始学习体验</string> 18 <string name="string_start_page">开始学习体验</string>
19 <string name="bangding">绑定家长控制</string>
20 <string name="finish">完成</string>
19 21
20 //电子保卡 22 //电子保卡
21 <string name="string_electroniccard_info_title">填写保卡信息</string> 23 <string name="string_electroniccard_info_title">填写保卡信息</string>
22 <string name="string_electroniccard_info_fill">填写电子保卡</string> 24 <string name="string_electroniccard_info_fill">填写电子保卡</string>
25 <string name="change_electroniccard_info_fill">修改保卡信息</string>
23 <string name="string_electroniccard_info_change">修改保卡信息</string> 26 <string name="string_electroniccard_info_change">修改保卡信息</string>
27 <string name="string_electroniccard_info_ok">确认保卡信息</string>
28 <string name="string_electroniccard_info_look">好记星-电子报卡</string>
24 <string name="string_electroniccard_change_bangding">更换绑定</string> 29 <string name="string_electroniccard_change_bangding">更换绑定</string>
30 <string name="electronic_card">温馨提示:若您想修改的相关信息请拨打客服电话</string>
25 <string name="electronic_card1">请先填写《好记星-电子保卡》信息</string> 31 <string name="electronic_card1">请先填写《好记星-电子保卡》信息</string>
26 <string name="electronic_card2">该信息是本产品的三包证明,为维护您的合法权益,请认真填写</string> 32 <string name="electronic_card2">该信息是本产品的三包证明,为维护您的合法权益,请认真填写</string>
33 <string name="electronic_card3">您已填写完《好记星-电子保卡》信息</string>
34 <string name="electronic_card4">您也可以设置家长管理,用手机及时了解和管理孩子的学习情况</string>
35
36 //意见反馈
37 <string name="feedback">写下您对我们产品的意见吧,我们将努力完善,最多输入500字。</string>
38 <string name="qq">QQ或手机号码</string>
39 <string name="hint">留下您的联系方式,方便与您沟通。</string>
40
27 41
28 42
29 </resources> 43 </resources>
30 44
PersonalCenter/pickerview/.gitignore
File was created 1 /build
2
PersonalCenter/pickerview/build.gradle
File was created 1 apply plugin: 'com.android.library'
2 apply plugin: 'maven'
3 apply plugin: 'com.novoda.bintray-release'//添加插件
4
5
6
7 android {
8 compileSdkVersion 25
9 buildToolsVersion "25.0.2"
10
11 defaultConfig {
12 minSdkVersion 15
13 targetSdkVersion 25
14 versionCode 22
15 versionName "3.2.6"
16 }
17 buildTypes {
18 release {
19 minifyEnabled false
20 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
21 }
22 }
23 lintOptions {
24 abortOnError false
25 }
26 }
27
28 allprojects {
29 tasks.withType(Javadoc) {//兼容中文字符
30 options{
31 encoding "UTF-8"
32 charSet 'UTF-8'
33 links "http://docs.oracle.com/javase/7/docs/api"
34 }
35 }
36 }
37 publish {
38 userOrg = 'contrarywind'//bintray.com 用户名/组织名 user/org name
39 groupId = 'com.contrarywind'//JCenter上显示的路径 path
40 artifactId = 'Android-PickerView'//项目名称 project name
41 publishVersion = '3.2.6'//版本号 version code
42 desc = 'this is a pickerview for android'//项目描述 description
43 website = 'https://github.com/Contrarywind/Android-PickerView' //项目网址链接 link
44 }
45
46 dependencies {
47 compile fileTree(include: ['*.jar'], dir: 'libs')
48
49 }
PersonalCenter/pickerview/proguard-rules.pro
File was created 1 # Add project specific ProGuard rules here.
2 # By default, the flags in this file are appended to flags specified
3 # in /Users/Sai/Documents/software/sdk/tools/proguard/proguard-android.txt
4 # You can edit the include path and order by changing the proguardFiles
5 # directive in build.gradle.
6 #
7 # For more details, see
8 # http://developer.android.com/guide/developing/tools/proguard.html
9
10 # Add any project specific keep options here:
11
12 # If your project uses WebView with JS, uncomment the following
13 # and specify the fully qualified class name to the JavaScript interface
14 # class:
15 #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 # public *;
17 #}
18
PersonalCenter/pickerview/src/androidTest/java/com/bigkoo/pickerview/ApplicationTest.java
File was created 1 package com.bigkoo.pickerview;
2
3 import android.app.Application;
4 import android.test.ApplicationTestCase;
5
6 /**
7 * <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
8 */
9 public class ApplicationTest extends ApplicationTestCase<Application> {
10 public ApplicationTest() {
11 super(Application.class);
12 }
13 }
PersonalCenter/pickerview/src/main/AndroidManifest.xml
File was created 1 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2 package="com.bigkoo.pickerview">
3
4
5 </manifest>
6
PersonalCenter/pickerview/src/main/java/com/bigkoo/pickerview/OptionsPickerView.java
File was created 1 package com.bigkoo.pickerview;
2
3 import android.content.Context;
4 import android.graphics.Typeface;
5 import android.text.TextUtils;
6 import android.view.LayoutInflater;
7 import android.view.View;
8 import android.view.ViewGroup;
9 import android.widget.Button;
10 import android.widget.LinearLayout;
11 import android.widget.RelativeLayout;
12 import android.widget.TextView;
13
14 import com.bigkoo.pickerview.lib.WheelView;
15 import com.bigkoo.pickerview.listener.CustomListener;
16 import com.bigkoo.pickerview.view.BasePickerView;
17 import com.bigkoo.pickerview.view.WheelOptions;
18
19 import java.util.List;
20
21 /**
22 * 条件选择器
23 * Created by Sai on 15/11/22.
24 */
25 public class OptionsPickerView<T> extends BasePickerView implements View.OnClickListener {
26
27 WheelOptions<T> wheelOptions;
28 private int layoutRes;
29 private CustomListener customListener;
30 private Button btnSubmit, btnCancel; //确定、取消按钮
31 private TextView tvTitle;
32 private RelativeLayout rv_top_bar;
33
34 private static final String TAG_SUBMIT = "submit";
35 private static final String TAG_CANCEL = "cancel";
36
37 private OnOptionsSelectListener optionsSelectListener;
38
39 private String Str_Submit;//确定按钮文字
40 private String Str_Cancel;//取消按钮文字
41 private String Str_Title;//标题文字
42
43 private int Color_Submit;//确定按钮颜色
44 private int Color_Cancel;//取消按钮颜色
45 private int Color_Title;//标题颜色
46
47 private int Color_Background_Wheel;//滚轮背景颜色
48 private int Color_Background_Title;//标题背景颜色
49
50 private int Size_Submit_Cancel;//确定取消按钮大小
51 private int Size_Title;//标题文字大小
52 private int Size_Content;//内容文字大小
53
54 private int textColorOut; //分割线以外的文字颜色
55 private int textColorCenter; //分割线之间的文字颜色
56 private int dividerColor; //分割线的颜色
57 private int backgroundId; //显示时的外部背景色颜色,默认是灰色
58 // 条目间距倍数 默认1.6
59 private float lineSpacingMultiplier = 1.6F;
60 private boolean isDialog;//是否是对话框模式
61
62 private boolean cancelable;//是否能取消
63 private boolean linkage;//是否联动
64
65 private boolean isCenterLabel ;//是否只显示中间的label
66
67 private String label1;//单位
68 private String label2;
69 private String label3;
70
71 private boolean cyclic1;//是否循环
72 private boolean cyclic2;
73 private boolean cyclic3;
74
75 private Typeface font;//字体样式
76
77 private int option1;//默认选中项
78 private int option2;
79 private int option3;
80 private WheelView.DividerType dividerType;//分隔线类型
81
82 //构造方法
83 public OptionsPickerView(Builder builder) {
84 super(builder.context);
85 this.optionsSelectListener = builder.optionsSelectListener;
86 this.Str_Submit = builder.Str_Submit;
87 this.Str_Cancel = builder.Str_Cancel;
88 this.Str_Title = builder.Str_Title;
89
90 this.Color_Submit = builder.Color_Submit;
91 this.Color_Cancel = builder.Color_Cancel;
92 this.Color_Title = builder.Color_Title;
93 this.Color_Background_Wheel = builder.Color_Background_Wheel;
94 this.Color_Background_Title = builder.Color_Background_Title;
95
96 this.Size_Submit_Cancel = builder.Size_Submit_Cancel;
97 this.Size_Title = builder.Size_Title;
98 this.Size_Content = builder.Size_Content;
99
100 this.cyclic1 = builder.cyclic1;
101 this.cyclic2 = builder.cyclic2;
102 this.cyclic3 = builder.cyclic3;
103
104 this.cancelable = builder.cancelable;
105 this.linkage = builder.linkage;
106 this.isCenterLabel = builder.isCenterLabel;
107
108 this.label1 = builder.label1;
109 this.label2 = builder.label2;
110 this.label3 = builder.label3;
111
112 this.font = builder.font;
113
114
115 this.option1 = builder.option1;
116 this.option2 = builder.option2;
117 this.option3 = builder.option3;
118 this.textColorCenter = builder.textColorCenter;
119 this.textColorOut = builder.textColorOut;
120 this.dividerColor = builder.dividerColor;
121 this.lineSpacingMultiplier = builder.lineSpacingMultiplier;
122 this.customListener = builder.customListener;
123 this.layoutRes = builder.layoutRes;
124 this.isDialog = builder.isDialog;
125 this.dividerType = builder.dividerType;
126 this.backgroundId = builder.backgroundId;
127 this.decorView = builder.decorView;
128 initView(builder.context);
129 }
130
131
132 //建造器
133 public static class Builder {
134 private int layoutRes = R.layout.pickerview_options;
135 private CustomListener customListener;
136 private Context context;
137 private OnOptionsSelectListener optionsSelectListener;
138
139 private String Str_Submit;//确定按钮文字
140 private String Str_Cancel;//取消按钮文字
141 private String Str_Title;//标题文字
142
143 private int Color_Submit;//确定按钮颜色
144 private int Color_Cancel;//取消按钮颜色
145 private int Color_Title;//标题颜色
146
147 private int Color_Background_Wheel;//滚轮背景颜色
148 private int Color_Background_Title;//标题背景颜色
149
150 private int Size_Submit_Cancel = 17;//确定取消按钮大小
151 private int Size_Title = 18;//标题文字大小
152 private int Size_Content = 18;//内容文字大小
153
154 private boolean cancelable = true;//是否能取消
155 private boolean linkage = true;//是否联动
156 private boolean isCenterLabel = true;//是否只显示中间的label
157
158 private int textColorOut; //分割线以外的文字颜色
159 private int textColorCenter; //分割线之间的文字颜色
160 private int dividerColor; //分割线的颜色
161 private int backgroundId; //显示时的外部背景色颜色,默认是灰色
162 public ViewGroup decorView ;//显示pickerview的根View,默认是activity的根view
163 // 条目间距倍数 默认1.6
164 private float lineSpacingMultiplier = 1.6F;
165 private boolean isDialog;//是否是对话框模式
166
167 private String label1;
168 private String label2;
169 private String label3;
170
171 private boolean cyclic1 = false;//是否循环,默认否
172 private boolean cyclic2 = false;
173 private boolean cyclic3 = false;
174
175 private Typeface font;
176
177 private int option1;//默认选中项
178 private int option2;
179 private int option3;
180
181 private WheelView.DividerType dividerType;//分隔线类型
182
183 //Required
184 public Builder(Context context, OnOptionsSelectListener listener) {
185 this.context = context;
186 this.optionsSelectListener = listener;
187 }
188
189 //Option
190
191 public Builder setSubmitText(String Str_Cancel) {
192 this.Str_Submit = Str_Cancel;
193 return this;
194 }
195
196 public Builder setCancelText(String Str_Cancel) {
197 this.Str_Cancel = Str_Cancel;
198 return this;
199 }
200
201 public Builder setTitleText(String Str_Title) {
202 this.Str_Title = Str_Title;
203 return this;
204 }
205
206 public Builder isDialog(boolean isDialog) {
207 this.isDialog = isDialog;
208 return this;
209 }
210
211 public Builder setSubmitColor(int Color_Submit) {
212 this.Color_Submit = Color_Submit;
213 return this;
214 }
215
216 public Builder setCancelColor(int Color_Cancel) {
217 this.Color_Cancel = Color_Cancel;
218 return this;
219 }
220
221 /**
222 * 显示时的外部背景色颜色,默认是灰色
223 * @param backgroundId
224 * @return
225 */
226 public Builder setBackgroundId(int backgroundId) {
227 this.backgroundId = backgroundId;
228 return this;
229 }
230 /**
231 * 必须是viewgroup
232 * 设置要将pickerview显示到的容器
233 * @param decorView
234 * @return
235 */
236 public Builder setDecorView(ViewGroup decorView) {
237 this.decorView = decorView;
238 return this;
239 }
240
241
242
243
244 public Builder setLayoutRes(int res, CustomListener listener) {
245 this.layoutRes = res;
246 this.customListener = listener;
247 return this;
248 }
249
250 public Builder setBgColor(int Color_Background_Wheel) {
251 this.Color_Background_Wheel = Color_Background_Wheel;
252 return this;
253 }
254
255 public Builder setTitleBgColor(int Color_Background_Title) {
256 this.Color_Background_Title = Color_Background_Title;
257 return this;
258 }
259
260 public Builder setTitleColor(int Color_Title) {
261 this.Color_Title = Color_Title;
262 return this;
263 }
264
265 public Builder setSubCalSize(int Size_Submit_Cancel) {
266 this.Size_Submit_Cancel = Size_Submit_Cancel;
267 return this;
268 }
269
270 public Builder setTitleSize(int Size_Title) {
271 this.Size_Title = Size_Title;
272 return this;
273 }
274
275 public Builder setContentTextSize(int Size_Content) {
276 this.Size_Content = Size_Content;
277 return this;
278 }
279
280
281 public Builder setOutSideCancelable(boolean cancelable) {
282 this.cancelable = cancelable;
283 return this;
284 }
285
286 /**
287 * 此方法已废弃
288 * 不联动的情况下,请调用 setNPicker 方法。
289 * */
290 @Deprecated
291 public Builder setLinkage(boolean linkage) {
292 this.linkage = linkage;
293 return this;
294 }
295
296 public Builder setLabels(String label1, String label2, String label3) {
297 this.label1 = label1;
298 this.label2 = label2;
299 this.label3 = label3;
300 return this;
301 }
302
303 /**
304 * 设置间距倍数,但是只能在1.2-2.0f之间
305 *
306 * @param lineSpacingMultiplier
307 */
308 public Builder setLineSpacingMultiplier(float lineSpacingMultiplier) {
309 this.lineSpacingMultiplier = lineSpacingMultiplier;
310 return this;
311 }
312
313 /**
314 * 设置分割线的颜色
315 *
316 * @param dividerColor
317 */
318 public Builder setDividerColor(int dividerColor) {
319 this.dividerColor = dividerColor;
320 return this;
321 }
322
323 /**
324 * 设置分割线的类型
325 *
326 * @param dividerType
327 */
328 public Builder setDividerType(WheelView.DividerType dividerType) {
329 this.dividerType = dividerType;
330 return this;
331 }
332
333 /**
334 * 设置分割线之间的文字的颜色
335 *
336 * @param textColorCenter
337 */
338 public Builder setTextColorCenter(int textColorCenter) {
339 this.textColorCenter = textColorCenter;
340 return this;
341 }
342
343 /**
344 * 设置分割线以外文字的颜色
345 *
346 * @param textColorOut
347 */
348 public Builder setTextColorOut(int textColorOut) {
349 this.textColorOut = textColorOut;
350 return this;
351 }
352
353 public Builder setTypeface(Typeface font) {
354 this.font = font;
355 return this;
356 }
357
358 public Builder setCyclic(boolean cyclic1, boolean cyclic2, boolean cyclic3) {
359 this.cyclic1 = cyclic1;
360 this.cyclic2 = cyclic2;
361 this.cyclic3 = cyclic3;
362 return this;
363 }
364
365 public Builder setSelectOptions(int option1) {
366 this.option1 = option1;
367 return this;
368 }
369
370 public Builder setSelectOptions(int option1, int option2) {
371 this.option1 = option1;
372 this.option2 = option2;
373 return this;
374 }
375
376 public Builder setSelectOptions(int option1, int option2, int option3) {
377 this.option1 = option1;
378 this.option2 = option2;
379 this.option3 = option3;
380 return this;
381 }
382
383 public Builder isCenterLabel(boolean isCenterLabel) {
384 this.isCenterLabel = isCenterLabel;
385 return this;
386 }
387
388 public OptionsPickerView build() {
389 return new OptionsPickerView(this);
390 }
391 }
392
393
394 private void initView(Context context) {
395 setDialogOutSideCancelable(cancelable);
396 initViews(backgroundId);
397 init();
398 initEvents();
399 if (customListener == null) {
400 LayoutInflater.from(context).inflate(layoutRes, contentContainer);
401
402 //顶部标题
403 tvTitle = (TextView) findViewById(R.id.tvTitle);
404 rv_top_bar = (RelativeLayout)findViewById(R.id.rv_topbar);
405
406 //确定和取消按钮
407 btnSubmit = (Button) findViewById(R.id.btnSubmit);
408 btnCancel = (Button) findViewById(R.id.btnCancel);
409
410 btnSubmit.setTag(TAG_SUBMIT);
411 btnCancel.setTag(TAG_CANCEL);
412 btnSubmit.setOnClickListener(this);
413 btnCancel.setOnClickListener(this);
414
415 //设置文字
416 btnSubmit.setText(TextUtils.isEmpty(Str_Submit) ? context.getResources().getString(R.string.pickerview_submit) : Str_Submit);
417 btnCancel.setText(TextUtils.isEmpty(Str_Cancel) ? context.getResources().getString(R.string.pickerview_cancel) : Str_Cancel);
418 tvTitle.setText(TextUtils.isEmpty(Str_Title) ? "" : Str_Title);//默认为空
419
420 //设置color
421 btnSubmit.setTextColor(Color_Submit == 0 ? pickerview_timebtn_nor : Color_Submit);
422 btnCancel.setTextColor(Color_Cancel == 0 ? pickerview_timebtn_nor : Color_Cancel);
423 tvTitle.setTextColor(Color_Title == 0 ? pickerview_topbar_title : Color_Title);
424 rv_top_bar.setBackgroundColor(Color_Background_Title == 0 ? pickerview_bg_topbar : Color_Background_Title);
425
426 //设置文字大小
427 btnSubmit.setTextSize(Size_Submit_Cancel);
428 btnCancel.setTextSize(Size_Submit_Cancel);
429 tvTitle.setTextSize(Size_Title);
430 tvTitle.setText(Str_Title);
431 } else {
432 customListener.customLayout(LayoutInflater.from(context).inflate(layoutRes, contentContainer));
433 }
434
435 // ----滚轮布局
436 final LinearLayout optionsPicker = (LinearLayout) findViewById(R.id.optionspicker);
437 optionsPicker.setBackgroundColor(Color_Background_Wheel == 0 ? bgColor_default : Color_Background_Wheel);
438
439 wheelOptions = new WheelOptions(optionsPicker, linkage);
440 wheelOptions.setTextContentSize(Size_Content);
441 wheelOptions.setLabels(label1, label2, label3);
442 wheelOptions.setCyclic(cyclic1, cyclic2, cyclic3);
443 wheelOptions.setTypeface(font);
444
445 setOutSideCancelable(cancelable);
446
447 if (tvTitle!= null){
448 tvTitle.setText(Str_Title);
449 }
450
451 wheelOptions.setDividerColor(dividerColor);
452 wheelOptions.setDividerType(dividerType);
453 wheelOptions.setLineSpacingMultiplier(lineSpacingMultiplier);
454 wheelOptions.setTextColorOut(textColorOut);
455 wheelOptions.setTextColorCenter(textColorCenter);
456 wheelOptions.isCenterLabel(isCenterLabel);
457
458 }
459
460
461 /**
462 * 设置默认选中项
463 *
464 * @param option1
465 */
466 public void setSelectOptions(int option1) {
467 this.option1 = option1;
468 SetCurrentItems();
469 }
470
471
472 public void setSelectOptions(int option1, int option2) {
473 this.option1 = option1;
474 this.option2 = option2;
475 SetCurrentItems();
476 }
477
478 public void setSelectOptions(int option1, int option2, int option3) {
479 this.option1 = option1;
480 this.option2 = option2;
481 this.option3 = option3;
482 SetCurrentItems();
483 }
484
485 private void SetCurrentItems() {
486 if(wheelOptions!=null){
487 wheelOptions.setCurrentItems(option1, option2, option3);
488 }
489 }
490
491 public void setPicker(List<T> optionsItems) {
492 this.setPicker(optionsItems, null, null);
493 }
494
495 public void setPicker(List<T> options1Items, List<List<T>> options2Items) {
496 this.setPicker(options1Items, options2Items, null);
497 }
498
499 public void setPicker(List<T> options1Items,
500 List<List<T>> options2Items,
501 List<List<List<T>>> options3Items) {
502
503 wheelOptions.setPicker(options1Items, options2Items, options3Items);
504 SetCurrentItems();
505 }
506
507
508 //不联动情况下调用
509 public void setNPicker(List<T> options1Items,
510 List<T> options2Items,
511 List<T> options3Items) {
512
513 wheelOptions.setNPicker(options1Items, options2Items, options3Items);
514 SetCurrentItems();
515 }
516
517 @Override
518 public void onClick(View v) {
519 String tag = (String) v.getTag();
520 if (tag.equals(TAG_SUBMIT)) {
521 returnData();
522 }
523 dismiss();
524 }
525
526 //抽离接口回调的方法
527 public void returnData() {
528 if (optionsSelectListener != null) {
529 int[] optionsCurrentItems = wheelOptions.getCurrentItems();
530 optionsSelectListener.onOptionsSelect(optionsCurrentItems[0], optionsCurrentItems[1], optionsCurrentItems[2], clickView);
531 }
532 }
533
534 public interface OnOptionsSelectListener {
535 void onOptionsSelect(int options1, int options2, int options3, View v);
536 }
537
538 @Override
539 public boolean isDialog() {
540 return isDialog;
541 }
542 }
543
PersonalCenter/pickerview/src/main/java/com/bigkoo/pickerview/TimePickerView.java
File was created 1 package com.bigkoo.pickerview;
2
3 import android.content.Context;
4 import android.text.TextUtils;
5 import android.view.Gravity;
6 import android.view.LayoutInflater;
7 import android.view.View;
8 import android.view.ViewGroup;
9 import android.widget.Button;
10 import android.widget.LinearLayout;
11 import android.widget.RelativeLayout;
12 import android.widget.TextView;
13
14 import com.bigkoo.pickerview.lib.WheelView;
15 import com.bigkoo.pickerview.listener.CustomListener;
16 import com.bigkoo.pickerview.view.BasePickerView;
17 import com.bigkoo.pickerview.view.WheelTime;
18
19 import java.text.ParseException;
20 import java.util.Calendar;
21 import java.util.Date;
22
23 /**
24 * 时间选择器
25 * Created by Sai on 15/11/22.
26 * Updated by XiaoSong on 2017-2-22.
27 */
28 public class TimePickerView extends BasePickerView implements View.OnClickListener {
29 private int layoutRes;
30 private CustomListener customListener;
31
32 WheelTime wheelTime; //自定义控件
33 private Button btnSubmit, btnCancel; //确定、取消按钮
34 private TextView tvTitle;//标题
35 private OnTimeSelectListener timeSelectListener;//回调接口
36 private int gravity = Gravity.CENTER;//内容显示位置 默认居中
37 private boolean[] type;// 显示类型
38
39 private String Str_Submit;//确定按钮字符串
40 private String Str_Cancel;//取消按钮字符串
41 private String Str_Title;//标题字符串
42
43 private int Color_Submit;//确定按钮颜色
44 private int Color_Cancel;//取消按钮颜色
45 private int Color_Title;//标题颜色
46
47 private int Color_Background_Wheel;//滚轮背景颜色
48 private int Color_Background_Title;//标题背景颜色
49
50 private int Size_Submit_Cancel;//确定取消按钮大小
51 private int Size_Title;//标题字体大小
52 private int Size_Content;//内容字体大小
53
54 private Calendar date;//当前选中时间
55 private Calendar startDate;//开始时间
56 private Calendar endDate;//终止时间
57 private int startYear;//开始年份
58 private int endYear;//结尾年份
59
60 private boolean cyclic;//是否循环
61 private boolean cancelable;//是否能取消
62 private boolean isCenterLabel;//是否只显示中间的label
63
64 private int textColorOut; //分割线以外的文字颜色
65 private int textColorCenter; //分割线之间的文字颜色
66 private int dividerColor; //分割线的颜色
67 private int backgroundId; //显示时的外部背景色颜色,默认是灰色
68
69 // 条目间距倍数 默认1.6
70 private float lineSpacingMultiplier = 1.6F;
71 private boolean isDialog;//是否是对话框模式
72 private String label_year, label_month, label_day, label_hours, label_mins, label_seconds;
73 private WheelView.DividerType dividerType;//分隔线类型
74
75 private static final String TAG_SUBMIT = "submit";
76 private static final String TAG_CANCEL = "cancel";
77
78 //构造方法
79 public TimePickerView(Builder builder) {
80 super(builder.context);
81 this.timeSelectListener = builder.timeSelectListener;
82 this.gravity = builder.gravity;
83 this.type = builder.type;
84 this.Str_Submit = builder.Str_Submit;
85 this.Str_Cancel = builder.Str_Cancel;
86 this.Str_Title = builder.Str_Title;
87 this.Color_Submit = builder.Color_Submit;
88 this.Color_Cancel = builder.Color_Cancel;
89 this.Color_Title = builder.Color_Title;
90 this.Color_Background_Wheel = builder.Color_Background_Wheel;
91 this.Color_Background_Title = builder.Color_Background_Title;
92 this.Size_Submit_Cancel = builder.Size_Submit_Cancel;
93 this.Size_Title = builder.Size_Title;
94 this.Size_Content = builder.Size_Content;
95 this.startYear = builder.startYear;
96 this.endYear = builder.endYear;
97 this.startDate = builder.startDate;
98 this.endDate = builder.endDate;
99 this.date = builder.date;
100 this.cyclic = builder.cyclic;
101 this.isCenterLabel = builder.isCenterLabel;
102 this.cancelable = builder.cancelable;
103 this.label_year = builder.label_year;
104 this.label_month = builder.label_month;
105 this.label_day = builder.label_day;
106 this.label_hours = builder.label_hours;
107 this.label_mins = builder.label_mins;
108 this.label_seconds = builder.label_seconds;
109 this.textColorCenter = builder.textColorCenter;
110 this.textColorOut = builder.textColorOut;
111 this.dividerColor = builder.dividerColor;
112 this.customListener = builder.customListener;
113 this.layoutRes = builder.layoutRes;
114 this.lineSpacingMultiplier = builder.lineSpacingMultiplier;
115 this.isDialog = builder.isDialog;
116 this.dividerType = builder.dividerType;
117 this.backgroundId = builder.backgroundId;
118 this.decorView = builder.decorView;
119 initView(builder.context);
120 }
121
122
123 //建造器
124 public static class Builder {
125 private int layoutRes = R.layout.pickerview_time;
126 private CustomListener customListener;
127 private Context context;
128 private OnTimeSelectListener timeSelectListener;
129 private boolean[] type = new boolean[]{true, true, true, true, true, true};//显示类型 默认全部显示
130 private int gravity = Gravity.CENTER;//内容显示位置 默认居中
131
132 private String Str_Submit;//确定按钮文字
133 private String Str_Cancel;//取消按钮文字
134 private String Str_Title;//标题文字
135
136 private int Color_Submit;//确定按钮颜色
137 private int Color_Cancel;//取消按钮颜色
138 private int Color_Title;//标题颜色
139
140 private int Color_Background_Wheel;//滚轮背景颜色
141 private int Color_Background_Title;//标题背景颜色
142
143 private int Size_Submit_Cancel = 17;//确定取消按钮大小
144 private int Size_Title = 18;//标题字体大小
145 private int Size_Content = 18;//内容字体大小
146 private Calendar date;//当前选中时间
147 private Calendar startDate;//开始时间
148 private Calendar endDate;//终止时间
149 private int startYear;//开始年份
150 private int endYear;//结尾年份
151
152 private boolean cyclic = false;//是否循环
153 private boolean cancelable = true;//是否能取消
154
155 private boolean isCenterLabel = true ;//是否只显示中间的label
156 public ViewGroup decorView ;//显示pickerview的根View,默认是activity的根view
157
158 private int textColorOut; //分割线以外的文字颜色
159 private int textColorCenter; //分割线之间的文字颜色
160 private int dividerColor; //分割线的颜色
161 private int backgroundId; //显示时的外部背景色颜色,默认是灰色
162 private WheelView.DividerType dividerType;//分隔线类型
163 // 条目间距倍数 默认1.6
164 private float lineSpacingMultiplier = 1.6F;
165
166 private boolean isDialog;//是否是对话框模式
167
168 private String label_year, label_month, label_day, label_hours, label_mins, label_seconds;//单位
169
170 //Required
171 public Builder(Context context, OnTimeSelectListener listener) {
172 this.context = context;
173 this.timeSelectListener = listener;
174 }
175
176 //Option
177 public Builder setType(boolean[] type) {
178 this.type = type;
179 return this;
180 }
181
182 public Builder gravity(int gravity) {
183 this.gravity = gravity;
184 return this;
185 }
186
187 public Builder setSubmitText(String Str_Submit) {
188 this.Str_Submit = Str_Submit;
189 return this;
190 }
191
192 public Builder isDialog(boolean isDialog) {
193 this.isDialog = isDialog;
194 return this;
195 }
196
197 public Builder setCancelText(String Str_Cancel) {
198 this.Str_Cancel = Str_Cancel;
199 return this;
200 }
201
202 public Builder setTitleText(String Str_Title) {
203 this.Str_Title = Str_Title;
204 return this;
205 }
206
207 public Builder setSubmitColor(int Color_Submit) {
208 this.Color_Submit = Color_Submit;
209 return this;
210 }
211
212 public Builder setCancelColor(int Color_Cancel) {
213 this.Color_Cancel = Color_Cancel;
214 return this;
215 }
216 /**
217 * 必须是viewgroup
218 * 设置要将pickerview显示到的容器id
219 * @param decorView
220 * @return
221 */
222 public Builder setDecorView(ViewGroup decorView) {
223 this.decorView = decorView;
224 return this;
225 }
226
227 public Builder setBgColor(int Color_Background_Wheel) {
228 this.Color_Background_Wheel = Color_Background_Wheel;
229 return this;
230 }
231
232 public Builder setTitleBgColor(int Color_Background_Title) {
233 this.Color_Background_Title = Color_Background_Title;
234 return this;
235 }
236
237 public Builder setTitleColor(int Color_Title) {
238 this.Color_Title = Color_Title;
239 return this;
240 }
241
242 public Builder setSubCalSize(int Size_Submit_Cancel) {
243 this.Size_Submit_Cancel = Size_Submit_Cancel;
244 return this;
245 }
246
247 public Builder setTitleSize(int Size_Title) {
248 this.Size_Title = Size_Title;
249 return this;
250 }
251
252 public Builder setContentSize(int Size_Content) {
253 this.Size_Content = Size_Content;
254 return this;
255 }
256
257 /**
258 * 因为系统Calendar的月份是从0-11的,所以如果是调用Calendar的set方法来设置时间,月份的范围也要是从0-11
259 *
260 * @param date
261 * @return
262 */
263 public Builder setDate(Calendar date) {
264 this.date = date;
265 return this;
266 }
267
268 public Builder setLayoutRes(int res, CustomListener customListener) {
269 this.layoutRes = res;
270 this.customListener = customListener;
271 return this;
272 }
273
274 public Builder setRange(int startYear, int endYear) {
275 this.startYear = startYear;
276 this.endYear = endYear;
277 return this;
278 }
279
280 /**
281 * 设置起始时间
282 * 因为系统Calendar的月份是从0-11的,所以如果是调用Calendar的set方法来设置时间,月份的范围也要是从0-11
283 *
284 * @return
285 */
286
287 public Builder setRangDate(Calendar startDate, Calendar endDate) {
288 this.startDate = startDate;
289 this.endDate = endDate;
290 return this;
291 }
292
293
294 /**
295 * 设置间距倍数,但是只能在1.2-2.0f之间
296 *
297 * @param lineSpacingMultiplier
298 */
299 public Builder setLineSpacingMultiplier(float lineSpacingMultiplier) {
300 this.lineSpacingMultiplier = lineSpacingMultiplier;
301 return this;
302 }
303
304 /**
305 * 设置分割线的颜色
306 *
307 * @param dividerColor
308 */
309 public Builder setDividerColor(int dividerColor) {
310 this.dividerColor = dividerColor;
311 return this;
312 }
313
314 /**
315 * 设置分割线的类型
316 *
317 * @param dividerType
318 */
319 public Builder setDividerType(WheelView.DividerType dividerType) {
320 this.dividerType = dividerType;
321 return this;
322 }
323
324 /**
325 * //显示时的外部背景色颜色,默认是灰色
326 * @param backgroundId
327 */
328
329 public Builder setBackgroundId(int backgroundId) {
330 this.backgroundId = backgroundId;
331 return this;
332 }
333
334 /**
335 * 设置分割线之间的文字的颜色
336 *
337 * @param textColorCenter
338 */
339 public Builder setTextColorCenter(int textColorCenter) {
340 this.textColorCenter = textColorCenter;
341 return this;
342 }
343
344 /**
345 * 设置分割线以外文字的颜色
346 *
347 * @param textColorOut
348 */
349 public Builder setTextColorOut(int textColorOut) {
350 this.textColorOut = textColorOut;
351 return this;
352 }
353
354 public Builder isCyclic(boolean cyclic) {
355 this.cyclic = cyclic;
356 return this;
357 }
358
359 public Builder setOutSideCancelable(boolean cancelable) {
360 this.cancelable = cancelable;
361 return this;
362 }
363
364 public Builder setLabel(String label_year, String label_month, String label_day, String label_hours, String label_mins, String label_seconds) {
365 this.label_year = label_year;
366 this.label_month = label_month;
367 this.label_day = label_day;
368 this.label_hours = label_hours;
369 this.label_mins = label_mins;
370 this.label_seconds = label_seconds;
371 return this;
372 }
373
374 public Builder isCenterLabel(boolean isCenterLabel) {
375 this.isCenterLabel = isCenterLabel;
376 return this;
377 }
378
379
380 public TimePickerView build() {
381 return new TimePickerView(this);
382 }
383 }
384
385
386 private void initView(Context context) {
387 setDialogOutSideCancelable(cancelable);
388 initViews(backgroundId);
389 init();
390 initEvents();
391 if (customListener == null) {
392 LayoutInflater.from(context).inflate(R.layout.pickerview_time, contentContainer);
393
394 //顶部标题
395 tvTitle = (TextView) findViewById(R.id.tvTitle);
396
397 //确定和取消按钮
398 btnSubmit = (Button) findViewById(R.id.btnSubmit);
399 btnCancel = (Button) findViewById(R.id.btnCancel);
400
401 btnSubmit.setTag(TAG_SUBMIT);
402 btnCancel.setTag(TAG_CANCEL);
403
404 btnSubmit.setOnClickListener(this);
405 btnCancel.setOnClickListener(this);
406
407 //设置文字
408 btnSubmit.setText(TextUtils.isEmpty(Str_Submit) ? context.getResources().getString(R.string.pickerview_submit) : Str_Submit);
409 btnCancel.setText(TextUtils.isEmpty(Str_Cancel) ? context.getResources().getString(R.string.pickerview_cancel) : Str_Cancel);
410 tvTitle.setText(TextUtils.isEmpty(Str_Title) ? "" : Str_Title);//默认为空
411
412 //设置文字颜色
413 btnSubmit.setTextColor(Color_Submit == 0 ? pickerview_timebtn_nor : Color_Submit);
414 btnCancel.setTextColor(Color_Cancel == 0 ? pickerview_timebtn_nor : Color_Cancel);
415 tvTitle.setTextColor(Color_Title == 0 ? pickerview_topbar_title : Color_Title);
416
417 //设置文字大小
418 btnSubmit.setTextSize(Size_Submit_Cancel);
419 btnCancel.setTextSize(Size_Submit_Cancel);
420 tvTitle.setTextSize(Size_Title);
421 RelativeLayout rv_top_bar = (RelativeLayout) findViewById(R.id.rv_topbar);
422 rv_top_bar.setBackgroundColor(Color_Background_Title == 0 ? pickerview_bg_topbar : Color_Background_Title);
423 } else {
424 customListener.customLayout(LayoutInflater.from(context).inflate(layoutRes, contentContainer));
425 }
426 // 时间转轮 自定义控件
427 LinearLayout timePickerView = (LinearLayout) findViewById(R.id.timepicker);
428
429 timePickerView.setBackgroundColor(Color_Background_Wheel == 0 ? bgColor_default : Color_Background_Wheel);
430
431 wheelTime = new WheelTime(timePickerView, type, gravity, Size_Content);
432
433 if (startYear != 0 && endYear != 0 && startYear <= endYear) {
434 setRange();
435 }
436
437 if (startDate != null && endDate != null) {
438 if (startDate.getTimeInMillis() <= endDate.getTimeInMillis()) {
439 setRangDate();
440 }
441 } else if (startDate != null && endDate == null) {
442 setRangDate();
443 } else if (startDate == null && endDate != null) {
444 setRangDate();
445 }
446
447 setTime();
448 wheelTime.setLabels(label_year, label_month, label_day, label_hours, label_mins, label_seconds);
449
450 setOutSideCancelable(cancelable);
451 wheelTime.setCyclic(cyclic);
452 wheelTime.setDividerColor(dividerColor);
453 wheelTime.setDividerType(dividerType);
454 wheelTime.setLineSpacingMultiplier(lineSpacingMultiplier);
455 wheelTime.setTextColorOut(textColorOut);
456 wheelTime.setTextColorCenter(textColorCenter);
457 wheelTime.isCenterLabel(isCenterLabel);
458 }
459
460
461 /**
462 * 设置默认时间
463 */
464 public void setDate(Calendar date) {
465 this.date = date;
466 setTime();
467 }
468
469 /**
470 * 设置可以选择的时间范围, 要在setTime之前调用才有效果
471 */
472 private void setRange() {
473 wheelTime.setStartYear(startYear);
474 wheelTime.setEndYear(endYear);
475
476 }
477
478 /**
479 * 设置可以选择的时间范围, 要在setTime之前调用才有效果
480 */
481 private void setRangDate() {
482 wheelTime.setRangDate(startDate, endDate);
483 //如果设置了时间范围
484 if (startDate != null && endDate != null) {
485 //判断一下默认时间是否设置了,或者是否在起始终止时间范围内
486 if (date == null || date.getTimeInMillis() < startDate.getTimeInMillis()
487 || date.getTimeInMillis() > endDate.getTimeInMillis()) {
488 date = startDate;
489 }
490 } else if (startDate != null) {
491 //没有设置默认选中时间,那就拿开始时间当默认时间
492 date = startDate;
493 } else if (endDate != null) {
494 date = endDate;
495 }
496 }
497
498 /**
499 * 设置选中时间,默认选中当前时间
500 */
501 private void setTime() {
502 int year, month, day, hours, minute, seconds;
503
504 Calendar calendar = Calendar.getInstance();
505 if (date == null) {
506 calendar.setTimeInMillis(System.currentTimeMillis());
507 year = calendar.get(Calendar.YEAR);
508 month = calendar.get(Calendar.MONTH);
509 day = calendar.get(Calendar.DAY_OF_MONTH);
510 hours = calendar.get(Calendar.HOUR_OF_DAY);
511 minute = calendar.get(Calendar.MINUTE);
512 seconds = calendar.get(Calendar.SECOND);
513 } else {
514 year = date.get(Calendar.YEAR);
515 month = date.get(Calendar.MONTH);
516 day = date.get(Calendar.DAY_OF_MONTH);
517 hours = date.get(Calendar.HOUR_OF_DAY);
518 minute = date.get(Calendar.MINUTE);
519 seconds = date.get(Calendar.SECOND);
520 }
521
522
523 wheelTime.setPicker(year, month, day, hours, minute, seconds);
524 }
525
526
527 @Override
528 public void onClick(View v) {
529 String tag = (String) v.getTag();
530 if (tag.equals(TAG_SUBMIT)) {
531 returnData();
532 }
533 dismiss();
534 }
535
536 public void returnData() {
537 if (timeSelectListener != null) {
538 try {
539 Date date = WheelTime.dateFormat.parse(wheelTime.getTime());
540 timeSelectListener.onTimeSelect(date, clickView);
541 } catch (ParseException e) {
542 e.printStackTrace();
543 }
544 }
545 }
546
547 public interface OnTimeSelectListener {
548 void onTimeSelect(Date date, View v);
549 }
550
551 @Override
552 public boolean isDialog() {
553 return isDialog;
554 }
555 }
556
PersonalCenter/pickerview/src/main/java/com/bigkoo/pickerview/adapter/ArrayWheelAdapter.java
File was created 1 package com.bigkoo.pickerview.adapter;
2
3 import java.util.List;
4
5 /**
6 * The simple Array wheel adapter
7 * @param <T> the element type
8 */
9 public class ArrayWheelAdapter<T> implements WheelAdapter {
10
11 /** The default items length */
12 public static final int DEFAULT_LENGTH = 4;
13
14 // items
15 private List<T> items;
16 // length
17 private int length;
18
19 /**
20 * Constructor
21 * @param items the items
22 * @param length the max items length
23 */
24 public ArrayWheelAdapter(List<T> items, int length) {
25 this.items = items;
26 this.length = length;
27 }
28
29 /**
30 * Contructor
31 * @param items the items
32 */
33 public ArrayWheelAdapter(List<T> items) {
34 this(items, DEFAULT_LENGTH);
35 }
36
37 @Override
38 public Object getItem(int index) {
39 if (index >= 0 && index < items.size()) {
40 return items.get(index);
41 }
42 return "";
43 }
44
45 @Override
46 public int getItemsCount() {
47 return items.size();
48 }
49
50 @Override
51 public int indexOf(Object o){
52 return items.indexOf(o);
53 }
54
55 }
56
PersonalCenter/pickerview/src/main/java/com/bigkoo/pickerview/adapter/NumericWheelAdapter.java
File was created 1 package com.bigkoo.pickerview.adapter;
2
3
4 /**
5 * Numeric Wheel adapter.
6 */
7 public class NumericWheelAdapter implements WheelAdapter {
8
9 /** The default min value */
10 public static final int DEFAULT_MAX_VALUE = 9;
11
12 /** The default max value */
13 private static final int DEFAULT_MIN_VALUE = 0;
14
15 // Values
16 private int minValue;
17 private int maxValue;
18
19 /**
20 * Default constructor
21 */
22 public NumericWheelAdapter() {
23 this(DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE);
24 }
25
26 /**
27 * Constructor
28 * @param minValue the wheel min value
29 * @param maxValue the wheel max value
30 */
31 public NumericWheelAdapter(int minValue, int maxValue) {
32 this.minValue = minValue;
33 this.maxValue = maxValue;
34 }
35
36 @Override
37 public Object getItem(int index) {
38 if (index >= 0 && index < getItemsCount()) {
39 int value = minValue + index;
40 return value;
41 }
42 return 0;
43 }
44
45 @Override
46 public int getItemsCount() {
47 return maxValue - minValue + 1;
48 }
49
50 @Override
51 public int indexOf(Object o){
52 try {
53 return (int)o - minValue;
54 } catch (Exception e) {
55 return -1;
56 }
57
58 }
59 }
60
PersonalCenter/pickerview/src/main/java/com/bigkoo/pickerview/adapter/WheelAdapter.java
File was created 1 package com.bigkoo.pickerview.adapter;
2
3 public interface WheelAdapter<T> {
4 /**
5 * Gets items count
6 * @return the count of wheel items
7 */
8 int getItemsCount();
9
10 /**
11 * Gets a wheel item by index.
12 * @param index the item index
13 * @return the wheel item text or null
14 */
15 T getItem(int index);
16
17 /**
18 * Gets maximum item length. It is used to determine the wheel width.
19 * If -1 is returned there will be used the default wheel width.
20 * @param o
21 * @return the maximum item length or -1
22 */
23 int indexOf(T o);
24 }
25
PersonalCenter/pickerview/src/main/java/com/bigkoo/pickerview/lib/InertiaTimerTask.java
File was created 1 package com.bigkoo.pickerview.lib;
2
3 import java.util.TimerTask;
4 /**
5 * @TODO<滚动惯性的实现>
6 * @author 小嵩
7 */
8 final class InertiaTimerTask extends TimerTask {
9
10 float a;
11 final float velocityY;
12 final WheelView loopView;
13
14 InertiaTimerTask(WheelView loopview, float velocityY) {
15 super();
16 loopView = loopview;
17 this.velocityY = velocityY;
18 a = Integer.MAX_VALUE;
19 }
20
21 @Override
22 public final void run() {
23 if (a == Integer.MAX_VALUE) {
24 if (Math.abs(velocityY) > 2000F) {
25 if (velocityY > 0.0F) {
26 a = 2000F;
27 } else {
28 a = -2000F;
29 }
30 } else {
31 a = velocityY;
32 }
33 }
34 if (Math.abs(a) >= 0.0F && Math.abs(a) <= 20F) {
35 loopView.cancelFuture();
36 loopView.handler.sendEmptyMessage(MessageHandler.WHAT_SMOOTH_SCROLL);
37 return;
38 }
39 int i = (int) ((a * 10F) / 1000F);
40 loopView.totalScrollY = loopView.totalScrollY - i;
41 if (!loopView.isLoop) {
42 float itemHeight = loopView.itemHeight;
43 float top = (-loopView.initPosition) * itemHeight;
44 float bottom = (loopView.getItemsCount() - 1 - loopView.initPosition) * itemHeight;
45 if(loopView.totalScrollY - itemHeight*0.25 < top){
46 top = loopView.totalScrollY + i;
47 }
48 else if(loopView.totalScrollY + itemHeight*0.25 > bottom){
49 bottom = loopView.totalScrollY + i;
50 }
51
52 if (loopView.totalScrollY <= top){
53 a = 40F;
54 loopView.totalScrollY = (int)top;
55 } else if (loopView.totalScrollY >= bottom) {
56 loopView.totalScrollY = (int)bottom;
57 a = -40F;
58 }
59 }
60 if (a < 0.0F) {
61 a = a + 20F;
62 } else {
63 a = a - 20F;
64 }
65 loopView.handler.sendEmptyMessage(MessageHandler.WHAT_INVALIDATE_LOOP_VIEW);
66 }
67
68 }
69
PersonalCenter/pickerview/src/main/java/com/bigkoo/pickerview/lib/LoopViewGestureListener.java
File was created 1 package com.bigkoo.pickerview.lib;
2
3 import android.view.MotionEvent;
4
5 final class LoopViewGestureListener extends android.view.GestureDetector.SimpleOnGestureListener {
6
7 final WheelView loopView;
8
9 LoopViewGestureListener(WheelView loopview) {
10 loopView = loopview;
11 }
12
13 @Override
14 public final boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
15 loopView.scrollBy(velocityY);
16 return true;
17 }
18 }
19
PersonalCenter/pickerview/src/main/java/com/bigkoo/pickerview/lib/MessageHandler.java
File was created 1 package com.bigkoo.pickerview.lib;
2
3 import android.os.Handler;
4 import android.os.Message;
5
6 final class MessageHandler extends Handler {
7 public static final int WHAT_INVALIDATE_LOOP_VIEW = 1000;
8 public static final int WHAT_SMOOTH_SCROLL = 2000;
9 public static final int WHAT_ITEM_SELECTED = 3000;
10
11 final WheelView loopview;
12
13 MessageHandler(WheelView loopview) {
14 this.loopview = loopview;
15 }
16
17 @Override
18 public final void handleMessage(Message msg) {
19 switch (msg.what) {
20 case WHAT_INVALIDATE_LOOP_VIEW:
21 loopview.invalidate();
22 break;
23
24 case WHAT_SMOOTH_SCROLL:
25 loopview.smoothScroll(WheelView.ACTION.FLING);
26 break;
27
28 case WHAT_ITEM_SELECTED:
29 loopview.onItemSelected();
30 break;
31 }
32 }
33
34 }
35
PersonalCenter/pickerview/src/main/java/com/bigkoo/pickerview/lib/OnItemSelectedRunnable.java
File was created 1 package com.bigkoo.pickerview.lib;
2
3 final class OnItemSelectedRunnable implements Runnable {
4 final WheelView loopView;
5
6 OnItemSelectedRunnable(WheelView loopview) {
7 loopView = loopview;
8 }
9
10 @Override
11 public final void run() {
12 loopView.onItemSelectedListener.onItemSelected(loopView.getCurrentItem());
13 }
14 }
15
PersonalCenter/pickerview/src/main/java/com/bigkoo/pickerview/lib/SmoothScrollTimerTask.java
File was created 1 package com.bigkoo.pickerview.lib;
2
3 import java.util.TimerTask;
4
5 /**
6 * @TODO<平滑滚动的实现>
7 * @author 小嵩
8 */
9 final class SmoothScrollTimerTask extends TimerTask {
10
11 int realTotalOffset;
12 int realOffset;
13 int offset;
14 final WheelView loopView;
15
16 SmoothScrollTimerTask(WheelView loopview, int offset) {
17 this.loopView = loopview;
18 this.offset = offset;
19 realTotalOffset = Integer.MAX_VALUE;
20 realOffset = 0;
21 }
22
23 @Override
24 public final void run() {
25 if (realTotalOffset == Integer.MAX_VALUE) {
26 realTotalOffset = offset;
27 }
28 //把要滚动的范围细分成10小份,按10小份单位来重绘
29 realOffset = (int) ((float) realTotalOffset * 0.1F);
30
31 if (realOffset == 0) {
32 if (realTotalOffset < 0) {
33 realOffset = -1;
34 } else {
35 realOffset = 1;
36 }
37 }
38
39 if (Math.abs(realTotalOffset) <= 1) {
40 loopView.cancelFuture();
41 loopView.handler.sendEmptyMessage(MessageHandler.WHAT_ITEM_SELECTED);
42 } else {
43 loopView.totalScrollY = loopView.totalScrollY + realOffset;
44
45 //这里如果不是循环模式,则点击空白位置需要回滚,不然就会出现选到-1 item的 情况
46 if (!loopView.isLoop) {
47 float itemHeight = loopView.itemHeight;
48 float top = (float) (-loopView.initPosition) * itemHeight;
49 float bottom = (float) (loopView.getItemsCount() - 1 - loopView.initPosition) * itemHeight;
50 if (loopView.totalScrollY <= top||loopView.totalScrollY >= bottom) {
51 loopView.totalScrollY = loopView.totalScrollY - realOffset;
52 loopView.cancelFuture();
53 loopView.handler.sendEmptyMessage(MessageHandler.WHAT_ITEM_SELECTED);
54 return;
55 }
56 }
57 loopView.handler.sendEmptyMessage(MessageHandler.WHAT_INVALIDATE_LOOP_VIEW);
58 realTotalOffset = realTotalOffset - realOffset;
59 }
60 }
61 }
62
PersonalCenter/pickerview/src/main/java/com/bigkoo/pickerview/lib/WheelView.java
File was created 1 package com.bigkoo.pickerview.lib;
2
3 import android.content.Context;
4 import android.content.res.TypedArray;
5 import android.graphics.Canvas;
6 import android.graphics.Paint;
7 import android.graphics.Rect;
8 import android.graphics.Typeface;
9 import android.os.Handler;
10 import android.text.TextUtils;
11 import android.util.AttributeSet;
12 import android.util.DisplayMetrics;
13 import android.util.Log;
14 import android.view.GestureDetector;
15 import android.view.Gravity;
16 import android.view.MotionEvent;
17 import android.view.View;
18
19 import com.bigkoo.pickerview.R;
20 import com.bigkoo.pickerview.adapter.WheelAdapter;
21 import com.bigkoo.pickerview.listener.OnItemSelectedListener;
22 import com.bigkoo.pickerview.model.IPickerViewData;
23
24 import java.util.Locale;
25 import java.util.concurrent.Executors;
26 import java.util.concurrent.ScheduledExecutorService;
27 import java.util.concurrent.ScheduledFuture;
28 import java.util.concurrent.TimeUnit;
29
30 /**
31 * 3d滚轮控件
32 */
33 public class WheelView extends View {
34
35 public enum ACTION { // 点击,滑翔(滑到尽头),拖拽事件
36 CLICK, FLING, DAGGLE
37 }
38 public enum DividerType { // 分隔线类型
39 FILL, WRAP
40 }
41
42 private DividerType dividerType;//分隔线类型
43
44 Context context;
45
46 Handler handler;
47 private GestureDetector gestureDetector;
48 OnItemSelectedListener onItemSelectedListener;
49
50 private boolean isOptions = false;
51 private boolean isCenterLabel = true;
52
53 // Timer mTimer;
54 ScheduledExecutorService mExecutor = Executors.newSingleThreadScheduledExecutor();
55 private ScheduledFuture<?> mFuture;
56
57 Paint paintOuterText;
58 Paint paintCenterText;
59 Paint paintIndicator;
60
61 WheelAdapter adapter;
62
63 private String label;//附加单位
64 int textSize;//选项的文字大小
65 int maxTextWidth;
66 int maxTextHeight;
67 float itemHeight;//每行高度
68
69 Typeface typeface = Typeface.MONOSPACE;//字体样式,默认是等宽字体
70
71 int textColorOut = 0xFFa8a8a8;
72 int textColorCenter = 0xFF2a2a2a;
73 int dividerColor = 0xFFd5d5d5;
74
75 // 条目间距倍数
76 float lineSpacingMultiplier = 1.6F;
77 boolean isLoop;
78
79 // 第一条线Y坐标值
80 float firstLineY;
81 //第二条线Y坐标
82 float secondLineY;
83 //中间label绘制的Y坐标
84 float centerY;
85
86 //滚动总高度y值
87 float totalScrollY;
88 //初始化默认选中项
89 int initPosition;
90 //选中的Item是第几个
91 private int selectedItem;
92 int preCurrentIndex;
93 //滚动偏移值,用于记录滚动了多少个item
94 int change;
95
96 // 绘制几个条目,实际上第一项和最后一项Y轴压缩成0%了,所以可见的数目实际为9
97 int itemsVisible = 11;
98
99 int measuredHeight;// WheelView 控件高度
100 int measuredWidth;// WheelView 控件宽度
101
102 // 半圆周长
103 int halfCircumference;
104 // 半径
105 int radius;
106
107 private int mOffset = 0;
108 private float previousY = 0;
109 long startTime = 0;
110
111 // 修改这个值可以改变滑行速度
112 private static final int VELOCITYFLING = 5;
113 int widthMeasureSpec;
114
115 private int mGravity = Gravity.CENTER;
116 private int drawCenterContentStart = 0;//中间选中文字开始绘制位置
117 private int drawOutContentStart = 0;//非中间文字开始绘制位置
118 private static final float SCALECONTENT = 0.8F;//非中间文字则用此控制高度,压扁形成3d错觉
119 private float CENTERCONTENTOFFSET ;//偏移量
120
121 public WheelView(Context context) {
122 this(context, null);
123 }
124
125 public WheelView(Context context, AttributeSet attrs) {
126 super(context, attrs);
127 /* textColorOut = getResources().getColor(R.color.pickerview_wheelview_textcolor_out);
128 textColorCenter =getResources().getColor(R.color.pickerview_wheelview_textcolor_center);
129 dividerColor = getResources().getColor(R.color.pickerview_wheelview_textcolor_out);*/
130
131 textSize = getResources().getDimensionPixelSize(R.dimen.pickerview_textsize);//默认大小
132
133 DisplayMetrics dm = getResources().getDisplayMetrics();
134 float density = dm.density; // 屏幕密度(0.75/1.0/1.5/2.0/3.0)
135
136 if (density<1){//根据密度不同进行适配
137 CENTERCONTENTOFFSET=2.4F;
138 }else if (1<=density&&density<2){
139 CENTERCONTENTOFFSET = 3.6F;
140 }else if (1<=density&&density<2){
141 CENTERCONTENTOFFSET = 4.5F;
142 }else if (2<=density&&density<3){
143 CENTERCONTENTOFFSET = 6.0F;
144 }else if (density>=3){
145 CENTERCONTENTOFFSET= density * 2.5F;
146 }
147
148
149 if (attrs != null) {
150 TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.pickerview, 0, 0);
151 mGravity = a.getInt(R.styleable.pickerview_pickerview_gravity, Gravity.CENTER);
152 textColorOut = a.getColor(R.styleable.pickerview_pickerview_textColorOut, textColorOut);
153 textColorCenter = a.getColor(R.styleable.pickerview_pickerview_textColorCenter, textColorCenter);
154 dividerColor = a.getColor(R.styleable.pickerview_pickerview_dividerColor, dividerColor);
155 textSize = a.getDimensionPixelOffset(R.styleable.pickerview_pickerview_textSize, textSize);
156 lineSpacingMultiplier = a.getFloat(R.styleable.pickerview_pickerview_lineSpacingMultiplier, lineSpacingMultiplier);
157 a.recycle();//回收内存
158 }
159
160 judgeLineSpae();
161
162 initLoopView(context);
163 }
164
165 /**
166 * 判断间距是否在1.0-2.0之间
167 */
168 private void judgeLineSpae() {
169 if (lineSpacingMultiplier < 1.2f) {
170 lineSpacingMultiplier = 1.2f;
171 } else if (lineSpacingMultiplier > 2.0f) {
172 lineSpacingMultiplier = 2.0f;
173 }
174 }
175
176 private void initLoopView(Context context) {
177 this.context = context;
178 handler = new MessageHandler(this);
179 gestureDetector = new GestureDetector(context, new LoopViewGestureListener(this));
180 gestureDetector.setIsLongpressEnabled(false);
181
182 isLoop = true;
183
184 totalScrollY = 0;
185 initPosition = -1;
186
187 initPaints();
188
189 }
190
191 private void initPaints() {
192 paintOuterText = new Paint();
193 paintOuterText.setColor(textColorOut);
194 paintOuterText.setAntiAlias(true);
195 paintOuterText.setTypeface(typeface);
196 paintOuterText.setTextSize(textSize);
197
198 paintCenterText = new Paint();
199 paintCenterText.setColor(textColorCenter);
200 paintCenterText.setAntiAlias(true);
201 paintCenterText.setTextScaleX(1.1F);
202 paintCenterText.setTypeface(typeface);
203 paintCenterText.setTextSize(textSize);
204
205
206 paintIndicator = new Paint();
207 paintIndicator.setColor(dividerColor);
208 paintIndicator.setAntiAlias(true);
209
210 if (android.os.Build.VERSION.SDK_INT >= 11) {
211 setLayerType(LAYER_TYPE_SOFTWARE, null);
212 }
213 }
214
215 private void remeasure() {//重新测量
216 if (adapter == null) {
217 return;
218 }
219
220 measureTextWidthHeight();
221
222 //半圆的周长 = item高度乘以item数目-1
223 halfCircumference = (int) (itemHeight * (itemsVisible - 1));
224 //整个圆的周长除以PI得到直径,这个直径用作控件的总高度
225 measuredHeight = (int) ((halfCircumference * 2) / Math.PI);
226 //求出半径
227 radius = (int) (halfCircumference / Math.PI);
228 //控件宽度,这里支持weight
229 measuredWidth = MeasureSpec.getSize(widthMeasureSpec);
230 //计算两条横线 和 选中项画笔的基线Y位置
231 firstLineY = (measuredHeight - itemHeight) / 2.0F;
232 secondLineY = (measuredHeight + itemHeight) / 2.0F;
233 centerY = secondLineY - (itemHeight-maxTextHeight)/2.0f - CENTERCONTENTOFFSET;
234
235 //初始化显示的item的position
236 if (initPosition == -1) {
237 if (isLoop) {
238 initPosition = (adapter.getItemsCount() + 1) / 2;
239 } else {
240 initPosition = 0;
241 }
242 }
243 preCurrentIndex = initPosition;
244 }
245
246 /**
247 * 计算最大length的Text的宽高度
248 */
249 private void measureTextWidthHeight() {
250 Rect rect = new Rect();
251 for (int i = 0; i < adapter.getItemsCount(); i++) {
252 String s1 = getContentText(adapter.getItem(i));
253 paintCenterText.getTextBounds(s1, 0, s1.length(), rect);
254
255 int textWidth = rect.width();
256
257 if (textWidth > maxTextWidth) {
258 maxTextWidth = textWidth;
259 }
260 paintCenterText.getTextBounds("\u661F\u671F", 0, 2, rect); // 星期的字符编码(以它为标准高度)
261
262 maxTextHeight = rect.height() + 2;
263
264 }
265 itemHeight = lineSpacingMultiplier * maxTextHeight;
266 }
267
268 void smoothScroll(ACTION action) {//平滑滚动的实现
269 cancelFuture();
270 if (action == ACTION.FLING || action == ACTION.DAGGLE) {
271 mOffset = (int) ((totalScrollY % itemHeight + itemHeight) % itemHeight);
272 if ((float) mOffset > itemHeight / 2.0F) {//如果超过Item高度的一半,滚动到下一个Item去
273 mOffset = (int) (itemHeight - (float) mOffset);
274 } else {
275 mOffset = -mOffset;
276 }
277 }
278 //停止的时候,位置有偏移,不是全部都能正确停止到中间位置的,这里把文字位置挪回中间去
279 mFuture = mExecutor.scheduleWithFixedDelay(new SmoothScrollTimerTask(this, mOffset), 0, 10, TimeUnit.MILLISECONDS);
280 }
281
282 protected final void scrollBy(float velocityY) {//滚动惯性的实现
283 cancelFuture();
284 mFuture = mExecutor.scheduleWithFixedDelay(new InertiaTimerTask(this, velocityY), 0, VELOCITYFLING, TimeUnit.MILLISECONDS);
285 }
286
287 public void cancelFuture() {
288 if (mFuture != null && !mFuture.isCancelled()) {
289 mFuture.cancel(true);
290 mFuture = null;
291 }
292 }
293
294 /**
295 * 设置是否循环滚动
296 *
297 * @param cyclic 是否循环
298 */
299 public final void setCyclic(boolean cyclic) {
300 isLoop = cyclic;
301 }
302
303 public final void setTypeface(Typeface font) {
304 typeface = font;
305 paintOuterText.setTypeface(typeface);
306 paintCenterText.setTypeface(typeface);
307 }
308
309 public final void setTextSize(float size) {
310 if (size > 0.0F ) {
311 textSize = (int) (context.getResources().getDisplayMetrics().density * size);
312 paintOuterText.setTextSize(textSize);
313 paintCenterText.setTextSize(textSize);
314 }
315 }
316
317 public final void setCurrentItem(int currentItem) {
318 //不添加这句,当这个wheelview不可见时,默认都是0,会导致获取到的时间错误
319 this.selectedItem = currentItem;
320 this.initPosition = currentItem;
321 totalScrollY = 0;//回归顶部,不然重设setCurrentItem的话位置会偏移的,就会显示出不对位置的数据
322 invalidate();
323 }
324
325 public final void setOnItemSelectedListener(OnItemSelectedListener OnItemSelectedListener) {
326 this.onItemSelectedListener = OnItemSelectedListener;
327 }
328
329 public final void setAdapter(WheelAdapter adapter) {
330 this.adapter = adapter;
331 remeasure();
332 invalidate();
333 }
334
335 public final WheelAdapter getAdapter() {
336 return adapter;
337 }
338
339 public final int getCurrentItem() {
340 return selectedItem;
341 }
342
343 protected final void onItemSelected() {
344 if (onItemSelectedListener != null) {
345 postDelayed(new OnItemSelectedRunnable(this), 200L);
346 }
347 }
348
349 @Override
350 protected void onDraw(Canvas canvas) {
351 if (adapter == null) {
352 return;
353 }
354 //initPosition越界会造成preCurrentIndex的值不正确
355 if(initPosition<0)
356 {
357 initPosition = 0;
358 }
359 if(initPosition>=adapter.getItemsCount())
360 {
361 initPosition = adapter.getItemsCount()-1;
362 }
363 //可见的item数组
364 Object visibles[] = new Object[itemsVisible];
365 //滚动的Y值高度除去每行Item的高度,得到滚动了多少个item,即change数
366 change = (int)(totalScrollY / itemHeight);
367
368 try {
369 //滚动中实际的预选中的item(即经过了中间位置的item) = 滑动前的位置 + 滑动相对位置
370 preCurrentIndex = initPosition + change % adapter.getItemsCount();
371
372 } catch (ArithmeticException e) {
373 Log.e("WheelView","出错了!adapter.getItemsCount() == 0,联动数据不匹配");
374 }
375 if (!isLoop) {//不循环的情况
376 if (preCurrentIndex < 0) {
377 preCurrentIndex = 0;
378 }
379 if (preCurrentIndex > adapter.getItemsCount() - 1) {
380 preCurrentIndex = adapter.getItemsCount() - 1;
381 }
382 } else {//循环
383 if (preCurrentIndex < 0) {//举个例子:如果总数是5,preCurrentIndex = -1,那么preCurrentIndex按循环来说,其实是0的上面,也就是4的位置
384 preCurrentIndex = adapter.getItemsCount() + preCurrentIndex;
385 }
386 if (preCurrentIndex > adapter.getItemsCount() - 1) {//同理上面,自己脑补一下
387 preCurrentIndex = preCurrentIndex - adapter.getItemsCount();
388 }
389 }
390 //跟滚动流畅度有关,总滑动距离与每个item高度取余,即并不是一格格的滚动,每个item不一定滚到对应Rect里的,这个item对应格子的偏移值
391 float itemHeightOffset = (totalScrollY % itemHeight);
392
393 // 设置数组中每个元素的值
394 int counter = 0;
395 while (counter < itemsVisible) {
396 int index = preCurrentIndex - (itemsVisible / 2 - counter);//索引值,即当前在控件中间的item看作数据源的中间,计算出相对源数据源的index值
397 //判断是否循环,如果是循环数据源也使用相对循环的position获取对应的item值,如果不是循环则超出数据源范围使用""空白字符串填充,在界面上形成空白无数据的item项
398 if (isLoop) {
399 index = getLoopMappingIndex(index);
400 visibles[counter] = adapter.getItem(index);
401 } else if (index < 0) {
402 visibles[counter] = "";
403 } else if (index > adapter.getItemsCount() - 1) {
404 visibles[counter] = "";
405 } else {
406 visibles[counter] = adapter.getItem(index);
407 }
408
409 counter++;
410
411 }
412
413 //绘制中间两条横线
414 if (dividerType == DividerType.WRAP){//横线长度仅包裹内容
415 float startX;
416 float endX;
417
418 if (TextUtils.isEmpty(label)){//隐藏Label的情况
419 startX = (measuredWidth - maxTextWidth)/2 - 12;
420 }else {
421 startX = (measuredWidth - maxTextWidth)/4 - 12;
422 }
423
424 if (startX<=0){//如果超过了WheelView的边缘
425 startX = 10;
426 }
427 endX = measuredWidth - startX;
428 canvas.drawLine(startX, firstLineY, endX, firstLineY, paintIndicator);
429 canvas.drawLine(startX, secondLineY, endX, secondLineY, paintIndicator);
430 }else {
431 canvas.drawLine(0.0F, firstLineY, measuredWidth, firstLineY, paintIndicator);
432 canvas.drawLine(0.0F, secondLineY, measuredWidth, secondLineY, paintIndicator);
433 }
434
435 //只显示选中项Label文字的模式,并且Label文字不为空,则进行绘制
436 if (!TextUtils.isEmpty(label)&& isCenterLabel) {
437 //绘制文字,靠右并留出空隙
438 int drawRightContentStart = measuredWidth - getTextWidth(paintCenterText, label);
439 canvas.drawText(label, drawRightContentStart - CENTERCONTENTOFFSET, centerY, paintCenterText);
440 }
441
442 counter = 0;
443 while (counter < itemsVisible) {
444 canvas.save();
445 // 弧长 L = itemHeight * counter - itemHeightOffset
446 // 求弧度 α = L / r (弧长/半径) [0,π]
447 double radian = ((itemHeight * counter - itemHeightOffset)) / radius;
448 // 弧度转换成角度(把半圆以Y轴为轴心向右转90度,使其处于第一象限及第四象限
449 // angle [-90°,90°]
450 float angle = (float) (90D - (radian / Math.PI) * 180D);//item第一项,从90度开始,逐渐递减到 -90度
451
452 // 计算取值可能有细微偏差,保证负90°到90°以外的不绘制
453 if (angle >= 90F || angle <= -90F) {
454 canvas.restore();
455 } else {
456 //获取内容文字
457 String contentText;
458
459 //如果是label每项都显示的模式,并且item内容不为空、label 也不为空
460 if(!isCenterLabel&&!TextUtils.isEmpty(label) &&!TextUtils.isEmpty(getContentText(visibles[counter]))){
461 contentText = getContentText(visibles[counter])+label;
462 }else {
463 contentText = getContentText(visibles[counter]);
464 }
465
466 reMeasureTextSize(contentText);
467 //计算开始绘制的位置
468 measuredCenterContentStart(contentText);
469 measuredOutContentStart(contentText);
470 float translateY = (float) (radius - Math.cos(radian) * radius - (Math.sin(radian) * maxTextHeight) / 2D);
471 //根据Math.sin(radian)来更改canvas坐标系原点,然后缩放画布,使得文字高度进行缩放,形成弧形3d视觉差
472 canvas.translate(0.0F, translateY);
473 canvas.scale(1.0F, (float) Math.sin(radian));
474 if (translateY <= firstLineY && maxTextHeight + translateY >= firstLineY) {
475 // 条目经过第一条线
476 canvas.save();
477 canvas.clipRect(0, 0, measuredWidth, firstLineY - translateY);
478 canvas.scale(1.0F, (float) Math.sin(radian) * SCALECONTENT);
479 canvas.drawText(contentText, drawOutContentStart, maxTextHeight, paintOuterText);
480 canvas.restore();
481 canvas.save();
482 canvas.clipRect(0, firstLineY - translateY, measuredWidth, (int) (itemHeight));
483 canvas.scale(1.0F, (float) Math.sin(radian) * 1.0F);
484 canvas.drawText(contentText, drawCenterContentStart, maxTextHeight - CENTERCONTENTOFFSET, paintCenterText);
485 canvas.restore();
486 } else if (translateY <= secondLineY && maxTextHeight + translateY >= secondLineY) {
487 // 条目经过第二条线
488 canvas.save();
489 canvas.clipRect(0, 0, measuredWidth, secondLineY - translateY);
490 canvas.scale(1.0F, (float) Math.sin(radian) * 1.0F);
491 canvas.drawText(contentText, drawCenterContentStart, maxTextHeight - CENTERCONTENTOFFSET, paintCenterText);
492 canvas.restore();
493 canvas.save();
494 canvas.clipRect(0, secondLineY - translateY, measuredWidth, (int) (itemHeight));
495 canvas.scale(1.0F, (float) Math.sin(radian) * SCALECONTENT);
496 canvas.drawText(contentText, drawOutContentStart, maxTextHeight, paintOuterText);
497 canvas.restore();
498 } else if (translateY >= firstLineY && maxTextHeight + translateY <= secondLineY) {
499 // 中间条目
500 //canvas.clipRect(0, 0, measuredWidth, maxTextHeight);
501 //让文字居中
502 float Y = maxTextHeight - CENTERCONTENTOFFSET;//因为圆弧角换算的向下取值,导致角度稍微有点偏差,加上画笔的基线会偏上,因此需要偏移量修正一下
503 canvas.drawText(contentText, drawCenterContentStart, Y, paintCenterText);
504
505 int preSelectedItem = adapter.indexOf(visibles[counter]);
506
507 selectedItem = preSelectedItem;
508
509 } else {
510 // 其他条目
511 canvas.save();
512 canvas.clipRect(0, 0, measuredWidth, (int) (itemHeight));
513 canvas.scale(1.0F, (float) Math.sin(radian) * SCALECONTENT);
514 canvas.drawText(contentText, drawOutContentStart, maxTextHeight, paintOuterText);
515 canvas.restore();
516 }
517 canvas.restore();
518 paintCenterText.setTextSize(textSize);
519 }
520 counter++;
521 }
522 }
523
524 /**
525 * 根据文字的长度 重新设置文字的大小 让其能完全显示
526 * @param contentText
527 */
528 private void reMeasureTextSize(String contentText) {
529 Rect rect = new Rect();
530 paintCenterText.getTextBounds(contentText, 0, contentText.length(), rect);
531 int width = rect.width();
532 int size = textSize;
533 while (width > measuredWidth) {
534 size--;
535 //设置2条横线中间的文字大小
536 paintCenterText.setTextSize(size);
537 paintCenterText.getTextBounds(contentText, 0, contentText.length(), rect);
538 width = rect.width();
539 }
540 //设置2条横线外面的文字大小
541 paintOuterText.setTextSize(size);
542 }
543
544
545 //递归计算出对应的index
546 private int getLoopMappingIndex(int index) {
547 if (index < 0) {
548 index = index + adapter.getItemsCount();
549 index = getLoopMappingIndex(index);
550 } else if (index > adapter.getItemsCount() - 1) {
551 index = index - adapter.getItemsCount();
552 index = getLoopMappingIndex(index);
553 }
554 return index;
555 }
556
557 /**
558 * 根据传进来的对象获取getPickerViewText()方法,来获取需要显示的值
559 *
560 * @param item 数据源的item
561 * @return 对应显示的字符串
562 */
563 private String getContentText(Object item) {
564 if (item == null) {
565 return "";
566 } else if (item instanceof IPickerViewData) {
567 return ((IPickerViewData) item).getPickerViewText();
568 } else if (item instanceof Integer) {
569 //如果为整形则最少保留两位数.
570 return String.format(Locale.getDefault(), "%02d", (int) item);
571 }
572 return item.toString();
573 }
574
575 private void measuredCenterContentStart(String content) {
576 Rect rect = new Rect();
577 paintCenterText.getTextBounds(content, 0, content.length(), rect);
578 switch (mGravity) {
579 case Gravity.CENTER://显示内容居中
580 if (isOptions||label == null|| label.equals("")||!isCenterLabel) {
581 drawCenterContentStart = (int) ((measuredWidth - rect.width()) * 0.5);
582 } else {//只显示中间label时,时间选择器内容偏左一点,留出空间绘制单位标签
583 drawCenterContentStart = (int) ((measuredWidth - rect.width()) * 0.25);
584 }
585 break;
586 case Gravity.LEFT:
587 drawCenterContentStart = 0;
588 break;
589 case Gravity.RIGHT://添加偏移量
590 drawCenterContentStart = measuredWidth - rect.width() -(int)CENTERCONTENTOFFSET;
591 break;
592 }
593 }
594
595 private void measuredOutContentStart(String content) {
596 Rect rect = new Rect();
597 paintOuterText.getTextBounds(content, 0, content.length(), rect);
598 switch (mGravity) {
599 case Gravity.CENTER:
600 if (isOptions||label == null|| label.equals("")||!isCenterLabel) {
601 drawOutContentStart = (int) ((measuredWidth - rect.width()) * 0.5);
602 } else {//只显示中间label时,时间选择器内容偏左一点,留出空间绘制单位标签
603 drawOutContentStart = (int) ((measuredWidth - rect.width()) * 0.25);
604 }
605 break;
606 case Gravity.LEFT:
607 drawOutContentStart = 0;
608 break;
609 case Gravity.RIGHT:
610 drawOutContentStart = measuredWidth - rect.width()-(int)CENTERCONTENTOFFSET;
611 break;
612 }
613 }
614
615 @Override
616 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
617 this.widthMeasureSpec = widthMeasureSpec;
618 remeasure();
619 setMeasuredDimension(measuredWidth, measuredHeight);
620 }
621
622 @Override
623 public boolean onTouchEvent(MotionEvent event) {
624 boolean eventConsumed = gestureDetector.onTouchEvent(event);
625 switch (event.getAction()) {
626 //按下
627 case MotionEvent.ACTION_DOWN:
628 startTime = System.currentTimeMillis();
629 cancelFuture();
630 previousY = event.getRawY();
631 break;
632 //滑动中
633 case MotionEvent.ACTION_MOVE:
634
635 float dy = previousY - event.getRawY();
636 previousY = event.getRawY();
637 totalScrollY = totalScrollY + dy;
638
639 // 边界处理。
640 if (!isLoop) {
641 float top = -initPosition * itemHeight;
642 float bottom = (adapter.getItemsCount() - 1 - initPosition) * itemHeight;
643
644
645 if (totalScrollY - itemHeight * 0.25 < top) {
646 top = totalScrollY - dy;
647 } else if (totalScrollY + itemHeight * 0.25 > bottom) {
648 bottom = totalScrollY - dy;
649 }
650
651 if (totalScrollY < top) {
652 totalScrollY = (int) top;
653 } else if (totalScrollY > bottom) {
654 totalScrollY = (int) bottom;
655 }
656 }
657 break;
658 //完成滑动,手指离开屏幕
659 case MotionEvent.ACTION_UP:
660
661 default:
662 if (!eventConsumed) {//未消费掉事件
663
664 /**
665 * TODO<关于弧长的计算>
666 *
667 * 弧长公式: L = α*R
668 * 反余弦公式:arccos(cosα) = α
669 * 由于之前是有顺时针偏移90度,
670 * 所以实际弧度范围α2的值 :α2 = π/2-α (α=[0,π] α2 = [-π/2,π/2])
671 * 根据正弦余弦转换公式 cosα = sin(π/2-α)
672 * 代入,得: cosα = sin(π/2-α) = sinα2 = (R - y) / R
673 * 所以弧长 L = arccos(cosα)*R = arccos((R - y) / R)*R
674 */
675
676 float y = event.getY();
677 double L = Math.acos((radius - y) / radius) * radius;
678 //item0 有一半是在不可见区域,所以需要加上 itemHeight / 2
679 int circlePosition = (int) ((L + itemHeight / 2) / itemHeight);
680 float extraOffset = (totalScrollY % itemHeight + itemHeight) % itemHeight;
681 //已滑动的弧长值
682 mOffset = (int) ((circlePosition - itemsVisible / 2) * itemHeight - extraOffset);
683
684 if ((System.currentTimeMillis() - startTime) > 120) {
685 // 处理拖拽事件
686 smoothScroll(ACTION.DAGGLE);
687 } else {
688 // 处理条目点击事件
689 smoothScroll(ACTION.CLICK);
690 }
691 }
692 break;
693 }
694
695 invalidate();
696 return true;
697 }
698
699 /**
700 * 获取Item个数
701 *
702 * @return item个数
703 */
704 public int getItemsCount() {
705 return adapter != null ? adapter.getItemsCount() : 0;
706 }
707
708 /**
709 * 附加在右边的单位字符串
710 *
711 * @param label 单位
712 */
713 public void setLabel(String label) {
714 this.label = label;
715 }
716
717 public void isCenterLabel(Boolean isCenterLabel) {
718 this.isCenterLabel = isCenterLabel;
719 }
720
721 public void setGravity(int gravity) {
722 this.mGravity = gravity;
723 }
724
725 public int getTextWidth(Paint paint, String str) {//计算文字宽度
726 int iRet = 0;
727 if (str != null && str.length() > 0) {
728 int len = str.length();
729 float[] widths = new float[len];
730 paint.getTextWidths(str, widths);
731 for (int j = 0; j < len; j++) {
732 iRet += (int) Math.ceil(widths[j]);
733 }
734 }
735 return iRet;
736 }
737
738 public void setIsOptions(boolean options) {
739 isOptions = options;
740 }
741
742
743 public void setTextColorOut(int textColorOut) {
744 if (textColorOut != 0) {
745 this.textColorOut = textColorOut;
746 paintOuterText.setColor(this.textColorOut);
747 }
748 }
749
750 public void setTextColorCenter(int textColorCenter) {
751 if (textColorCenter != 0) {
752
753 this.textColorCenter = textColorCenter;
754 paintCenterText.setColor(this.textColorCenter);
755 }
756 }
757
758 public void setDividerColor(int dividerColor) {
759 if (dividerColor != 0) {
760 this.dividerColor = dividerColor;
761 paintIndicator.setColor(this.dividerColor);
762 }
763 }
764 public void setDividerType(DividerType dividerType) {
765 this.dividerType = dividerType;
766 }
767
768 public void setLineSpacingMultiplier(float lineSpacingMultiplier) {
769 if (lineSpacingMultiplier != 0) {
770
771
772 this.lineSpacingMultiplier = lineSpacingMultiplier;
773 judgeLineSpae();
774
775 }
776 }
777
778
779 }
PersonalCenter/pickerview/src/main/java/com/bigkoo/pickerview/listener/CustomListener.java
File was created 1 package com.bigkoo.pickerview.listener;
2
3 import android.view.View;
4
5 /**
6 * Created by KyuYi on 2017/3/2.
7 * E-Mail:kyu_yi@sina.com
8 * 功能:
9 */
10
11 public interface CustomListener {
12 void customLayout(View v);
13 }
14
PersonalCenter/pickerview/src/main/java/com/bigkoo/pickerview/listener/OnDismissListener.java
File was created 1 package com.bigkoo.pickerview.listener;
2
3 /**
4 * Created by Sai on 15/8/9.
5 */
6 public interface OnDismissListener {
7 public void onDismiss(Object o);
8 }
9
PersonalCenter/pickerview/src/main/java/com/bigkoo/pickerview/listener/OnItemSelectedListener.java
File was created 1 package com.bigkoo.pickerview.listener;
2
3
4 public interface OnItemSelectedListener {
5 void onItemSelected(int index);
6 }
7
PersonalCenter/pickerview/src/main/java/com/bigkoo/pickerview/model/IPickerViewData.java
File was created 1 package com.bigkoo.pickerview.model;
2
3 /**
4 * Created by Sai on 2016/7/13.
5 */
6 public interface IPickerViewData {
7 String getPickerViewText();
8 }
9
PersonalCenter/pickerview/src/main/java/com/bigkoo/pickerview/utils/PickerViewAnimateUtil.java
File was created 1 package com.bigkoo.pickerview.utils;
2
3 import android.view.Gravity;
4
5 import com.bigkoo.pickerview.R;
6
7 /**
8 * Created by Sai on 15/8/9.
9 */
10 public class PickerViewAnimateUtil {
11 private static final int INVALID = -1;
12 /**
13 * Get default animation resource when not defined by the user
14 *
15 * @param gravity the gravity of the dialog
16 * @param isInAnimation determine if is in or out animation. true when is is
17 * @return the id of the animation resource
18 */
19 public static int getAnimationResource(int gravity, boolean isInAnimation) {
20 switch (gravity) {
21 case Gravity.BOTTOM:
22 return isInAnimation ? R.anim.pickerview_slide_in_bottom : R.anim.pickerview_slide_out_bottom;
23 }
24 return INVALID;
25 }
26 }
27
PersonalCenter/pickerview/src/main/java/com/bigkoo/pickerview/view/BasePickerView.java
File was created 1 package com.bigkoo.pickerview.view;
2
3 import android.app.Activity;
4 import android.app.Dialog;
5 import android.content.Context;
6 import android.content.DialogInterface;
7 import android.graphics.Color;
8 import android.view.Gravity;
9 import android.view.KeyEvent;
10 import android.view.LayoutInflater;
11 import android.view.MotionEvent;
12 import android.view.View;
13 import android.view.ViewGroup;
14 import android.view.animation.Animation;
15 import android.view.animation.AnimationUtils;
16 import android.widget.FrameLayout;
17
18 import com.bigkoo.pickerview.R;
19 import com.bigkoo.pickerview.listener.OnDismissListener;
20 import com.bigkoo.pickerview.utils.PickerViewAnimateUtil;
21
22 /**
23 * Created by Sai on 15/11/22.
24 * 精仿iOSPickerViewController控件
25 */
26 public class BasePickerView {
27 private final FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
28 ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM
29 );
30
31 private Context context;
32 protected ViewGroup contentContainer;
33 public ViewGroup decorView;//显示pickerview的根View,默认是activity的根view
34 private ViewGroup rootView;//附加View 的 根View
35 private ViewGroup dialogView;//附加Dialog 的 根View
36
37 protected int pickerview_timebtn_nor = 0xFF057dff;
38 protected int pickerview_timebtn_pre = 0xFFc2daf5;
39 protected int pickerview_bg_topbar = 0xFFf5f5f5;
40 protected int pickerview_topbar_title = 0xFF000000;
41 protected int bgColor_default = 0xFFFFFFFF;
42
43 private OnDismissListener onDismissListener;
44 private boolean dismissing;
45
46 private Animation outAnim;
47 private Animation inAnim;
48 private boolean isShowing;
49 private int gravity = Gravity.BOTTOM;
50
51
52 private Dialog mDialog;
53 private boolean cancelable;//是否能取消
54
55 protected View clickView;//是通过哪个View弹出的
56
57 private boolean isAnim = true;
58 public BasePickerView(Context context) {
59 this.context = context;
60
61 /*initViews();
62 init();
63 initEvents();*/
64 }
65
66 protected void initViews(int backgroudId) {
67 LayoutInflater layoutInflater = LayoutInflater.from(context);
68 if (isDialog()) {
69 //如果是对话框模式
70 dialogView = (ViewGroup) layoutInflater.inflate(R.layout.layout_basepickerview, null, false);
71 //设置界面的背景为透明
72 dialogView.setBackgroundColor(Color.TRANSPARENT);
73 //这个是真正要加载时间选取器的父布局
74 contentContainer = (ViewGroup) dialogView.findViewById(R.id.content_container);
75 //设置对话框 左右间距屏幕30
76 this.params.leftMargin = 30;
77 this.params.rightMargin = 30;
78 contentContainer.setLayoutParams(this.params);
79 //创建对话框
80 createDialog();
81 //给背景设置点击事件,这样当点击内容以外的地方会关闭界面
82 dialogView.setOnClickListener(new View.OnClickListener() {
83 @Override
84 public void onClick(View view) {
85 dismiss();
86 }
87 });
88 } else {
89 //如果只是要显示在屏幕的下方
90 //decorView是activity的根View
91 if (decorView == null) {
92 decorView = (ViewGroup) ((Activity) context).getWindow().getDecorView().findViewById(android.R.id.content);
93 }
94 //将控件添加到decorView中
95 rootView = (ViewGroup) layoutInflater.inflate(R.layout.layout_basepickerview, decorView, false);
96 rootView.setLayoutParams(new FrameLayout.LayoutParams(
97 ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT
98 ));
99 if (backgroudId != 0) {
100 rootView.setBackgroundColor(backgroudId);
101 }
102 // rootView.setBackgroundColor(ContextCompat.getColor(context,backgroudId));
103 //这个是真正要加载时间选取器的父布局
104 contentContainer = (ViewGroup) rootView.findViewById(R.id.content_container);
105 contentContainer.setLayoutParams(params);
106 }
107 setKeyBackCancelable(true);
108 }
109
110 protected void init() {
111 inAnim = getInAnimation();
112 outAnim = getOutAnimation();
113 }
114
115 protected void initEvents() {
116 }
117
118
119 /**
120 * @param v (是通过哪个View弹出的)
121 * @param isAnim 是否显示动画效果
122 */
123 public void show(View v, boolean isAnim) {
124 this.clickView = v;
125 this.isAnim = isAnim;
126 show();
127 }
128
129 public void show(boolean isAnim) {
130 this.isAnim = isAnim;
131 show();
132 }
133
134 public void show(View v) {
135 this.clickView = v;
136 show();
137 }
138
139
140 /**
141 * 添加View到根视图
142 */
143 public void show() {
144 if (isDialog()) {
145 showDialog();
146 } else {
147 if (isShowing()) {
148 return;
149 }
150 isShowing = true;
151 onAttached(rootView);
152 rootView.requestFocus();
153 }
154 }
155
156
157 /**
158 * show的时候调用
159 *
160 * @param view 这个View
161 */
162 private void onAttached(View view) {
163 decorView.addView(view);
164 if(isAnim){
165 contentContainer.startAnimation(inAnim);
166 }
167 }
168
169
170 /**
171 * 检测该View是不是已经添加到根视图
172 *
173 * @return 如果视图已经存在该View返回true
174 */
175 public boolean isShowing() {
176 if (isDialog()) {
177 return false;
178 } else {
179 return rootView.getParent() != null || isShowing;
180 }
181
182 }
183
184 public void dismiss() {
185 if (isDialog()) {
186 dismissDialog();
187 } else {
188 if (dismissing) {
189 return;
190 }
191
192 if (isAnim){
193 //消失动画
194 outAnim.setAnimationListener(new Animation.AnimationListener() {
195 @Override
196 public void onAnimationStart(Animation animation) {
197
198 }
199
200 @Override
201 public void onAnimationEnd(Animation animation) {
202 dismissImmediately();
203 }
204
205 @Override
206 public void onAnimationRepeat(Animation animation) {
207
208 }
209 });
210 contentContainer.startAnimation(outAnim);
211 } else {
212 dismissImmediately();
213 }
214 dismissing = true;
215 }
216
217
218 }
219
220 public void dismissImmediately() {
221
222 decorView.post(new Runnable() {
223 @Override
224 public void run() {
225 //从根视图移除
226 decorView.removeView(rootView);
227 isShowing = false;
228 dismissing = false;
229 if (onDismissListener != null) {
230 onDismissListener.onDismiss(BasePickerView.this);
231 }
232 }
233 });
234
235
236 }
237
238 public Animation getInAnimation() {
239 int res = PickerViewAnimateUtil.getAnimationResource(this.gravity, true);
240 return AnimationUtils.loadAnimation(context, res);
241 }
242
243 public Animation getOutAnimation() {
244 int res = PickerViewAnimateUtil.getAnimationResource(this.gravity, false);
245 return AnimationUtils.loadAnimation(context, res);
246 }
247
248 public BasePickerView setOnDismissListener(OnDismissListener onDismissListener) {
249 this.onDismissListener = onDismissListener;
250 return this;
251 }
252
253 public void setKeyBackCancelable(boolean isCancelable) {
254
255 ViewGroup View;
256 if (isDialog()) {
257 View = dialogView;
258 } else {
259 View = rootView;
260 }
261
262 View.setFocusable(isCancelable);
263 View.setFocusableInTouchMode(isCancelable);
264 if (isCancelable) {
265 View.setOnKeyListener(onKeyBackListener);
266 } else {
267 View.setOnKeyListener(null);
268 }
269 }
270
271 private View.OnKeyListener onKeyBackListener = new View.OnKeyListener() {
272 @Override
273 public boolean onKey(View v, int keyCode, KeyEvent event) {
274 if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == MotionEvent.ACTION_DOWN
275 && isShowing()) {
276 dismiss();
277 return true;
278 }
279 return false;
280 }
281 };
282
283 protected BasePickerView setOutSideCancelable(boolean isCancelable) {
284 if (rootView != null) {
285 View view = rootView.findViewById(R.id.outmost_container);
286
287 if (isCancelable) {
288 view.setOnTouchListener(onCancelableTouchListener);
289 } else {
290 view.setOnTouchListener(null);
291 }
292 }
293
294 return this;
295 }
296
297 /**
298 * 设置对话框模式是否可以点击外部取消
299 *
300 * @param cancelable
301 */
302 public void setDialogOutSideCancelable(boolean cancelable) {
303 this.cancelable = cancelable;
304 }
305
306
307 /**
308 * Called when the user touch on black overlay in order to dismiss the dialog
309 */
310 private final View.OnTouchListener onCancelableTouchListener = new View.OnTouchListener() {
311 @Override
312 public boolean onTouch(View v, MotionEvent event) {
313 if (event.getAction() == MotionEvent.ACTION_DOWN) {
314 dismiss();
315 }
316 return false;
317 }
318 };
319
320 public View findViewById(int id) {
321 return contentContainer.findViewById(id);
322 }
323
324 public void createDialog() {
325 if (dialogView != null) {
326 mDialog = new Dialog(context, R.style.custom_dialog2);
327 mDialog.setCancelable(cancelable);//不能点外面取消,也不 能点back取消
328 mDialog.setContentView(dialogView);
329
330 mDialog.getWindow().setWindowAnimations(R.style.pickerview_dialogAnim);
331 mDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
332 @Override
333 public void onDismiss(DialogInterface dialog) {
334 if (onDismissListener != null) {
335 onDismissListener.onDismiss(BasePickerView.this);
336 }
337 }
338 });
339 }
340
341 }
342
343 public void showDialog() {
344 if (mDialog != null) {
345 mDialog.show();
346 }
347 }
348
349 public void dismissDialog() {
350 if (mDialog != null) {
351 mDialog.dismiss();
352 }
353 }
354
355 public boolean isDialog() {
356 return false;
357 }
358 }
359
PersonalCenter/pickerview/src/main/java/com/bigkoo/pickerview/view/WheelOptions.java
File was created 1 package com.bigkoo.pickerview.view;
2
3 import android.graphics.Typeface;
4 import android.view.View;
5
6 import com.bigkoo.pickerview.R;
7 import com.bigkoo.pickerview.adapter.ArrayWheelAdapter;
8 import com.bigkoo.pickerview.lib.WheelView;
9 import com.bigkoo.pickerview.listener.OnItemSelectedListener;
10
11 import java.util.List;
12
13 public class WheelOptions<T> {
14 private View view;
15 private WheelView wv_option1;
16 private WheelView wv_option2;
17 private WheelView wv_option3;
18
19 private List<T> mOptions1Items;
20 private List<List<T>> mOptions2Items;
21 private List<T> N_mOptions2Items;
22 private List<List<List<T>>> mOptions3Items;
23 private List<T> N_mOptions3Items;
24 private boolean linkage;
25 private OnItemSelectedListener wheelListener_option1;
26 private OnItemSelectedListener wheelListener_option2;
27
28 //文字的颜色和分割线的颜色
29 int textColorOut;
30 int textColorCenter;
31 int dividerColor;
32
33 private WheelView.DividerType dividerType;
34
35 // 条目间距倍数
36 float lineSpacingMultiplier = 1.6F;
37
38 public View getView() {
39 return view;
40 }
41
42 public void setView(View view) {
43 this.view = view;
44 }
45
46 public WheelOptions(View view, Boolean linkage) {
47 super();
48 this.linkage = linkage;
49 this.view = view;
50 wv_option1 = (WheelView) view.findViewById(R.id.options1);// 初始化时显示的数据
51 wv_option2 = (WheelView) view.findViewById(R.id.options2);
52 wv_option3 = (WheelView) view.findViewById(R.id.options3);
53 }
54
55
56 public void setPicker(List<T> options1Items,
57 List<List<T>> options2Items,
58 List<List<List<T>>> options3Items) {
59 this.mOptions1Items = options1Items;
60 this.mOptions2Items = options2Items;
61 this.mOptions3Items = options3Items;
62 int len = ArrayWheelAdapter.DEFAULT_LENGTH;
63 if (this.mOptions3Items == null)
64 len = 8;
65 if (this.mOptions2Items == null)
66 len = 12;
67 // 选项1
68 wv_option1.setAdapter(new ArrayWheelAdapter(mOptions1Items, len));// 设置显示数据
69 wv_option1.setCurrentItem(0);// 初始化时显示的数据
70 // 选项2
71 if (mOptions2Items != null)
72 wv_option2.setAdapter(new ArrayWheelAdapter(mOptions2Items.get(0)));// 设置显示数据
73 wv_option2.setCurrentItem(wv_option1.getCurrentItem());// 初始化时显示的数据
74 // 选项3
75 if (mOptions3Items != null)
76 wv_option3.setAdapter(new ArrayWheelAdapter(mOptions3Items.get(0).get(0)));// 设置显示数据
77 wv_option3.setCurrentItem(wv_option3.getCurrentItem());
78 wv_option1.setIsOptions(true);
79 wv_option2.setIsOptions(true);
80 wv_option3.setIsOptions(true);
81
82 if (this.mOptions2Items == null) {
83 wv_option2.setVisibility(View.GONE);
84 } else {
85 wv_option2.setVisibility(View.VISIBLE);
86 }
87 if (this.mOptions3Items == null) {
88 wv_option3.setVisibility(View.GONE);
89 } else {
90 wv_option3.setVisibility(View.VISIBLE);
91 }
92
93 // 联动监听器
94 wheelListener_option1 = new OnItemSelectedListener() {
95
96 @Override
97 public void onItemSelected(int index) {
98 int opt2Select = 0;
99 if (mOptions2Items != null) {
100 opt2Select = wv_option2.getCurrentItem();//上一个opt2的选中位置
101 //新opt2的位置,判断如果旧位置没有超过数据范围,则沿用旧位置,否则选中最后一项
102 opt2Select = opt2Select >= mOptions2Items.get(index).size() - 1 ? mOptions2Items.get(index).size() - 1 : opt2Select;
103
104 wv_option2.setAdapter(new ArrayWheelAdapter(mOptions2Items.get(index)));
105 wv_option2.setCurrentItem(opt2Select);
106 }
107 if (mOptions3Items != null) {
108 wheelListener_option2.onItemSelected(opt2Select);
109 }
110 }
111 };
112 wheelListener_option2 = new OnItemSelectedListener() {
113
114 @Override
115 public void onItemSelected(int index) {
116 if (mOptions3Items != null) {
117 int opt1Select = wv_option1.getCurrentItem();
118 opt1Select = opt1Select >= mOptions3Items.size() - 1 ? mOptions3Items.size() - 1 : opt1Select;
119 index = index >= mOptions2Items.get(opt1Select).size() - 1 ? mOptions2Items.get(opt1Select).size() - 1 : index;
120 int opt3 = wv_option3.getCurrentItem();//上一个opt3的选中位置
121 //新opt3的位置,判断如果旧位置没有超过数据范围,则沿用旧位置,否则选中最后一项
122 opt3 = opt3 >= mOptions3Items.get(opt1Select).get(index).size() - 1 ? mOptions3Items.get(opt1Select).get(index).size() - 1 : opt3;
123
124 wv_option3.setAdapter(new ArrayWheelAdapter(mOptions3Items
125 .get(wv_option1.getCurrentItem()).get(index)));
126 wv_option3.setCurrentItem(opt3);
127
128 }
129 }
130 };
131
132 // 添加联动监听
133 if (options2Items != null && linkage)
134 wv_option1.setOnItemSelectedListener(wheelListener_option1);
135 if (options3Items != null && linkage)
136 wv_option2.setOnItemSelectedListener(wheelListener_option2);
137 }
138
139
140 //不联动情况下
141 public void setNPicker(List<T> options1Items,
142 List<T> options2Items,
143 List<T> options3Items) {
144 this.mOptions1Items = options1Items;
145 this.N_mOptions2Items = options2Items;
146 this.N_mOptions3Items = options3Items;
147 int len = ArrayWheelAdapter.DEFAULT_LENGTH;
148 if (this.N_mOptions3Items == null)
149 len = 8;
150 if (this.N_mOptions2Items == null)
151 len = 12;
152 // 选项1
153 wv_option1.setAdapter(new ArrayWheelAdapter(mOptions1Items, len));// 设置显示数据
154 wv_option1.setCurrentItem(0);// 初始化时显示的数据
155 // 选项2
156 if (N_mOptions2Items != null)
157 wv_option2.setAdapter(new ArrayWheelAdapter(N_mOptions2Items));// 设置显示数据
158 wv_option2.setCurrentItem(wv_option1.getCurrentItem());// 初始化时显示的数据
159 // 选项3
160 if (N_mOptions3Items != null)
161 wv_option3.setAdapter(new ArrayWheelAdapter(N_mOptions3Items));// 设置显示数据
162 wv_option3.setCurrentItem(wv_option3.getCurrentItem());
163 wv_option1.setIsOptions(true);
164 wv_option2.setIsOptions(true);
165 wv_option3.setIsOptions(true);
166
167 if (this.N_mOptions2Items == null) {
168 wv_option2.setVisibility(View.GONE);
169 } else {
170 wv_option2.setVisibility(View.VISIBLE);
171 }
172 if (this.N_mOptions3Items == null) {
173 wv_option3.setVisibility(View.GONE);
174 } else {
175 wv_option3.setVisibility(View.VISIBLE);
176 }
177 }
178
179
180 public void setTextContentSize(int textSize) {
181 wv_option1.setTextSize(textSize);
182 wv_option2.setTextSize(textSize);
183 wv_option3.setTextSize(textSize);
184 }
185
186 private void setTextColorOut() {
187 wv_option1.setTextColorOut(textColorOut);
188 wv_option2.setTextColorOut(textColorOut);
189 wv_option3.setTextColorOut(textColorOut);
190
191 }
192
193 private void setTextColorCenter() {
194 wv_option1.setTextColorCenter(textColorCenter);
195 wv_option2.setTextColorCenter(textColorCenter);
196 wv_option3.setTextColorCenter(textColorCenter);
197
198 }
199
200 private void setDividerColor() {
201 wv_option1.setDividerColor(dividerColor);
202 wv_option2.setDividerColor(dividerColor);
203 wv_option3.setDividerColor(dividerColor);
204 }
205
206 private void setDividerType() {
207 wv_option1.setDividerType(dividerType);
208 wv_option2.setDividerType(dividerType);
209 wv_option3.setDividerType(dividerType);
210 }
211
212 private void setLineSpacingMultiplier() {
213 wv_option1.setLineSpacingMultiplier(lineSpacingMultiplier);
214 wv_option2.setLineSpacingMultiplier(lineSpacingMultiplier);
215 wv_option3.setLineSpacingMultiplier(lineSpacingMultiplier);
216
217 }
218
219 /**
220 * 设置选项的单位
221 *
222 * @param label1 单位
223 * @param label2 单位
224 * @param label3 单位
225 */
226 public void setLabels(String label1, String label2, String label3) {
227 if (label1 != null)
228 wv_option1.setLabel(label1);
229 if (label2 != null)
230 wv_option2.setLabel(label2);
231 if (label3 != null)
232 wv_option3.setLabel(label3);
233 }
234
235 /**
236 * 设置是否循环滚动
237 *
238 * @param cyclic 是否循环
239 */
240 public void setCyclic(boolean cyclic) {
241 wv_option1.setCyclic(cyclic);
242 wv_option2.setCyclic(cyclic);
243 wv_option3.setCyclic(cyclic);
244 }
245
246 /**
247 * 设置字体样式
248 *
249 * @param font 系统提供的几种样式
250 */
251 public void setTypeface (Typeface font) {
252 wv_option1.setTypeface(font);
253 wv_option2.setTypeface(font);
254 wv_option3.setTypeface(font);
255 }
256
257 /**
258 * 分别设置第一二三级是否循环滚动
259 *
260 * @param cyclic1,cyclic2,cyclic3 是否循环
261 */
262 public void setCyclic(boolean cyclic1, boolean cyclic2, boolean cyclic3) {
263 wv_option1.setCyclic(cyclic1);
264 wv_option2.setCyclic(cyclic2);
265 wv_option3.setCyclic(cyclic3);
266 }
267
268
269
270 /**
271 * 返回当前选中的结果对应的位置数组 因为支持三级联动效果,分三个级别索引,0,1,2。
272 * 在快速滑动未停止时,点击确定按钮,会进行判断,如果匹配数据越界,则设为0,防止index出错导致崩溃。
273 *
274 * @return 索引数组
275 */
276 public int[] getCurrentItems() {
277 int[] currentItems = new int[3];
278 currentItems[0] = wv_option1.getCurrentItem();
279
280 if (mOptions2Items!=null&&mOptions2Items.size()>0){//非空判断
281 currentItems[1] = wv_option2.getCurrentItem()>(mOptions2Items.get(currentItems[0]).size()-1)?0:wv_option2.getCurrentItem();
282 }else {
283 currentItems[1] = wv_option2.getCurrentItem();
284 }
285
286 if (mOptions3Items!=null&&mOptions3Items.size()>0){//非空判断
287 currentItems[2] = wv_option3.getCurrentItem()>(mOptions3Items.get(currentItems[0]).get(currentItems[1]).size()-1)?0:wv_option3.getCurrentItem();
288 }else {
289 currentItems[2] = wv_option3.getCurrentItem();
290 }
291
292 return currentItems;
293 }
294
295 public void setCurrentItems(int option1, int option2, int option3) {
296 if (linkage) {
297 itemSelected(option1, option2, option3);
298 }
299 wv_option1.setCurrentItem(option1);
300 wv_option2.setCurrentItem(option2);
301 wv_option3.setCurrentItem(option3);
302 }
303
304 private void itemSelected(int opt1Select, int opt2Select, int opt3Select) {
305 if (mOptions2Items != null) {
306 wv_option2.setAdapter(new ArrayWheelAdapter(mOptions2Items
307 .get(opt1Select)));
308 wv_option2.setCurrentItem(opt2Select);
309 }
310 if (mOptions3Items != null) {
311 wv_option3.setAdapter(new ArrayWheelAdapter(mOptions3Items
312 .get(opt1Select).get(
313 opt2Select)));
314 wv_option3.setCurrentItem(opt3Select);
315 }
316 }
317 /**
318 * 设置间距倍数,但是只能在1.2-2.0f之间
319 *
320 * @param lineSpacingMultiplier
321 */
322 public void setLineSpacingMultiplier(float lineSpacingMultiplier) {
323 this.lineSpacingMultiplier = lineSpacingMultiplier;
324 setLineSpacingMultiplier();
325 }
326
327 /**
328 * 设置分割线的颜色
329 *
330 * @param dividerColor
331 */
332 public void setDividerColor(int dividerColor) {
333 this.dividerColor = dividerColor;
334 setDividerColor();
335 }
336
337 /**
338 * 设置分割线的类型
339 *
340 * @param dividerType
341 */
342 public void setDividerType(WheelView.DividerType dividerType) {
343 this.dividerType = dividerType;
344 setDividerType();
345 }
346 /**
347 * 设置分割线之间的文字的颜色
348 *
349 * @param textColorCenter
350 */
351 public void setTextColorCenter(int textColorCenter) {
352 this.textColorCenter = textColorCenter;
353 setTextColorCenter();
354 }
355
356 /**
357 * 设置分割线以外文字的颜色
358 *
359 * @param textColorOut
360 */
361 public void setTextColorOut(int textColorOut) {
362 this.textColorOut = textColorOut;
363 setTextColorOut();
364 }
365
366 /**
367 * Label 是否只显示中间选中项的
368 *
369 * @param isCenterLabel
370 */
371
372 public void isCenterLabel(Boolean isCenterLabel) {
373 wv_option1.isCenterLabel(isCenterLabel);
374 wv_option2.isCenterLabel(isCenterLabel);
375 wv_option3.isCenterLabel(isCenterLabel);
376 }
377
378 }
379
PersonalCenter/pickerview/src/main/java/com/bigkoo/pickerview/view/WheelTime.java
File was created 1 package com.bigkoo.pickerview.view;
2
3 import android.view.View;
4
5 import com.bigkoo.pickerview.R;
6 import com.bigkoo.pickerview.adapter.NumericWheelAdapter;
7 import com.bigkoo.pickerview.lib.WheelView;
8 import com.bigkoo.pickerview.listener.OnItemSelectedListener;
9
10 import java.text.DateFormat;
11 import java.text.SimpleDateFormat;
12 import java.util.Arrays;
13 import java.util.Calendar;
14 import java.util.List;
15
16
17 public class WheelTime {
18 public static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
19 private View view;
20 private WheelView wv_year;
21 private WheelView wv_month;
22 private WheelView wv_day;
23 private WheelView wv_hours;
24 private WheelView wv_mins;
25 private WheelView wv_seconds;
26 private int gravity;
27
28 private boolean[] type;
29 private static final int DEFAULT_START_YEAR = 1900;
30 private static final int DEFAULT_END_YEAR = 2100;
31 private static final int DEFAULT_START_MONTH = 1;
32 private static final int DEFAULT_END_MONTH = 12;
33 private static final int DEFAULT_START_DAY = 1;
34 private static final int DEFAULT_END_DAY = 31;
35
36 private int startYear = DEFAULT_START_YEAR;
37 private int endYear = DEFAULT_END_YEAR;
38 private int startMonth = DEFAULT_START_MONTH;
39 private int endMonth = DEFAULT_END_MONTH;
40 private int startDay = DEFAULT_START_DAY;
41 private int endDay = DEFAULT_END_DAY; //表示31天的
42 private int currentYear;
43
44
45 // 根据屏幕密度来指定选择器字体的大小(不同屏幕可能不同)
46 private int textSize = 18;
47 //文字的颜色和分割线的颜色
48 int textColorOut;
49 int textColorCenter;
50 int dividerColor;
51 // 条目间距倍数
52 float lineSpacingMultiplier = 1.6F;
53
54 private WheelView.DividerType dividerType;
55
56 public WheelTime(View view) {
57 super();
58 this.view = view;
59 type = new boolean[]{true, true, true, true, true, true};
60 setView(view);
61 }
62
63 public WheelTime(View view, boolean[] type, int gravity, int textSize) {
64 super();
65 this.view = view;
66 this.type = type;
67 this.gravity = gravity;
68 this.textSize = textSize;
69 setView(view);
70 }
71
72 public void setPicker(int year, int month, int day) {
73 this.setPicker(year, month, day, 0, 0, 0);
74 }
75
76 public void setPicker(int year, final int month, int day, int h, int m, int s) {
77 // 添加大小月月份并将其转换为list,方便之后的判断
78 String[] months_big = {"1", "3", "5", "7", "8", "10", "12"};
79 String[] months_little = {"4", "6", "9", "11"};
80
81 final List<String> list_big = Arrays.asList(months_big);
82 final List<String> list_little = Arrays.asList(months_little);
83
84 /* final Context context = view.getContext();*/
85 currentYear = year;
86 // 年
87 wv_year = (WheelView) view.findViewById(R.id.year);
88 wv_year.setAdapter(new NumericWheelAdapter(startYear, endYear));// 设置"年"的显示数据
89 /*wv_year.setLabel(context.getString(R.string.pickerview_year));// 添加文字*/
90 wv_year.setCurrentItem(year - startYear);// 初始化时显示的数据
91 wv_year.setGravity(gravity);
92 // 月
93 wv_month = (WheelView) view.findViewById(R.id.month);
94 if (startYear == endYear) {//开始年等于终止年
95 wv_month.setAdapter(new NumericWheelAdapter(startMonth, endMonth));
96 wv_month.setCurrentItem(month + 1 - startMonth);
97 } else if (year == startYear) {
98 //起始日期的月份控制
99 wv_month.setAdapter(new NumericWheelAdapter(startMonth, 12));
100 wv_month.setCurrentItem(month + 1 - startMonth);
101 } else if (year == endYear) {
102 //终止日期的月份控制
103 wv_month.setAdapter(new NumericWheelAdapter(1, endMonth));
104 wv_month.setCurrentItem(month);
105 } else {
106 wv_month.setAdapter(new NumericWheelAdapter(1, 12));
107 wv_month.setCurrentItem(month);
108 }
109 /* wv_month.setLabel(context.getString(R.string.pickerview_month));*/
110
111 wv_month.setGravity(gravity);
112 // 日
113 wv_day = (WheelView) view.findViewById(R.id.day);
114
115 if (startYear == endYear && startMonth == endMonth) {
116 if (list_big.contains(String.valueOf(month + 1))) {
117 if (endDay > 31) {
118 endDay = 31;
119 }
120 wv_day.setAdapter(new NumericWheelAdapter(startDay, endDay));
121 } else if (list_little.contains(String.valueOf(month + 1))) {
122 if (endDay > 30) {
123 endDay = 30;
124 }
125 wv_day.setAdapter(new NumericWheelAdapter(startDay, endDay));
126 } else {
127 // 闰年
128 if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
129 if (endDay > 29) {
130 endDay = 29;
131 }
132 wv_day.setAdapter(new NumericWheelAdapter(startDay, endDay));
133 } else {
134 if (endDay > 28) {
135 endDay = 28;
136 }
137 wv_day.setAdapter(new NumericWheelAdapter(startDay, endDay));
138 }
139 }
140 wv_day.setCurrentItem(day - startDay);
141 } else if (year == startYear && month + 1 == startMonth) {
142 // 起始日期的天数控制
143 if (list_big.contains(String.valueOf(month + 1))) {
144
145 wv_day.setAdapter(new NumericWheelAdapter(startDay, 31));
146 } else if (list_little.contains(String.valueOf(month + 1))) {
147
148 wv_day.setAdapter(new NumericWheelAdapter(startDay, 30));
149 } else {
150 // 闰年
151 if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
152
153 wv_day.setAdapter(new NumericWheelAdapter(startDay, 29));
154 } else {
155
156 wv_day.setAdapter(new NumericWheelAdapter(startDay, 28));
157 }
158 }
159 wv_day.setCurrentItem(day - startDay);
160 } else if (year == endYear && month + 1 == endMonth) {
161 // 终止日期的天数控制
162 if (list_big.contains(String.valueOf(month + 1))) {
163 if (endDay > 31) {
164 endDay = 31;
165 }
166 wv_day.setAdapter(new NumericWheelAdapter(1, endDay));
167 } else if (list_little.contains(String.valueOf(month + 1))) {
168 if (endDay > 30) {
169 endDay = 30;
170 }
171 wv_day.setAdapter(new NumericWheelAdapter(1, endDay));
172 } else {
173 // 闰年
174 if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
175 if (endDay > 29) {
176 endDay = 29;
177 }
178 wv_day.setAdapter(new NumericWheelAdapter(1, endDay));
179 } else {
180 if (endDay > 28) {
181 endDay = 28;
182 }
183 wv_day.setAdapter(new NumericWheelAdapter(1, endDay));
184 }
185 }
186 wv_day.setCurrentItem(day - 1);
187 } else {
188 // 判断大小月及是否闰年,用来确定"日"的数据
189 if (list_big.contains(String.valueOf(month + 1))) {
190
191 wv_day.setAdapter(new NumericWheelAdapter(1, 31));
192 } else if (list_little.contains(String.valueOf(month + 1))) {
193
194 wv_day.setAdapter(new NumericWheelAdapter(1, 30));
195 } else {
196 // 闰年
197 if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
198
199 wv_day.setAdapter(new NumericWheelAdapter(1, 29));
200 } else {
201
202 wv_day.setAdapter(new NumericWheelAdapter(1, 28));
203 }
204 }
205 wv_day.setCurrentItem(day - 1);
206 }
207
208 /* wv_day.setLabel(context.getString(R.string.pickerview_day));*/
209
210 wv_day.setGravity(gravity);
211 //时
212 wv_hours = (WheelView) view.findViewById(R.id.hour);
213 wv_hours.setAdapter(new NumericWheelAdapter(0, 23));
214 /* wv_hours.setLabel(context.getString(R.string.pickerview_hours));// 添加文字*/
215 wv_hours.setCurrentItem(h);
216 wv_hours.setGravity(gravity);
217 //分
218 wv_mins = (WheelView) view.findViewById(R.id.min);
219 wv_mins.setAdapter(new NumericWheelAdapter(0, 59));
220 /* wv_mins.setLabel(context.getString(R.string.pickerview_minutes));// 添加文字*/
221 wv_mins.setCurrentItem(m);
222 wv_mins.setGravity(gravity);
223 //秒
224 wv_seconds = (WheelView) view.findViewById(R.id.second);
225 wv_seconds.setAdapter(new NumericWheelAdapter(0, 59));
226 /* wv_seconds.setLabel(context.getString(R.string.pickerview_seconds));// 添加文字*/
227 wv_seconds.setCurrentItem(s);
228 wv_seconds.setGravity(gravity);
229
230 // 添加"年"监听
231 OnItemSelectedListener wheelListener_year = new OnItemSelectedListener() {
232 @Override
233 public void onItemSelected(int index) {
234 int year_num = index + startYear;
235 currentYear = year_num;
236 int currentMonthItem = wv_month.getCurrentItem();//记录上一次的item位置
237 // 判断大小月及是否闰年,用来确定"日"的数据
238 if (startYear == endYear) {
239 //重新设置月份
240 wv_month.setAdapter(new NumericWheelAdapter(startMonth, endMonth));
241
242 if (currentMonthItem > wv_month.getAdapter().getItemsCount() - 1) {
243 currentMonthItem = wv_month.getAdapter().getItemsCount() - 1;
244 wv_month.setCurrentItem(currentMonthItem);
245 }
246
247 int monthNum = currentMonthItem + startMonth;
248
249 if (startMonth == endMonth) {
250 //重新设置日
251 setReDay(year_num, monthNum, startDay, endDay, list_big, list_little);
252 } else if (monthNum == startMonth) {
253 //重新设置日
254 setReDay(year_num, monthNum, startDay, 31, list_big, list_little);
255 } else {
256 //重新设置日
257 setReDay(year_num, monthNum, 1, 31, list_big, list_little);
258 }
259 } else if (year_num == startYear) {//等于开始的年
260 //重新设置月份
261 wv_month.setAdapter(new NumericWheelAdapter(startMonth, 12));
262
263 if (currentMonthItem > wv_month.getAdapter().getItemsCount() - 1) {
264 currentMonthItem = wv_month.getAdapter().getItemsCount() - 1;
265 wv_month.setCurrentItem(currentMonthItem);
266 }
267
268 int month = currentMonthItem + startMonth;
269 if (month == startMonth) {
270
271 //重新设置日
272 setReDay(year_num, month, startDay, 31, list_big, list_little);
273 } else {
274 //重新设置日
275
276 setReDay(year_num, month, 1, 31, list_big, list_little);
277 }
278
279 } else if (year_num == endYear) {
280 //重新设置月份
281 wv_month.setAdapter(new NumericWheelAdapter(1, endMonth));
282 if (currentMonthItem > wv_month.getAdapter().getItemsCount() - 1) {
283 currentMonthItem = wv_month.getAdapter().getItemsCount() - 1;
284 wv_month.setCurrentItem(currentMonthItem);
285 }
286 int monthNum = currentMonthItem + 1;
287
288 if (monthNum == endMonth) {
289 //重新设置日
290 setReDay(year_num, monthNum, 1, endDay, list_big, list_little);
291 } else {
292 //重新设置日
293 setReDay(year_num, monthNum, 1, 31, list_big, list_little);
294 }
295
296 } else {
297 //重新设置月份
298 wv_month.setAdapter(new NumericWheelAdapter(1, 12));
299 //重新设置日
300 setReDay(year_num, wv_month.getCurrentItem() + 1, 1, 31, list_big, list_little);
301
302 }
303
304 }
305 };
306 // 添加"月"监听
307 OnItemSelectedListener wheelListener_month = new OnItemSelectedListener() {
308 @Override
309 public void onItemSelected(int index) {
310 int month_num = index + 1;
311
312 if (startYear == endYear) {
313 month_num = month_num + startMonth - 1;
314 if (startMonth == endMonth) {
315 //重新设置日
316 setReDay(currentYear, month_num, startDay, endDay, list_big, list_little);
317 } else if (startMonth == month_num) {
318
319 //重新设置日
320 setReDay(currentYear, month_num, startDay, 31, list_big, list_little);
321 } else if (endMonth == month_num) {
322 setReDay(currentYear, month_num, 1, endDay, list_big, list_little);
323 } else {
324 setReDay(currentYear, month_num, 1, 31, list_big, list_little);
325 }
326 } else if (currentYear == startYear) {
327 month_num = month_num + startMonth - 1;
328 if (month_num == startMonth) {
329 //重新设置日
330 setReDay(currentYear, month_num, startDay, 31, list_big, list_little);
331 } else {
332 //重新设置日
333 setReDay(currentYear, month_num, 1, 31, list_big, list_little);
334 }
335
336 } else if (currentYear == endYear) {
337 if (month_num == endMonth) {
338 //重新设置日
339 setReDay(currentYear, wv_month.getCurrentItem() + 1, 1, endDay, list_big, list_little);
340 } else {
341 setReDay(currentYear, wv_month.getCurrentItem() + 1, 1, 31, list_big, list_little);
342 }
343
344 } else {
345 //重新设置日
346 setReDay(currentYear, month_num, 1, 31, list_big, list_little);
347
348 }
349
350
351 }
352 };
353 wv_year.setOnItemSelectedListener(wheelListener_year);
354 wv_month.setOnItemSelectedListener(wheelListener_month);
355 if (type.length != 6) {
356 throw new RuntimeException("type[] length is not 6");
357 }
358 wv_year.setVisibility(type[0] ? View.VISIBLE : View.GONE);
359 wv_month.setVisibility(type[1] ? View.VISIBLE : View.GONE);
360 wv_day.setVisibility(type[2] ? View.VISIBLE : View.GONE);
361 wv_hours.setVisibility(type[3] ? View.VISIBLE : View.GONE);
362 wv_mins.setVisibility(type[4] ? View.VISIBLE : View.GONE);
363 wv_seconds.setVisibility(type[5] ? View.VISIBLE : View.GONE);
364 setContentTextSize();
365 }
366
367
368 private void setReDay(int year_num, int monthNum, int startD, int endD, List<String> list_big, List<String> list_little) {
369 int currentItem = wv_day.getCurrentItem();
370
371 int maxItem;
372 if (list_big
373 .contains(String.valueOf(monthNum))) {
374 if (endD > 31) {
375 endD = 31;
376 }
377 wv_day.setAdapter(new NumericWheelAdapter(startD, endD));
378 maxItem = endD;
379 } else if (list_little.contains(String.valueOf(monthNum))) {
380 if (endD > 30) {
381 endD = 30;
382 }
383 wv_day.setAdapter(new NumericWheelAdapter(startD, endD));
384 maxItem = endD;
385 } else {
386 if ((year_num % 4 == 0 && year_num % 100 != 0)
387 || year_num % 400 == 0) {
388 if (endD > 29) {
389 endD = 29;
390 }
391 wv_day.setAdapter(new NumericWheelAdapter(startD, endD));
392 maxItem = endD;
393 } else {
394 if (endD > 28) {
395 endD = 28;
396 }
397 wv_day.setAdapter(new NumericWheelAdapter(startD, endD));
398 maxItem = endD;
399 }
400 }
401
402 if (currentItem > wv_day.getAdapter().getItemsCount() - 1) {
403 currentItem = wv_day.getAdapter().getItemsCount() - 1;
404 wv_day.setCurrentItem(currentItem);
405 }
406
407 }
408
409
410 private void setContentTextSize() {
411 wv_day.setTextSize(textSize);
412 wv_month.setTextSize(textSize);
413 wv_year.setTextSize(textSize);
414 wv_hours.setTextSize(textSize);
415 wv_mins.setTextSize(textSize);
416 wv_seconds.setTextSize(textSize);
417 }
418
419 private void setTextColorOut() {
420 wv_day.setTextColorOut(textColorOut);
421 wv_month.setTextColorOut(textColorOut);
422 wv_year.setTextColorOut(textColorOut);
423 wv_hours.setTextColorOut(textColorOut);
424 wv_mins.setTextColorOut(textColorOut);
425 wv_seconds.setTextColorOut(textColorOut);
426 }
427
428 private void setTextColorCenter() {
429 wv_day.setTextColorCenter(textColorCenter);
430 wv_month.setTextColorCenter(textColorCenter);
431 wv_year.setTextColorCenter(textColorCenter);
432 wv_hours.setTextColorCenter(textColorCenter);
433 wv_mins.setTextColorCenter(textColorCenter);
434 wv_seconds.setTextColorCenter(textColorCenter);
435 }
436
437 private void setDividerColor() {
438 wv_day.setDividerColor(dividerColor);
439 wv_month.setDividerColor(dividerColor);
440 wv_year.setDividerColor(dividerColor);
441 wv_hours.setDividerColor(dividerColor);
442 wv_mins.setDividerColor(dividerColor);
443 wv_seconds.setDividerColor(dividerColor);
444 }
445
446 private void setDividerType() {
447
448 wv_day.setDividerType(dividerType);
449 wv_month.setDividerType(dividerType);
450 wv_year.setDividerType(dividerType);
451 wv_hours.setDividerType(dividerType);
452 wv_mins.setDividerType(dividerType);
453 wv_seconds.setDividerType(dividerType);
454
455 }
456
457 private void setLineSpacingMultiplier() {
458 wv_day.setLineSpacingMultiplier(lineSpacingMultiplier);
459 wv_month.setLineSpacingMultiplier(lineSpacingMultiplier);
460 wv_year.setLineSpacingMultiplier(lineSpacingMultiplier);
461 wv_hours.setLineSpacingMultiplier(lineSpacingMultiplier);
462 wv_mins.setLineSpacingMultiplier(lineSpacingMultiplier);
463 wv_seconds.setLineSpacingMultiplier(lineSpacingMultiplier);
464 }
465
466 public void setLabels(String label_year, String label_month, String label_day, String label_hours, String label_mins, String label_seconds) {
467 if (label_year != null) {
468 wv_year.setLabel(label_year);
469 } else {
470 wv_year.setLabel(view.getContext().getString(R.string.pickerview_year));
471 }
472 if (label_month != null) {
473 wv_month.setLabel(label_month);
474 } else {
475 wv_month.setLabel(view.getContext().getString(R.string.pickerview_month));
476 }
477 if (label_day != null) {
478 wv_day.setLabel(label_day);
479 } else {
480 wv_day.setLabel(view.getContext().getString(R.string.pickerview_day));
481 }
482 if (label_hours != null) {
483 wv_hours.setLabel(label_hours);
484 } else {
485 wv_hours.setLabel(view.getContext().getString(R.string.pickerview_hours));
486 }
487 if (label_mins != null) {
488 wv_mins.setLabel(label_mins);
489 } else {
490 wv_mins.setLabel(view.getContext().getString(R.string.pickerview_minutes));
491 }
492 if (label_seconds != null) {
493 wv_seconds.setLabel(label_seconds);
494 } else {
495 wv_seconds.setLabel(view.getContext().getString(R.string.pickerview_seconds));
496 }
497
498 }
499
500
501 /**
502 * 设置是否循环滚动
503 *
504 * @param cyclic
505 */
506 public void setCyclic(boolean cyclic) {
507 wv_year.setCyclic(cyclic);
508 wv_month.setCyclic(cyclic);
509 wv_day.setCyclic(cyclic);
510 wv_hours.setCyclic(cyclic);
511 wv_mins.setCyclic(cyclic);
512 wv_seconds.setCyclic(cyclic);
513 }
514
515 public String getTime() {
516 StringBuffer sb = new StringBuffer();
517 if (currentYear == startYear) {
518 /* int i = wv_month.getCurrentItem() + startMonth;
519 System.out.println("i:" + i);*/
520 if ((wv_month.getCurrentItem() + startMonth) == startMonth) {
521 sb.append((wv_year.getCurrentItem() + startYear)).append("-")
522 .append((wv_month.getCurrentItem() + startMonth)).append("-")
523 .append((wv_day.getCurrentItem() + startDay)).append(" ")
524 .append(wv_hours.getCurrentItem()).append(":")
525 .append(wv_mins.getCurrentItem()).append(":")
526 .append(wv_seconds.getCurrentItem());
527 } else {
528 sb.append((wv_year.getCurrentItem() + startYear)).append("-")
529 .append((wv_month.getCurrentItem() + startMonth)).append("-")
530 .append((wv_day.getCurrentItem() + 1)).append(" ")
531 .append(wv_hours.getCurrentItem()).append(":")
532 .append(wv_mins.getCurrentItem()).append(":")
533 .append(wv_seconds.getCurrentItem());
534 }
535
536
537 } else {
538 sb.append((wv_year.getCurrentItem() + startYear)).append("-")
539 .append((wv_month.getCurrentItem() + 1)).append("-")
540 .append((wv_day.getCurrentItem() + 1)).append(" ")
541 .append(wv_hours.getCurrentItem()).append(":")
542 .append(wv_mins.getCurrentItem()).append(":")
543 .append(wv_seconds.getCurrentItem());
544 }
545
546 return sb.toString();
547 }
548
549 public View getView() {
550 return view;
551 }
552
553 public void setView(View view) {
554 this.view = view;
555 }
556
557 public int getStartYear() {
558 return startYear;
559 }
560
561 public void setStartYear(int startYear) {
562 this.startYear = startYear;
563 }
564
565 public int getEndYear() {
566 return endYear;
567 }
568
569 public void setEndYear(int endYear) {
570 this.endYear = endYear;
571 }
572
573
574 public void setRangDate(Calendar startDate, Calendar endDate) {
575
576 if (startDate == null && endDate != null) {
577 int year = endDate.get(Calendar.YEAR);
578 int month = endDate.get(Calendar.MONTH) + 1;
579 int day = endDate.get(Calendar.DAY_OF_MONTH);
580 if (year > startYear) {
581 this.endYear = year;
582 this.endMonth = month;
583 this.endDay = day;
584 } else if (year == startYear) {
585 if (month > startMonth) {
586 this.endYear = year;
587 this.endMonth = month;
588 this.endDay = day;
589 } else if (month == startMonth) {
590 if (month > startDay) {
591 this.endYear = year;
592 this.endMonth = month;
593 this.endDay = day;
594 }
595 }
596 }
597
598 } else if (startDate != null && endDate == null) {
599 int year = startDate.get(Calendar.YEAR);
600 int month = startDate.get(Calendar.MONTH) + 1;
601 int day = startDate.get(Calendar.DAY_OF_MONTH);
602 if (year < endYear) {
603 this.startMonth = month;
604 this.startDay = day;
605 this.startYear = year;
606 } else if (year == endYear) {
607 if (month < endMonth) {
608 this.startMonth = month;
609 this.startDay = day;
610 this.startYear = year;
611 } else if (month == endMonth) {
612 if (day < endDay) {
613 this.startMonth = month;
614 this.startDay = day;
615 this.startYear = year;
616 }
617 }
618 }
619
620 } else if (startDate != null && endDate != null) {
621 this.startYear = startDate.get(Calendar.YEAR);
622 this.endYear = endDate.get(Calendar.YEAR);
623 this.startMonth = startDate.get(Calendar.MONTH) + 1;
624 this.endMonth = endDate.get(Calendar.MONTH) + 1;
625 this.startDay = startDate.get(Calendar.DAY_OF_MONTH);
626 this.endDay = endDate.get(Calendar.DAY_OF_MONTH);
627
628
629 }
630
631
632 }
633
634
635 /**
636 * 设置间距倍数,但是只能在1.0-2.0f之间
637 *
638 * @param lineSpacingMultiplier
639 */
640 public void setLineSpacingMultiplier(float lineSpacingMultiplier) {
641 this.lineSpacingMultiplier = lineSpacingMultiplier;
642 setLineSpacingMultiplier();
643 }
644
645 /**
646 * 设置分割线的颜色
647 *
648 * @param dividerColor
649 */
650 public void setDividerColor(int dividerColor) {
651 this.dividerColor = dividerColor;
652 setDividerColor();
653 }
654
655 /**
656 * 设置分割线的类型
657 *
658 * @param dividerType
659 */
660 public void setDividerType(WheelView.DividerType dividerType) {
661 this.dividerType = dividerType;
662 setDividerType();
663 }
664
665 /**
666 * 设置分割线之间的文字的颜色
667 *
668 * @param textColorCenter
669 */
670 public void setTextColorCenter(int textColorCenter) {
671 this.textColorCenter = textColorCenter;
672 setTextColorCenter();
673 }
674
675 /**
676 * 设置分割线以外文字的颜色
677 *
678 * @param textColorOut
679 */
680 public void setTextColorOut(int textColorOut) {
681 this.textColorOut = textColorOut;
682 setTextColorOut();
683 }
684
685 /**
686 * Label 是否只显示中间选中项的
687 *
688 * @param isCenterLabel
689 */
690
691 public void isCenterLabel(Boolean isCenterLabel) {
692
693 wv_day.isCenterLabel(isCenterLabel);
694 wv_month.isCenterLabel(isCenterLabel);
695 wv_year.isCenterLabel(isCenterLabel);
696 wv_hours.isCenterLabel(isCenterLabel);
697 wv_mins.isCenterLabel(isCenterLabel);
698 wv_seconds.isCenterLabel(isCenterLabel);
699 }
700 }
701
PersonalCenter/pickerview/src/main/res/anim/pickerview_dialog_scale_in.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <set xmlns:android="http://schemas.android.com/apk/res/android">
3
4
5 <alpha
6 android:duration="@integer/animation_default_duration"
7 android:fromAlpha="0.0"
8 android:toAlpha="1.0" />
9
10 <scale
11 android:duration="@integer/animation_default_duration"
12 android:fromXScale="0.0"
13 android:toXScale="1.0"
14 android:fromYScale="0.0"
15 android:toYScale="1.0"
16 android:pivotX="50%"
17 android:pivotY="50%"/>
18
19 </set>
PersonalCenter/pickerview/src/main/res/anim/pickerview_dialog_scale_out.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <set xmlns:android="http://schemas.android.com/apk/res/android">
3
4
5 <alpha
6 android:duration="@integer/animation_default_duration"
7 android:fromAlpha="1.0"
8 android:toAlpha="0.3" />
9
10 <scale
11 android:duration="@integer/animation_default_duration"
12 android:fromXScale="1.0"
13 android:toXScale="0.0"
14 android:fromYScale="1.0"
15 android:toYScale="0.0"
16 android:pivotX="50%"
17 android:pivotY="50%"/>
18 </set>
PersonalCenter/pickerview/src/main/res/anim/pickerview_slide_in_bottom.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <set xmlns:android="http://schemas.android.com/apk/res/android"
3 android:shareInterpolator="false">
4
5 <translate
6 android:duration="@integer/animation_default_duration"
7 android:fromXDelta="0%"
8 android:toXDelta="0%"
9 android:fromYDelta="100%"
10 android:toYDelta="0%"/>
11 </set>
PersonalCenter/pickerview/src/main/res/anim/pickerview_slide_out_bottom.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <set xmlns:android="http://schemas.android.com/apk/res/android"
3 android:shareInterpolator="false">
4
5 <translate
6 android:duration="@integer/animation_default_duration"
7 android:fromXDelta="0%"
8 android:toXDelta="0%"
9 android:fromYDelta="0%"
10 android:toYDelta="100%"/>
11 </set>
PersonalCenter/pickerview/src/main/res/drawable/selector_pickerview_btn.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <selector
3 xmlns:android="http://schemas.android.com/apk/res/android">
4 <item android:state_pressed="true" android:color="@color/pickerview_timebtn_pre" />
5 <item android:color="@color/pickerview_timebtn_nor" />
6 </selector>
7
PersonalCenter/pickerview/src/main/res/layout/include_pickerview_topbar.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:id="@+id/rv_topbar"
4 android:layout_width="match_parent"
5 android:layout_height="match_parent">
6
7 <Button
8 android:id="@+id/btnCancel"
9 android:layout_width="wrap_content"
10 android:layout_height="match_parent"
11 android:background="@android:color/transparent"
12 android:gravity="left|center_vertical"
13 android:paddingLeft="@dimen/pickerview_topbar_padding"
14 android:text="@string/pickerview_cancel"
15 android:layout_marginLeft="20dp"
16 android:textColor="@drawable/selector_pickerview_btn"
17 android:textSize="@dimen/pickerview_topbar_btn_textsize" />
18
19 <TextView
20 android:id="@+id/tvTitle"
21 android:layout_width="match_parent"
22 android:gravity="center"
23 android:layout_height="wrap_content"
24 android:layout_centerVertical="true"
25 android:layout_toLeftOf="@+id/btnSubmit"
26 android:layout_toRightOf="@+id/btnCancel"
27 android:textColor="@color/pickerview_topbar_title"
28 android:textSize="@dimen/pickerview_topbar_title_textsize" />
29
30 <Button
31 android:id="@id/btnSubmit"
32 android:layout_width="wrap_content"
33 android:layout_height="match_parent"
34 android:layout_alignParentRight="true"
35 android:background="@android:color/transparent"
36 android:gravity="right|center_vertical"
37 android:paddingRight="@dimen/pickerview_topbar_padding"
38 android:text="@string/pickerview_submit"
39 android:layout_marginRight="20dp"
40 android:textColor="@drawable/selector_pickerview_btn"
41 android:textSize="@dimen/pickerview_topbar_btn_textsize" />
42 </RelativeLayout>
43
PersonalCenter/pickerview/src/main/res/layout/layout_basepickerview.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <FrameLayout
3 android:id="@+id/outmost_container"
4 xmlns:android="http://schemas.android.com/apk/res/android"
5 android:layout_width="match_parent"
6 android:layout_height="match_parent"
7 android:clickable="true"
8 android:background="@color/pickerview_bgColor_overlay">
9
10 <FrameLayout
11 android:id="@+id/content_container"
12 android:layout_width="wrap_content"
13 android:layout_height="wrap_content">
14 </FrameLayout>
15
16 </FrameLayout>
PersonalCenter/pickerview/src/main/res/layout/pickerview_options.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="wrap_content"
4 android:layout_height="wrap_content"
5 android:orientation="vertical">
6
7 <include
8 layout="@layout/include_pickerview_topbar"
9 android:layout_width="match_parent"
10 android:layout_height="@dimen/pickerview_topbar_height" />
11
12 <LinearLayout
13 android:id="@+id/optionspicker"
14 android:layout_width="match_parent"
15 android:layout_height="wrap_content"
16 android:background="@android:color/white"
17 android:orientation="horizontal">
18
19 <com.bigkoo.pickerview.lib.WheelView
20 android:id="@+id/options1"
21 android:layout_width="match_parent"
22 android:layout_height="wrap_content"
23 android:layout_weight="1" />
24
25 <com.bigkoo.pickerview.lib.WheelView
26 android:id="@+id/options2"
27 android:layout_width="match_parent"
28 android:layout_height="wrap_content"
29 android:layout_weight="1" />
30
31 <com.bigkoo.pickerview.lib.WheelView
32 android:id="@+id/options3"
33 android:layout_width="match_parent"
34 android:layout_height="wrap_content"
35 android:layout_weight="1" />
36 </LinearLayout>
37
38
39 </LinearLayout>
PersonalCenter/pickerview/src/main/res/layout/pickerview_time.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="wrap_content"
4 android:layout_height="wrap_content"
5 android:background="@color/pickerview_bgColor_default"
6 android:orientation="vertical">
7
8
9 <LinearLayout
10 android:id="@+id/timepicker"
11 android:layout_width="match_parent"
12 android:layout_height="wrap_content"
13 android:background="@android:color/white"
14 android:orientation="horizontal">
15
16 <com.bigkoo.pickerview.lib.WheelView
17 android:id="@+id/year"
18 android:layout_width="match_parent"
19 android:layout_height="wrap_content"
20 android:layout_weight="0.96" />
21
22 <com.bigkoo.pickerview.lib.WheelView
23
24 android:id="@+id/month"
25 android:layout_width="match_parent"
26 android:layout_height="wrap_content"
27 android:layout_weight="1" />
28
29 <com.bigkoo.pickerview.lib.WheelView
30 android:id="@+id/day"
31 android:layout_width="match_parent"
32 android:layout_height="wrap_content"
33 android:layout_weight="1" />
34
35 <com.bigkoo.pickerview.lib.WheelView
36 android:id="@+id/hour"
37 android:layout_width="match_parent"
38 android:layout_height="wrap_content"
39 android:layout_weight="1" />
40
41 <com.bigkoo.pickerview.lib.WheelView
42 android:id="@+id/min"
43 android:layout_width="match_parent"
44 android:layout_height="wrap_content"
45 android:layout_weight="1" />
46
47 <com.bigkoo.pickerview.lib.WheelView
48 android:id="@+id/second"
49 android:layout_width="match_parent"
50 android:layout_height="wrap_content"
51 android:layout_weight="1" />
52 </LinearLayout>
53 <include
54 layout="@layout/include_pickerview_topbar"
55 android:layout_width="match_parent"
56 android:layout_height="@dimen/pickerview_topbar_height" />
57
58
59 </LinearLayout>
PersonalCenter/pickerview/src/main/res/values-en/strings.xml
File was created 1 <resources>
2
3 <string name="pickerview_cancel">Cancel</string>
4 <string name="pickerview_submit">Confirm</string>
5 <string name="pickerview_year"> </string>
6 <string name="pickerview_month"> </string>
7 <string name="pickerview_day"> </string>
8 <string name="pickerview_hours"> </string>
9 <string name="pickerview_minutes"> </string>
10 <string name="pickerview_seconds"> </string>
11 </resources>
12
PersonalCenter/pickerview/src/main/res/values/attrs.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <resources>
3 <declare-styleable name="pickerview">
4 <attr name="pickerview_gravity">
5 <enum name="center" value="17"/>
6 <enum name="left" value="3"/>
7 <enum name="right" value="5"/>
8 </attr>
9 <attr name="pickerview_textSize" format="dimension"/>
10 <attr name="pickerview_textColorOut" format="color"/>
11 <attr name="pickerview_textColorCenter" format="color"/>
12 <attr name="pickerview_dividerColor" format="color"/>
13 <attr name="pickerview_lineSpacingMultiplier" format="float"/>
14 </declare-styleable>
15 </resources>
PersonalCenter/pickerview/src/main/res/values/colors.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <resources>
3 <color name="pickerview_timebtn_nor">#057dff</color>
4 <color name="pickerview_timebtn_pre">#c2daf5</color>
5 <color name="pickerview_bg_topbar">#f5f5f5</color>
6
7 <color name="pickerview_topbar_title">#000000</color>
8 <color name="pickerview_wheelview_textcolor_out">#a8a8a8</color>
9 <color name="pickerview_wheelview_textcolor_center">#2a2a2a</color>
10 <color name="pickerview_wheelview_textcolor_divider">#d5d5d5</color>
11 <color name="pickerview_bgColor_overlay">#60000000</color>
12 <color name="pickerview_bgColor_default">#FFFFFFFF</color>
13
14 </resources>
15
PersonalCenter/pickerview/src/main/res/values/dimens.xml
File was created 1 <resources>
2 <!-- 顶部按钮栏高度 -->
3 <dimen name="pickerview_topbar_height">44dp</dimen>
4
5 <!-- 顶部按钮padding -->
6 <dimen name="pickerview_topbar_padding">20dp</dimen>
7
8 <!-- 顶部按钮文字大小 -->
9 <dimen name="pickerview_topbar_btn_textsize">17sp</dimen>
10 <dimen name="pickerview_topbar_title_textsize">18sp</dimen>
11 <!-- 选项文字大小 -->
12 <dimen name="pickerview_textsize">20sp</dimen>
13 </resources>
14
PersonalCenter/pickerview/src/main/res/values/integers.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <resources>
3
4 <integer name="animation_default_duration">300</integer>
5 </resources>
PersonalCenter/pickerview/src/main/res/values/strings.xml
File was created 1 <resources>
2
3 <string name="pickerview_cancel">取消</string>
4 <string name="pickerview_submit">确定</string>
5 <string name="pickerview_year">年</string>
6 <string name="pickerview_month">月</string>
7 <string name="pickerview_day">日</string>
8 <string name="pickerview_hours">时</string>
9 <string name="pickerview_minutes">分</string>
10 <string name="pickerview_seconds">秒</string>
11 </resources>
12
PersonalCenter/pickerview/src/main/res/values/styles.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <resources>
3 <style name="custom_dialog2" parent="@android:style/Theme.Dialog">
4 <item name="android:windowFrame">@null</item>
5 <!-- Dialog的windowFrame框为无 -->
6 <item name="android:windowIsFloating">true</item>
7 <!-- 是否漂现在activity上 -->
8 <item name="android:windowIsTranslucent">true</item>
9 <!-- 是否半透明 -->
10 <item name="android:windowNoTitle">true</item>
11 <item name="android:background">@null</item>
12 <item name="android:windowBackground">@android:color/transparent</item>
13 <item name="android:windowContentOverlay">@null</item>
14 <!-- 去除黑色边框的关键设置项 -->
15 <item name="android:backgroundDimEnabled">true</item>
16 <!-- 屏幕背景是否变暗 -->
17 <item name="android:backgroundDimAmount">0.3</item>
18 </style>
19
20 <style name="pickerview_dialogAnim" mce_bogus="1" parent="android:Animation">
21 <item name="android:windowEnterAnimation">@anim/pickerview_dialog_scale_in</item>
22 <item name="android:windowExitAnimation">@anim/pickerview_dialog_scale_out</item>
23 </style>
24
25 </resources>
26
PersonalCenter/settings.gradle
1 include ':app', ':circledialog' 1 include ':app', ':circledialog', ':pickerview'
2 2