Commit c55b3db1a78da9815fa4b6b644930c6d109a2c76
1 parent
b4a2140e72
Exists in
master
自定义对话框,选择教材页,电子保卡弹出,16-开始学习体验,填写保卡-手机验证。等等界面的编写。
Showing
72 changed files
with
3994 additions
and
18 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="DEFAULT_WRAPPED" /> | 6 | <option name="distributionType" value="DEFAULT_WRAPPED" /> |
7 | <option name="externalProjectPath" value="$PROJECT_DIR$" /> | 7 | <option name="externalProjectPath" value="$PROJECT_DIR$" /> |
8 | <option name="modules"> | 8 | <option name="modules"> |
9 | <set> | 9 | <set> |
10 | <option value="$PROJECT_DIR$" /> | 10 | <option value="$PROJECT_DIR$" /> |
11 | <option value="$PROJECT_DIR$/app" /> | 11 | <option value="$PROJECT_DIR$/app" /> |
12 | <option value="$PROJECT_DIR$/circledialog" /> | ||
12 | </set> | 13 | </set> |
13 | </option> | 14 | </option> |
14 | <option name="resolveModulePerSourceSet" value="false" /> | 15 | <option name="resolveModulePerSourceSet" value="false" /> |
15 | </GradleProjectSettings> | 16 | </GradleProjectSettings> |
16 | </option> | 17 | </option> |
17 | </component> | 18 | </component> |
18 | </project> | 19 | </project> |
PersonalCenter/.idea/misc.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="EntryPointsManager"> | 3 | <component name="EntryPointsManager"> |
4 | <entry_points version="2.0" /> | 4 | <entry_points version="2.0" /> |
5 | </component> | 5 | </component> |
6 | <component name="NullableNotNullManager"> | 6 | <component name="NullableNotNullManager"> |
7 | <option name="myDefaultNullable" value="android.support.annotation.Nullable" /> | 7 | <option name="myDefaultNullable" value="android.support.annotation.Nullable" /> |
8 | <option name="myDefaultNotNull" value="android.support.annotation.NonNull" /> | 8 | <option name="myDefaultNotNull" value="android.support.annotation.NonNull" /> |
9 | <option name="myNullables"> | 9 | <option name="myNullables"> |
10 | <value> | 10 | <value> |
11 | <list size="4"> | 11 | <list size="4"> |
12 | <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" /> | 12 | <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" /> |
13 | <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" /> | 13 | <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" /> |
14 | <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" /> | 14 | <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" /> |
15 | <item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" /> | 15 | <item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" /> |
16 | </list> | 16 | </list> |
17 | </value> | 17 | </value> |
18 | </option> | 18 | </option> |
19 | <option name="myNotNulls"> | 19 | <option name="myNotNulls"> |
20 | <value> | 20 | <value> |
21 | <list size="4"> | 21 | <list size="4"> |
22 | <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" /> | 22 | <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" /> |
23 | <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" /> | 23 | <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" /> |
24 | <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" /> | 24 | <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" /> |
25 | <item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" /> | 25 | <item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" /> |
26 | </list> | 26 | </list> |
27 | </value> | 27 | </value> |
28 | </option> | 28 | </option> |
29 | </component> | 29 | </component> |
30 | <component name="ProjectLevelVcsManager" settingsEditedManually="false"> | 30 | <component name="ProjectLevelVcsManager" settingsEditedManually="false"> |
31 | <OptionsSetting value="true" id="Add" /> | 31 | <OptionsSetting value="true" id="Add" /> |
32 | <OptionsSetting value="true" id="Remove" /> | 32 | <OptionsSetting value="true" id="Remove" /> |
33 | <OptionsSetting value="true" id="Checkout" /> | 33 | <OptionsSetting value="true" id="Checkout" /> |
34 | <OptionsSetting value="true" id="Update" /> | 34 | <OptionsSetting value="true" id="Update" /> |
35 | <OptionsSetting value="true" id="Status" /> | 35 | <OptionsSetting value="true" id="Status" /> |
36 | <OptionsSetting value="true" id="Edit" /> | 36 | <OptionsSetting value="true" id="Edit" /> |
37 | <ConfirmationsSetting value="0" id="Add" /> | 37 | <ConfirmationsSetting value="0" id="Add" /> |
38 | <ConfirmationsSetting value="0" id="Remove" /> | 38 | <ConfirmationsSetting value="0" id="Remove" /> |
39 | </component> | 39 | </component> |
40 | <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> | 40 | <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> |
41 | <output url="file://$PROJECT_DIR$/build/classes" /> | 41 | <output url="file://$PROJECT_DIR$/build/classes" /> |
42 | </component> | 42 | </component> |
43 | <component name="ProjectType"> | 43 | <component name="ProjectType"> |
44 | <option name="id" value="Android" /> | 44 | <option name="id" value="Android" /> |
45 | </component> | 45 | </component> |
46 | <component name="masterDetails"> | 46 | <component name="masterDetails"> |
47 | <states> | 47 | <states> |
48 | <state key="ProjectJDKs.UI"> | 48 | <state key="ProjectJDKs.UI"> |
49 | <settings> | 49 | <settings> |
50 | <last-edited>1.8</last-edited> | 50 | <last-edited>1.8</last-edited> |
51 | <splitter-proportions> | 51 | <splitter-proportions> |
52 | <option name="proportions"> | 52 | <option name="proportions"> |
53 | <list> | 53 | <list> |
54 | <option value="0.2" /> | 54 | <option value="0.2" /> |
55 | </list> | 55 | </list> |
56 | </option> | 56 | </option> |
57 | </splitter-proportions> | 57 | </splitter-proportions> |
58 | </settings> | 58 | </settings> |
59 | </state> | 59 | </state> |
60 | </states> | 60 | </states> |
61 | </component> | 61 | </component> |
62 | </project> | 62 | </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$/PersonalCenter.iml" filepath="$PROJECT_DIR$/PersonalCenter.iml" /> | ||
7 | <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" /> | 8 | <module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" /> |
9 | <module fileurl="file://$PROJECT_DIR$/circledialog/circledialog.iml" filepath="$PROJECT_DIR$/circledialog/circledialog.iml" /> | ||
7 | </modules> | 10 | </modules> |
8 | </component> | 11 | </component> |
9 | </project> | 12 | </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 9 | 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(dir: 'libs', include: ['*.jar']) | 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 | } | 30 | } |
30 | 31 |
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.NoActionBar"> | 10 | android:theme="@style/Theme.AppCompat.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.ChangeEletronicCardPhone" |
65 | android:launchMode="singleTask" | 65 | android:launchMode="singleTask" |
66 | android:screenOrientation="landscape"> | 66 | android:screenOrientation="landscape"> |
67 | 67 | ||
68 | </activity> | 68 | </activity> |
69 | <activity | ||
70 | android:name=".activity.ChoiseTextBookActivity" | ||
71 | android:launchMode="singleTask" | ||
72 | android:screenOrientation="landscape"> | ||
73 | |||
74 | </activity> | ||
75 | <activity | ||
76 | android:name=".activity.TheStartPageActivity" | ||
77 | android:launchMode="singleTask" | ||
78 | android:screenOrientation="landscape"> | ||
79 | |||
80 | </activity> | ||
69 | </application> | 81 | </application> |
70 | 82 | ||
71 | </manifest> | 83 | </manifest> |
PersonalCenter/app/src/main/java/com/hjx/personalcenter/activity/ChoiseTextBookActivity.java
File was created | 1 | package com.hjx.personalcenter.activity; | |
2 | |||
3 | import android.os.Bundle; | ||
4 | import android.support.v7.app.AppCompatActivity; | ||
5 | import android.view.View; | ||
6 | import android.widget.Button; | ||
7 | import android.widget.GridView; | ||
8 | import android.widget.SimpleAdapter; | ||
9 | |||
10 | import com.hjx.personalcenter.R; | ||
11 | import com.hjx.personalcenter.customdialog.ElectronicCardDialog; | ||
12 | |||
13 | import java.util.ArrayList; | ||
14 | import java.util.HashMap; | ||
15 | import java.util.List; | ||
16 | import java.util.Map; | ||
17 | |||
18 | /**选择教材 | ||
19 | * Created by h on 2017/8/10. | ||
20 | */ | ||
21 | |||
22 | public class ChoiseTextBookActivity extends AppCompatActivity implements View.OnClickListener { | ||
23 | private GridView gridView; | ||
24 | private Button btn_ok; | ||
25 | private List<Map<String, Object>> data_list; | ||
26 | private SimpleAdapter sim_adapter; | ||
27 | // 图片封装为一个数组 | ||
28 | private int[] icon = { R.mipmap.ic_launcher, R.mipmap.ic_launcher, | ||
29 | R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, | ||
30 | R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, | ||
31 | R.mipmap.ic_launcher}; | ||
32 | private String[] subject = { "语文", "数学", "英语", "物理", "化学", "生物", "政治", | ||
33 | "历史", "地理" }; | ||
34 | private String[] publish = { "人民教育出版社", "人民教育出版社", "人民教育出版社", | ||
35 | "人民教育出版社", "人民教育出版社", "人民教育出版社", "人民教育出版社", | ||
36 | "人民教育出版社", "人民教育出版社" }; | ||
37 | @Override | ||
38 | protected void onCreate(Bundle savedInstanceState) { | ||
39 | super.onCreate(savedInstanceState); | ||
40 | setContentView(R.layout.activity_choisetextbook); | ||
41 | initView(); | ||
42 | initData(); | ||
43 | initLister(); | ||
44 | } | ||
45 | |||
46 | private void initView() { | ||
47 | gridView = (GridView) findViewById(R.id.grideview); | ||
48 | btn_ok = (Button) findViewById(R.id.btn_ok); | ||
49 | } | ||
50 | |||
51 | private void initData() { | ||
52 | data_list = new ArrayList<Map<String, Object>>(); | ||
53 | getData(); | ||
54 | String [] from ={"image","text","text1"}; | ||
55 | int [] to = {R.id.image,R.id.text}; | ||
56 | sim_adapter = new SimpleAdapter(this, data_list, R.layout.activity_choisetextbook_items, from, to); | ||
57 | //配置适配器 | ||
58 | gridView.setAdapter(sim_adapter); | ||
59 | |||
60 | } | ||
61 | |||
62 | private void initLister() { | ||
63 | btn_ok.setOnClickListener(this); | ||
64 | |||
65 | } | ||
66 | public List<Map<String, Object>> getData(){ | ||
67 | //cion和iconName的长度是相同的,这里任选其一都可以 | ||
68 | for(int i=0;i<icon.length;i++){ | ||
69 | Map<String, Object> map = new HashMap<String, Object>(); | ||
70 | map.put("image", icon[i]); | ||
71 | map.put("text", subject[i]); | ||
72 | map.put("text1", publish[i]); | ||
73 | data_list.add(map); | ||
74 | } | ||
75 | |||
76 | return data_list; | ||
77 | } | ||
78 | |||
79 | @Override | ||
80 | public void onClick(View v) { | ||
81 | switch (v.getId()){ | ||
82 | case R.id.btn_ok: | ||
83 | ElectronicCardDialog.getInstance().show(getSupportFragmentManager(), "ElectronicCardDialog"); | ||
84 | break; | ||
85 | } | ||
86 | |||
87 | } | ||
88 | } | ||
89 |
PersonalCenter/app/src/main/java/com/hjx/personalcenter/activity/RegisterInfoActivity.java
1 | package com.hjx.personalcenter.activity; | 1 | package com.hjx.personalcenter.activity; |
2 | 2 | ||
3 | import android.app.Activity; | 3 | import android.content.Intent; |
4 | import android.app.AlertDialog; | ||
5 | import android.content.DialogInterface; | ||
6 | import android.os.Bundle; | 4 | import android.os.Bundle; |
5 | import android.support.v7.app.AppCompatActivity; | ||
7 | import android.view.View; | 6 | import android.view.View; |
8 | import android.widget.Button; | 7 | import android.widget.Button; |
9 | import android.widget.EditText; | 8 | import android.widget.EditText; |
10 | import android.widget.TextView; | 9 | import android.widget.TextView; |
11 | import android.widget.Toast; | ||
12 | 10 | ||
13 | import com.hjx.personalcenter.R; | 11 | import com.hjx.personalcenter.R; |
12 | import com.hjx.personalcenter.customdialog.ListDialog; | ||
14 | 13 | ||
15 | /**填写注册信息 熊巍 | 14 | /**填写注册信息 熊巍 |
16 | * Created by h on 2017/8/9. | 15 | * Created by h on 2017/8/9. |
17 | */ | 16 | */ |
18 | 17 | ||
19 | public class RegisterInfoActivity extends Activity implements View.OnClickListener { | 18 | public class RegisterInfoActivity extends AppCompatActivity implements View.OnClickListener { |
20 | private EditText et_username; | 19 | private EditText et_username; |
21 | private TextView et_region,et_grade,et_school; | 20 | private TextView et_region,et_grade,et_school; |
22 | private Button btn_ok; | 21 | private Button btn_ok; |
23 | String[] items; | 22 | String[] items; |
24 | 23 | ||
25 | @Override | 24 | @Override |
26 | protected void onCreate(Bundle savedInstanceState) { | 25 | protected void onCreate(Bundle savedInstanceState) { |
27 | super.onCreate(savedInstanceState); | 26 | super.onCreate(savedInstanceState); |
28 | setContentView(R.layout.activity_registerinfo); | 27 | setContentView(R.layout.activity_registerinfo); |
29 | initView(); | 28 | initView(); |
30 | initData(); | 29 | initData(); |
31 | initLister(); | 30 | initLister(); |
32 | } | 31 | } |
33 | 32 | ||
34 | private void initView() { | 33 | private void initView() { |
35 | et_username = (EditText) findViewById(R.id.et_username); | 34 | et_username = (EditText) findViewById(R.id.et_username); |
36 | et_region = (TextView) findViewById(R.id.et_region); | 35 | et_region = (TextView) findViewById(R.id.et_region); |
37 | et_grade = (TextView) findViewById(R.id.et_grade); | 36 | et_grade = (TextView) findViewById(R.id.et_grade); |
38 | et_school = (TextView) findViewById(R.id.et_school); | 37 | et_school = (TextView) findViewById(R.id.et_school); |
39 | btn_ok = (Button) findViewById(R.id.btn_ok); | 38 | btn_ok = (Button) findViewById(R.id.btn_ok); |
40 | 39 | ||
41 | 40 | ||
42 | } | 41 | } |
43 | 42 | ||
44 | private void initData() { | 43 | private void initData() { |
45 | items = new String[] { "魏", "蜀", "吴" }; | 44 | items = new String[] { "魏", "蜀", "吴" }; |
46 | 45 | ||
47 | } | 46 | } |
48 | 47 | ||
49 | private void initLister() { | 48 | private void initLister() { |
50 | et_region.setOnClickListener(this); | 49 | et_region.setOnClickListener(this); |
51 | et_grade.setOnClickListener(this); | 50 | et_grade.setOnClickListener(this); |
52 | et_school.setOnClickListener(this); | 51 | et_school.setOnClickListener(this); |
52 | btn_ok.setOnClickListener(this); | ||
53 | 53 | ||
54 | 54 | ||
55 | } | 55 | } |
56 | 56 | ||
57 | @Override | 57 | @Override |
58 | public void onClick(View v) { | 58 | public void onClick(View v) { |
59 | switch (v.getId()){ | 59 | switch (v.getId()){ |
60 | case R.id.et_region: | 60 | case R.id.et_region: |
61 | break; | 61 | break; |
62 | case R.id.et_grade: | 62 | case R.id.et_grade: |
63 | choisegrade(); | 63 | choisegrade(); |
64 | break; | 64 | break; |
65 | case R.id.et_school: | 65 | case R.id.et_school: |
66 | break; | 66 | break; |
67 | case R.id.btn_ok: | 67 | case R.id.btn_ok: |
68 | Intent intent = new Intent(); | ||
69 | intent.setClass(RegisterInfoActivity.this,ChoiseTextBookActivity.class); | ||
70 | startActivity(intent); | ||
71 | overridePendingTransition(R.anim.rightin, R.anim.rightout); | ||
68 | break; | 72 | break; |
69 | } | 73 | } |
70 | 74 | ||
71 | } | 75 | } |
72 | 76 | ||
73 | private void choisegrade() { | 77 | private void choisegrade() { |
74 | AlertDialog dialog = new AlertDialog.Builder(this) | 78 | ListDialog.getInstance().show(getSupportFragmentManager(), "ListDialog"); |
75 | .setTitle("选择年级") | 79 | |
76 | .setItems(items, new DialogInterface.OnClickListener() { | ||
77 | @Override | ||
78 | public void onClick(DialogInterface dialog, int which) { |
PersonalCenter/app/src/main/java/com/hjx/personalcenter/activity/TheStartPageActivity.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/10. | ||
10 | */ | ||
11 | |||
12 | public class TheStartPageActivity extends Activity{ | ||
13 | @Override | ||
14 | protected void onCreate(Bundle savedInstanceState) { | ||
15 | super.onCreate(savedInstanceState); | ||
16 | setContentView(R.layout.activity_start_page); | ||
17 | } | ||
18 | } | ||
19 |
PersonalCenter/app/src/main/java/com/hjx/personalcenter/customdialog/ElectronicCardDialog.java
File was created | 1 | package com.hjx.personalcenter.customdialog; | |
2 | |||
3 | import android.content.Context; | ||
4 | import android.content.Intent; | ||
5 | import android.os.Bundle; | ||
6 | import android.view.LayoutInflater; | ||
7 | import android.view.View; | ||
8 | import android.view.ViewGroup; | ||
9 | |||
10 | import com.hjx.personalcenter.R; | ||
11 | import com.hjx.personalcenter.activity.TheStartPageActivity; | ||
12 | import com.mylhyl.circledialog.BaseCircleDialog; | ||
13 | import com.mylhyl.circledialog.res.values.CircleDimen; | ||
14 | |||
15 | /** | ||
16 | * Created by h on 2017/8/10. | ||
17 | */ | ||
18 | |||
19 | public class ElectronicCardDialog extends BaseCircleDialog { | ||
20 | public static ElectronicCardDialog getInstance() { | ||
21 | ElectronicCardDialog dialogFragment = new ElectronicCardDialog(); | ||
22 | dialogFragment.setCanceledBack(true); | ||
23 | dialogFragment.setCanceledOnTouchOutside(true); | ||
24 | dialogFragment.setRadius(CircleDimen.RADIUS); | ||
25 | dialogFragment.setWidth(0.8f); | ||
26 | return dialogFragment; | ||
27 | } | ||
28 | @Override | ||
29 | public View createView(Context context, LayoutInflater inflater, ViewGroup container) { | ||
30 | return inflater.inflate(R.layout.custom_adilog_electroniccard, container, false); | ||
31 | } | ||
32 | @Override | ||
33 | public void onActivityCreated(Bundle savedInstanceState) { | ||
34 | super.onActivityCreated(savedInstanceState); | ||
35 | getView().findViewById(R.id.fill_card).setOnClickListener(new View.OnClickListener() { | ||
36 | @Override | ||
37 | public void onClick(View v) { | ||
38 | Intent intent = new Intent(); | ||
39 | intent.setClass(getActivity(),TheStartPageActivity.class); | ||
40 | startActivity(intent); | ||
41 | getActivity().overridePendingTransition(R.anim.rightin, R.anim.rightout); | ||
42 | |||
43 | } | ||
44 | }); | ||
45 | |||
46 | } | ||
47 | |||
48 | } | ||
49 |
PersonalCenter/app/src/main/java/com/hjx/personalcenter/customdialog/ListDialog.java
File was created | 1 | package com.hjx.personalcenter.customdialog; | |
2 | |||
3 | import android.content.Context; | ||
4 | import android.os.Bundle; | ||
5 | import android.view.LayoutInflater; | ||
6 | import android.view.View; | ||
7 | import android.view.ViewGroup; | ||
8 | import android.widget.AdapterView; | ||
9 | import android.widget.ArrayAdapter; | ||
10 | import android.widget.ListView; | ||
11 | import android.widget.Toast; | ||
12 | |||
13 | import com.hjx.personalcenter.R; | ||
14 | import com.mylhyl.circledialog.BaseCircleDialog; | ||
15 | import com.mylhyl.circledialog.res.values.CircleDimen; | ||
16 | |||
17 | import java.util.ArrayList; | ||
18 | |||
19 | /**自定义列表对话框 | ||
20 | * Created by h on 2017/8/10. | ||
21 | */ | ||
22 | |||
23 | public class ListDialog extends BaseCircleDialog implements AdapterView.OnItemClickListener { | ||
24 | ArrayAdapter listadapter; | ||
25 | ListView listView; | ||
26 | ArrayList<String> data = new ArrayList<>(); | ||
27 | public static ListDialog getInstance() { | ||
28 | ListDialog dialogFragment = new ListDialog(); | ||
29 | dialogFragment.setCanceledBack(true); | ||
30 | dialogFragment.setCanceledOnTouchOutside(true); | ||
31 | dialogFragment.setRadius(CircleDimen.RADIUS); | ||
32 | dialogFragment.setWidth(0.5f); | ||
33 | return dialogFragment; | ||
34 | } | ||
35 | @Override | ||
36 | public View createView(Context context, LayoutInflater inflater, ViewGroup container) { | ||
37 | |||
38 | return inflater.inflate(R.layout.custom_adilog_list, container, false); | ||
39 | } | ||
40 | @Override | ||
41 | public void onActivityCreated(Bundle savedInstanceState) { | ||
42 | super.onActivityCreated(savedInstanceState); | ||
43 | listView = (ListView) getView().findViewById(R.id.listadapter); | ||
44 | for (int i=0;i<=50;i++){ | ||
45 | data.add("sss"+i); | ||
46 | } | ||
47 | |||
48 | listadapter = new ArrayAdapter(getActivity(),R.layout.custom_adilog_list_item,R.id.list_items,data); | ||
49 | listView.setAdapter(listadapter); | ||
50 | listView.setOnItemClickListener(this); | ||
51 | |||
52 | } | ||
53 | |||
54 | @Override | ||
55 | public void onItemClick(AdapterView<?> parent, View view, int position, long id) { | ||
56 | Toast.makeText(getActivity(),"你点击了第"+position+"个",Toast.LENGTH_LONG).show(); | ||
57 | |||
58 | dismiss(); | ||
59 | |||
60 | } | ||
61 | } | ||
62 |
PersonalCenter/app/src/main/res/drawable/corcle_white_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="100dp" | ||
8 | android:topLeftRadius="100dp" | ||
9 | android:bottomRightRadius="100dp" | ||
10 | android:topRightRadius="100dp"/> | ||
11 | <stroke android:width="1dp" | ||
12 | android:color="@color/cutoff_line"/> | ||
13 | </shape> |
PersonalCenter/app/src/main/res/layout/activity_choisetextbook.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:orientation="vertical" android:layout_width="match_parent" | ||
4 | android:layout_height="match_parent" | ||
5 | android:background="@color/white"> | ||
6 | <RelativeLayout | ||
7 | android:id="@+id/title" | ||
8 | android:layout_width="match_parent" | ||
9 | android:layout_height="wrap_content" | ||
10 | android:background="@color/login_text_blue" | ||
11 | android:minHeight="50dp" > | ||
12 | |||
13 | <ImageView | ||
14 | android:id="@+id/cancel" | ||
15 | android:layout_width="wrap_content" | ||
16 | android:layout_height="wrap_content" | ||
17 | android:layout_centerVertical="true" | ||
18 | android:paddingLeft="20dp" | ||
19 | android:paddingRight="20dp" | ||
20 | android:src="@mipmap/title_back" /> | ||
21 | |||
22 | <TextView | ||
23 | android:id="@+id/menu_title" | ||
24 | android:layout_width="wrap_content" | ||
25 | android:layout_height="wrap_content" | ||
26 | android:layout_centerInParent="true" | ||
27 | android:text="@string/string_textbook_info" | ||
28 | android:textColor="@android:color/white" | ||
29 | android:textSize="22sp" /> | ||
30 | </RelativeLayout> | ||
31 | <GridView | ||
32 | android:id="@+id/grideview" | ||
33 | android:layout_marginTop="10dp" | ||
34 | android:layout_width="match_parent" | ||
35 | android:layout_height="wrap_content" | ||
36 | android:layout_below="@+id/title" | ||
37 | android:numColumns="5"> | ||
38 | |||
39 | </GridView> | ||
40 | <LinearLayout | ||
41 | android:layout_width="match_parent" | ||
42 | android:layout_height="match_parent" | ||
43 | |||
44 | android:background="#ffffffff" | ||
45 | android:layout_below="@+id/grideview" | ||
46 | android:orientation="vertical" | ||
47 | android:paddingLeft="250dp" | ||
48 | android:paddingRight="250dp"> | ||
49 | <Button | ||
50 | android:id="@+id/btn_ok" | ||
51 | style="@style/button_login_register_style" | ||
52 | android:layout_marginTop="30dp" | ||
53 | android:text="@string/string_regist_next" /> | ||
54 | </LinearLayout> | ||
55 | |||
56 | |||
57 | </RelativeLayout> |
PersonalCenter/app/src/main/res/layout/activity_choisetextbook_items.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" | ||
4 | android:layout_width="match_parent" | ||
5 | android:layout_height="match_parent" | ||
6 | android:gravity="center" | ||
7 | android:padding="20dp"> | ||
8 | <ImageView | ||
9 | android:src="@mipmap/ic_launcher" | ||
10 | android:id="@+id/image" | ||
11 | android:layout_width="80dp" | ||
12 | android:layout_height="120dp" | ||
13 | |||
14 | /> | ||
15 | <TextView | ||
16 | android:id="@+id/text" | ||
17 | android:layout_marginTop="5dp" | ||
18 | android:textSize="17sp" | ||
19 | android:layout_width="wrap_content" | ||
20 | android:layout_height="wrap_content" | ||
21 | android:textColor="@color/login_text_black" | ||
22 | android:text="语文" | ||
23 | /> | ||
24 | <TextView | ||
25 | android:id="@+id/tv_publish" | ||
26 | android:layout_marginTop="5dp" | ||
27 | android:textSize="14sp" | ||
28 | android:layout_width="wrap_content" | ||
29 | android:layout_height="wrap_content" | ||
30 | android:textColor="@color/login_text_black" | ||
31 | android:text="人民教育出版社" | ||
32 | /> | ||
33 | |||
34 | </LinearLayout> |
PersonalCenter/app/src/main/res/layout/activity_start_page.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:orientation="vertical" | ||
4 | android:layout_width="match_parent" | ||
5 | android:layout_height="match_parent" | ||
6 | android:background="@mipmap/startpage"> | ||
7 | <RelativeLayout | ||
8 | android:layout_width="wrap_content" | ||
9 | android:layout_height="wrap_content" | ||
10 | android:layout_alignParentBottom="true" | ||
11 | android:paddingLeft="250dp" | ||
12 | android:paddingRight="250dp"> | ||
13 | <Button | ||
14 | android:id="@+id/btn_ok" | ||
15 | style="@style/button_login_register_style" | ||
16 | android:layout_marginBottom="50dp" | ||
17 | android:text="@string/string_start_page" /> | ||
18 | </RelativeLayout> | ||
19 | |||
20 | |||
21 | </RelativeLayout> |
PersonalCenter/app/src/main/res/layout/custom_adilog_electroniccard.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="@android:color/white"> | ||
6 | <RelativeLayout | ||
7 | android:id="@+id/title" | ||
8 | android:layout_width="match_parent" | ||
9 | android:layout_height="wrap_content" | ||
10 | android:background="@android:color/white" | ||
11 | android:minHeight="70dp" > | ||
12 | |||
13 | <ImageView | ||
14 | android:id="@+id/cancel" | ||
15 | android:layout_width="wrap_content" | ||
16 | android:layout_height="wrap_content" | ||
17 | android:layout_centerVertical="true" | ||
18 | android:layout_alignParentRight="true" | ||
19 | android:padding="20dp" | ||
20 | android:src="@mipmap/cancel_fork" /> | ||
21 | |||
22 | </RelativeLayout> | ||
23 | <RelativeLayout | ||
24 | android:gravity="center" | ||
25 | android:layout_gravity="clip_horizontal" | ||
26 | android:layout_width="match_parent" | ||
27 | android:background="@android:color/white" | ||
28 | android:layout_height="wrap_content"> | ||
29 | <ImageView | ||
30 | android:layout_width="wrap_content" | ||
31 | android:src="@mipmap/electroniccard" | ||
32 | android:layout_height="wrap_content" /> | ||
33 | </RelativeLayout> | ||
34 | <LinearLayout | ||
35 | android:orientation="vertical" | ||
36 | android:background="@android:color/white" | ||
37 | android:layout_width="match_parent" | ||
38 | android:layout_height="wrap_content"> | ||
39 | <TextView | ||
40 | android:layout_gravity="center" | ||
41 | android:layout_marginTop="30dp" | ||
42 | android:textSize="15sp" | ||
43 | android:layout_width="wrap_content" | ||
44 | android:layout_height="wrap_content" | ||
45 | android:textColor="@color/electronic_card" | ||
46 | android:text="@string/electronic_card1"/> | ||
47 | <TextView | ||
48 | android:layout_gravity="center" | ||
49 | android:layout_width="wrap_content" | ||
50 | android:layout_height="wrap_content" | ||
51 | android:textSize="15sp" | ||
52 | android:textColor="@color/electronic_card" | ||
53 | android:text="@string/electronic_card2"/> | ||
54 | <View | ||
55 | android:layout_marginTop="20dp" | ||
56 | android:layout_width="match_parent" | ||
57 | android:background="@color/login_edittext_hint" | ||
58 | android:layout_height="0.7dp"> | ||
59 | |||
60 | </View> | ||
61 | |||
62 | <TextView | ||
63 | android:id="@+id/fill_card" | ||
64 | android:layout_gravity="center" | ||
65 | android:layout_marginTop="20dp" | ||
66 | android:layout_width="wrap_content" | ||
67 | android:layout_height="wrap_content" | ||
68 | android:textSize="15sp" | ||
69 | android:textColor="@color/login_text_black" | ||
70 | android:text="@string/string_electroniccard_info_fill"/> | ||
71 | |||
72 | </LinearLayout> | ||
73 | <LinearLayout | ||
74 | android:orientation="vertical" | ||
75 | android:background="@android:color/white" | ||
76 | android:layout_width="match_parent" | ||
77 | android:layout_height="30dp"> | ||
78 | </LinearLayout> | ||
79 | |||
80 | |||
81 | </LinearLayout> |
PersonalCenter/app/src/main/res/layout/custom_adilog_list.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="@android:color/white" | ||
12 | android:minHeight="70dp" > | ||
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:layout_alignParentRight="true" | ||
20 | android:padding="20dp" | ||
21 | android:src="@mipmap/cancel_fork" /> | ||
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:padding="20dp" | ||
29 | android:text="选年级" | ||
30 | android:textColor="@android:color/black" | ||
31 | android:textSize="22sp" /> | ||
32 | </RelativeLayout> | ||
33 | <ListView | ||
34 | android:id="@+id/listadapter" | ||
35 | android:background="@android:color/white" | ||
36 | android:layout_width="match_parent" | ||
37 | android:layout_height="match_parent"> | ||
38 | |||
39 | </ListView> | ||
40 | </LinearLayout> | ||
41 |
PersonalCenter/app/src/main/res/layout/custom_adilog_list_item.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 | <TextView | ||
6 | android:id="@+id/list_items" | ||
7 | android:textSize="18sp" | ||
8 | android:layout_width="match_parent" | ||
9 | android:layout_height="50dp" | ||
10 | android:gravity="center" | ||
11 | android:textColor="@color/btn_text_color"/> | ||
12 | |||
13 | </LinearLayout> |
PersonalCenter/app/src/main/res/mipmap-xhdpi/cancel_fork.png
596 Bytes
PersonalCenter/app/src/main/res/mipmap-xhdpi/electroniccard.png
46.2 KB
PersonalCenter/app/src/main/res/mipmap-xhdpi/startpage.jpg
137 KB
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> | ||
14 | <color name="electronic_card">#ff480f</color> | ||
15 | |||
13 | </resources> | 16 | </resources> |
14 | 17 |
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_regist_username">用户名</string> | 13 | <string name="string_regist_username">用户名</string> |
13 | <string name="string_regist_region">地区</string> | 14 | <string name="string_regist_region">地区</string> |
14 | <string name="string_regist_grade">年级</string> | 15 | <string name="string_regist_grade">年级</string> |
15 | <string name="string_regist_school">学校</string> | 16 | <string name="string_regist_school">学校</string> |
16 | <string name="string_regist_next">下一步</string> | 17 | <string name="string_regist_next">下一步</string> |
18 | <string name="string_start_page">开始学习体验</string> | ||
19 | |||
17 | //电子保卡 | 20 | //电子保卡 |
18 | <string name="string_electroniccard_info_title">填写保卡信息</string> | 21 | <string name="string_electroniccard_info_title">填写保卡信息</string> |
22 | <string name="string_electroniccard_info_fill">填写电子保卡</string> | ||
19 | <string name="string_electroniccard_info_change">修改保卡信息</string> | 23 | <string name="string_electroniccard_info_change">修改保卡信息</string> |
20 | <string name="string_electroniccard_change_bangding">更换绑定</string> | 24 | <string name="string_electroniccard_change_bangding">更换绑定</string> |
25 | <string name="electronic_card1">请先填写《好记星-电子保卡》信息</string> | ||
26 | <string name="electronic_card2">该信息是本产品的三包证明,为维护您的合法权益,请认真填写</string> | ||
21 | 27 | ||
22 | 28 | ||
23 | </resources> | 29 | </resources> |
24 | 30 |
PersonalCenter/build.gradle
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. | 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. |
2 | 2 | ||
3 | buildscript { | 3 | buildscript { |
4 | repositories { | 4 | repositories { |
5 | jcenter() | 5 | jcenter() |
6 | } | 6 | } |
7 | dependencies { | 7 | dependencies { |
8 | classpath 'com.android.tools.build:gradle:2.2.2' | 8 | classpath 'com.android.tools.build:gradle:2.2.2' |
9 | 9 | ||
10 | // NOTE: Do not place your application dependencies here; they belong | 10 | // NOTE: Do not place your application dependencies here; they belong |
11 | // in the individual module build.gradle files | 11 | // in the individual module build.gradle files |
12 | classpath 'com.novoda:bintray-release:0.3.4' | ||
12 | } | 13 | } |
13 | } | 14 | } |
14 | 15 | ||
15 | allprojects { | 16 | allprojects { |
16 | repositories { | 17 | repositories { |
17 | jcenter() | 18 | jcenter() |
18 | } | 19 | } |
19 | } | 20 | } |
20 | 21 | ||
21 | task clean(type: Delete) { | 22 | task clean(type: Delete) { |
22 | delete rootProject.buildDir | 23 | delete rootProject.buildDir |
23 | } | 24 | } |
24 | 25 |
PersonalCenter/circledialog/.gitignore
File was created | 1 | /build | |
2 |
PersonalCenter/circledialog/build.gradle
File was created | 1 | apply plugin: 'com.android.library' | |
2 | apply plugin: 'maven' | ||
3 | apply plugin: 'com.novoda.bintray-release' | ||
4 | |||
5 | android { | ||
6 | compileSdkVersion 23 | ||
7 | buildToolsVersion "23.0.3" | ||
8 | defaultConfig { | ||
9 | minSdkVersion 15 | ||
10 | targetSdkVersion 23 | ||
11 | versionCode 1 | ||
12 | versionName "2017.5.8" | ||
13 | } | ||
14 | buildTypes { | ||
15 | release { | ||
16 | minifyEnabled false | ||
17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' | ||
18 | } | ||
19 | } | ||
20 | productFlavors { | ||
21 | } | ||
22 | lintOptions { | ||
23 | abortOnError false | ||
24 | checkReleaseBuilds false | ||
25 | } | ||
26 | } | ||
27 | |||
28 | dependencies { | ||
29 | compile 'com.android.support:appcompat-v7:23.4.0' | ||
30 | } | ||
31 | |||
32 | publish { | ||
33 | userOrg = 'mylhyl' | ||
34 | groupId = 'com.mylhyl' | ||
35 | artifactId = 'circleDialog' | ||
36 | version = '2.1.6' | ||
37 | description = 'circleDialog ios style' | ||
38 | website = "https://github.com/mylhyl/Android-CircleDialog" | ||
39 | } |
PersonalCenter/circledialog/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 E:\android\android-sdk-windows/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/circledialog/src/main/AndroidManifest.xml
File was created | 1 | <manifest package="com.mylhyl.circledialog"> | |
2 | |||
3 | <application/> | ||
4 | |||
5 | </manifest> | ||
6 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/AbsCircleDialog.java
File was created | 1 | package com.mylhyl.circledialog; | |
2 | |||
3 | import android.content.Context; | ||
4 | import android.content.DialogInterface; | ||
5 | import android.os.Bundle; | ||
6 | import android.support.annotation.Nullable; | ||
7 | import android.view.LayoutInflater; | ||
8 | import android.view.View; | ||
9 | import android.view.ViewGroup; | ||
10 | |||
11 | import com.mylhyl.circledialog.params.CircleParams; | ||
12 | import com.mylhyl.circledialog.params.DialogParams; | ||
13 | |||
14 | /** | ||
15 | * Created by hupei on 2017/3/29. | ||
16 | */ | ||
17 | |||
18 | public final class AbsCircleDialog extends BaseCircleDialog { | ||
19 | private static final String SAVED_PARAMS = "circle:params"; | ||
20 | private CircleParams mParams; | ||
21 | private Controller mController; | ||
22 | |||
23 | public static AbsCircleDialog newAbsCircleDialog(CircleParams params) { | ||
24 | AbsCircleDialog circleDialog = new AbsCircleDialog(); | ||
25 | circleDialog.mParams = params; | ||
26 | Bundle bundle = new Bundle(); | ||
27 | bundle.putParcelable(SAVED_PARAMS, params); | ||
28 | circleDialog.setArguments(bundle); | ||
29 | return circleDialog; | ||
30 | } | ||
31 | |||
32 | @Override | ||
33 | public void onDismiss(DialogInterface dialog) { | ||
34 | super.onDismiss(dialog); | ||
35 | mParams = null; | ||
36 | } | ||
37 | |||
38 | @Override | ||
39 | public void onCreate(@Nullable Bundle savedInstanceState) { | ||
40 | super.onCreate(savedInstanceState); | ||
41 | if (savedInstanceState != null) { | ||
42 | mParams = savedInstanceState.getParcelable(SAVED_PARAMS); | ||
43 | } | ||
44 | DialogParams dialogParams = mParams.dialogParams; | ||
45 | setGravity(dialogParams.gravity); | ||
46 | setCanceledOnTouchOutside(dialogParams.canceledOnTouchOutside); | ||
47 | setCanceledBack(dialogParams.cancelable); | ||
48 | setWidth(dialogParams.width); | ||
49 | int[] mPadding = dialogParams.mPadding; | ||
50 | if (mPadding != null) | ||
51 | setPadding(mPadding[0], mPadding[1], mPadding[2], mPadding[3]); | ||
52 | setAnimations(dialogParams.animStyle); | ||
53 | setDimEnabled(dialogParams.isDimEnabled); | ||
54 | setBackgroundColor(dialogParams.backgroundColor); | ||
55 | setRadius(dialogParams.radius); | ||
56 | setAlpha(dialogParams.alpha); | ||
57 | setX(dialogParams.xOff); | ||
58 | setY(dialogParams.yOff); | ||
59 | } | ||
60 | |||
61 | @Override | ||
62 | public void onSaveInstanceState(Bundle outState) { | ||
63 | super.onSaveInstanceState(outState); | ||
64 | outState.putParcelable(SAVED_PARAMS, mParams); | ||
65 | } | ||
66 | |||
67 | @Override | ||
68 | public View createView(Context context, LayoutInflater inflater, ViewGroup container) { | ||
69 | mController = new Controller(getContext(), mParams); | ||
70 | mParams.dialogFragment = this; | ||
71 | return mController.createView(); | ||
72 | } | ||
73 | |||
74 | public void refreshView() { | ||
75 | mController.refreshView(); | ||
76 | } | ||
77 | } | ||
78 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/BaseCircleDialog.java
File was created | 1 | package com.mylhyl.circledialog; | |
2 | |||
3 | import android.app.Dialog; | ||
4 | import android.content.Context; | ||
5 | import android.graphics.Color; | ||
6 | import android.os.Build; | ||
7 | import android.os.Bundle; | ||
8 | import android.support.annotation.ColorInt; | ||
9 | import android.support.annotation.FloatRange; | ||
10 | import android.support.annotation.Nullable; | ||
11 | import android.support.v4.app.DialogFragment; | ||
12 | import android.support.v4.app.FragmentManager; | ||
13 | import android.support.v4.app.FragmentTransaction; | ||
14 | import android.util.DisplayMetrics; | ||
15 | import android.view.Gravity; | ||
16 | import android.view.LayoutInflater; | ||
17 | import android.view.View; | ||
18 | import android.view.ViewGroup; | ||
19 | import android.view.Window; | ||
20 | import android.view.WindowManager; | ||
21 | |||
22 | import com.mylhyl.circledialog.res.drawable.CircleDrawable; | ||
23 | import com.mylhyl.circledialog.res.values.CircleDimen; | ||
24 | import com.mylhyl.circledialog.scale.ScaleUtils; | ||
25 | |||
26 | /** | ||
27 | * Created by hupei on 2017/3/29. | ||
28 | */ | ||
29 | |||
30 | public abstract class BaseCircleDialog extends DialogFragment { | ||
31 | |||
32 | public abstract View createView(Context context, LayoutInflater inflater, ViewGroup container); | ||
33 | |||
34 | private static final String SAVED_GRAVITY = "circle:baseGravity"; | ||
35 | private static final String SAVED_TOUCH_OUT = "circle:baseTouchOut"; | ||
36 | private static final String SAVED_CANCELED_BACK = "circle:baseCanceledBack"; | ||
37 | private static final String SAVED_WIDTH = "circle:baseWidth"; | ||
38 | private static final String SAVED_PADDING = "circle:basePadding"; | ||
39 | private static final String SAVED_ANIM_STYLE = "circle:baseAnimStyle"; | ||
40 | private static final String SAVED_DIM_ENABLED = "circle:baseDimEnabled"; | ||
41 | private static final String SAVED_BACKGROUND_COLOR = "circle:baseBackgroundColor"; | ||
42 | private static final String SAVED_RADIUS = "circle:baseRadius"; | ||
43 | private static final String SAVED_ALPHA = "circle:baseAlpha"; | ||
44 | private static final String SAVED_X = "circle:baseX"; | ||
45 | private static final String SAVED_Y = "circle:baseY"; | ||
46 | |||
47 | private int mGravity = Gravity.CENTER;//对话框的位置 | ||
48 | private boolean mCanceledOnTouchOutside = true;//是否触摸外部关闭 | ||
49 | private boolean mCanceledBack = true;//是否返回键关闭 | ||
50 | private float mWidth = 0.9f;//对话框宽度,范围:0-1;1整屏宽 | ||
51 | private int[] mPadding;//对话框与屏幕边缘距离 | ||
52 | private int mAnimStyle;//显示动画 | ||
53 | private boolean isDimEnabled = true; | ||
54 | private int mBackgroundColor = Color.TRANSPARENT;//对话框的背景色 | ||
55 | private int mRadius = CircleDimen.RADIUS;//对话框的圆角半径 | ||
56 | private float mAlpha = 1f;//对话框透明度,范围:0-1;1不透明 | ||
57 | private int mX, mY; | ||
58 | |||
59 | @Override | ||
60 | public void onCreate(@Nullable Bundle savedInstanceState) { | ||
61 | super.onCreate(savedInstanceState); | ||
62 | //设置 无标题 无边框 | ||
63 | setStyle(DialogFragment.STYLE_NO_TITLE, 0); | ||
64 | if (savedInstanceState != null) { | ||
65 | mGravity = savedInstanceState.getInt(SAVED_GRAVITY); | ||
66 | mCanceledOnTouchOutside = savedInstanceState.getBoolean(SAVED_TOUCH_OUT); | ||
67 | mCanceledBack = savedInstanceState.getBoolean(SAVED_CANCELED_BACK); | ||
68 | mWidth = savedInstanceState.getFloat(SAVED_WIDTH); | ||
69 | mPadding = savedInstanceState.getIntArray(SAVED_PADDING); | ||
70 | mAnimStyle = savedInstanceState.getInt(SAVED_ANIM_STYLE); | ||
71 | isDimEnabled = savedInstanceState.getBoolean(SAVED_DIM_ENABLED); | ||
72 | mBackgroundColor = savedInstanceState.getInt(SAVED_BACKGROUND_COLOR); | ||
73 | mRadius = savedInstanceState.getInt(SAVED_RADIUS); | ||
74 | mAlpha = savedInstanceState.getFloat(SAVED_ALPHA); | ||
75 | mX = savedInstanceState.getInt(SAVED_X); | ||
76 | mY = savedInstanceState.getInt(SAVED_Y); | ||
77 | } | ||
78 | } | ||
79 | |||
80 | @Override | ||
81 | public void onSaveInstanceState(Bundle outState) { | ||
82 | super.onSaveInstanceState(outState); | ||
83 | outState.putInt(SAVED_GRAVITY, mGravity); | ||
84 | outState.putBoolean(SAVED_TOUCH_OUT, mCanceledOnTouchOutside); | ||
85 | outState.putBoolean(SAVED_CANCELED_BACK, mCanceledBack); | ||
86 | outState.putFloat(SAVED_WIDTH, mWidth); | ||
87 | if (mPadding != null) outState.putIntArray(SAVED_PADDING, mPadding); | ||
88 | outState.putInt(SAVED_ANIM_STYLE, mAnimStyle); | ||
89 | outState.putBoolean(SAVED_DIM_ENABLED, isDimEnabled); | ||
90 | outState.putInt(SAVED_BACKGROUND_COLOR, mBackgroundColor); | ||
91 | outState.putInt(SAVED_RADIUS, mRadius); | ||
92 | outState.putFloat(SAVED_ALPHA, mAlpha); | ||
93 | outState.putInt(SAVED_X, mX); | ||
94 | outState.putInt(SAVED_Y, mY); | ||
95 | } | ||
96 | |||
97 | @Override | ||
98 | public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle | ||
99 | savedInstanceState) { | ||
100 | View view = createView(getContext(), inflater, container); | ||
101 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | ||
102 | view.setBackground(new CircleDrawable(mBackgroundColor, mRadius)); | ||
103 | } else { | ||
104 | view.setBackgroundDrawable(new CircleDrawable(mBackgroundColor, mRadius)); | ||
105 | } | ||
106 | view.setAlpha(mAlpha); | ||
107 | return view; | ||
108 | } | ||
109 | |||
110 | |||
111 | @Override | ||
112 | public void onStart() { | ||
113 | Dialog dialog = getDialog(); | ||
114 | if (dialog != null) { | ||
115 | dialog.setCanceledOnTouchOutside(mCanceledOnTouchOutside); | ||
116 | dialog.setCancelable(mCanceledBack); | ||
117 | setDialogGravity(dialog);//设置对话框布局 | ||
118 | } | ||
119 | super.onStart(); | ||
120 | } | ||
121 | |||
122 | /** | ||
123 | * 设置对话框底部显示 | ||
124 | * | ||
125 | * @param dialog | ||
126 | */ | ||
127 | private void setDialogGravity(Dialog dialog) { | ||
128 | // 设置宽度为屏宽、靠近屏幕底部。 | ||
129 | Window window = dialog.getWindow(); | ||
130 | window.setBackgroundDrawableResource(android.R.color.transparent); | ||
131 | WindowManager.LayoutParams wlp = window.getAttributes(); | ||
132 | DisplayMetrics dm = new DisplayMetrics(); | ||
133 | getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);//获取屏幕宽 | ||
134 | wlp.width = (int) (dm.widthPixels * mWidth);//宽度按屏幕大小的百分比设置 | ||
135 | wlp.gravity = mGravity; | ||
136 | wlp.x = mX; | ||
137 | wlp.y = mY; | ||
138 | //边距 | ||
139 | if (mPadding != null) { | ||
140 | int[] padding = mPadding; | ||
141 | wlp.width = WindowManager.LayoutParams.MATCH_PARENT; | ||
142 | window.getDecorView().setPadding(ScaleUtils.scaleValue(padding[0]), ScaleUtils | ||
143 | .scaleValue(padding[1]), ScaleUtils.scaleValue(padding[2]), ScaleUtils | ||
144 | .scaleValue(padding[3])); | ||
145 | } | ||
146 | //动画 | ||
147 | if (mAnimStyle != 0) window.setWindowAnimations(mAnimStyle); | ||
148 | |||
149 | if (isDimEnabled) window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); | ||
150 | else window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); | ||
151 | window.setAttributes(wlp); | ||
152 | } | ||
153 | |||
154 | @Override | ||
155 | public void show(FragmentManager manager, String tag) { | ||
156 | if (!isAdded()) { | ||
157 | FragmentTransaction transaction = manager.beginTransaction(); | ||
158 | transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); | ||
159 | transaction.add(this, tag); | ||
160 | transaction.commitAllowingStateLoss(); | ||
161 | } | ||
162 | } | ||
163 | |||
164 | public void remove() { | ||
165 | FragmentTransaction ft = getFragmentManager().beginTransaction(); | ||
166 | ft.remove(this); | ||
167 | ft.addToBackStack(null); | ||
168 | } | ||
169 | |||
170 | /** | ||
171 | * 设置对话框位置 | ||
172 | * {@link Gravity#CENTER 默认} | ||
173 | * | ||
174 | * @param gravity 位置 | ||
175 | */ | ||
176 | protected void setGravity(int gravity) { | ||
177 | mGravity = gravity; | ||
178 | } | ||
179 | |||
180 | /** | ||
181 | * 设置对话框点击外部关闭 | ||
182 | * | ||
183 | * @param cancel true允许 | ||
184 | */ | ||
185 | protected void setCanceledOnTouchOutside(boolean cancel) { | ||
186 | mCanceledOnTouchOutside = cancel; | ||
187 | } | ||
188 | |||
189 | /** | ||
190 | * 设置对话框返回键关闭关闭 | ||
191 | * | ||
192 | * @param cancel true允许 | ||
193 | */ | ||
194 | protected void setCanceledBack(boolean cancel) { | ||
195 | mCanceledBack = cancel; | ||
196 | } | ||
197 | |||
198 | /** | ||
199 | * 设置对话框宽度 | ||
200 | * | ||
201 | * @param width 0.0 - 1.0 | ||
202 | */ | ||
203 | protected void setWidth(@FloatRange(from = 0.0, to = 1.0) float width) { | ||
204 | mWidth = width; | ||
205 | } | ||
206 | |||
207 | /** | ||
208 | * 设置边距 | ||
209 | * | ||
210 | * @param left px | ||
211 | * @param top px | ||
212 | * @param right px | ||
213 | * @param bottom px | ||
214 | */ | ||
215 | protected void setPadding(int left, int top, int right, int bottom) { | ||
216 | mPadding = new int[]{left, top, right, bottom}; | ||
217 | } | ||
218 | |||
219 | /** | ||
220 | * 弹出对话框的动画 | ||
221 | * | ||
222 | * @param animStyle StyleRes | ||
223 | */ | ||
224 | protected void setAnimations(int animStyle) { | ||
225 | mAnimStyle = animStyle; | ||
226 | } | ||
227 | |||
228 | |||
229 | /** | ||
230 | * 设置背景是否昏暗,默认true | ||
231 | * | ||
232 | * @param dimEnabled true昏暗 | ||
233 | */ | ||
234 | protected void setDimEnabled(boolean dimEnabled) { | ||
235 | isDimEnabled = dimEnabled; | ||
236 | } | ||
237 | |||
238 | /** | ||
239 | * 设置对话框背景色 | ||
240 | * | ||
241 | * @param color 颜色值 | ||
242 | */ | ||
243 | protected void setBackgroundColor(@ColorInt int color) { | ||
244 | mBackgroundColor = color; | ||
245 | } | ||
246 | |||
247 | /** | ||
248 | * 设置对话框圆角 | ||
249 | * | ||
250 | * @param radius 半径 | ||
251 | */ | ||
252 | protected void setRadius(int radius) { | ||
253 | mRadius = radius; | ||
254 | } | ||
255 | |||
256 | /** | ||
257 | * 设置对话框透明度 | ||
258 | * | ||
259 | * @param alpha 0.0 - 1.0 | ||
260 | */ | ||
261 | protected void setAlpha(@FloatRange(from = 0.0, to = 1.0) float alpha) { | ||
262 | mAlpha = alpha; | ||
263 | } | ||
264 | |||
265 | protected void setX(int x) { | ||
266 | mX = x; | ||
267 | } | ||
268 | |||
269 | protected void setY(int y) { | ||
270 | mY = y; | ||
271 | } | ||
272 | } | ||
273 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/BuildView.java
File was created | 1 | package com.mylhyl.circledialog; | |
2 | |||
3 | import android.view.View; | ||
4 | |||
5 | /** | ||
6 | * Created by hupei on 2017/3/29. | ||
7 | */ | ||
8 | |||
9 | public interface BuildView { | ||
10 | /** | ||
11 | * 生成根布局 | ||
12 | */ | ||
13 | void buildRoot(); | ||
14 | |||
15 | /** | ||
16 | * 生成标题布局 | ||
17 | */ | ||
18 | void buildTitle(); | ||
19 | |||
20 | /** | ||
21 | * 生成文本布局 | ||
22 | */ | ||
23 | void buildText(); | ||
24 | |||
25 | /** | ||
26 | * 刷新文本内容 | ||
27 | */ | ||
28 | void refreshText(); | ||
29 | |||
30 | /** | ||
31 | * 生成列表布局 | ||
32 | */ | ||
33 | void buildItems(); | ||
34 | |||
35 | /** | ||
36 | * 生成列表按钮 | ||
37 | */ | ||
38 | void buildItemsButton(); | ||
39 | |||
40 | /** | ||
41 | * 刷新列表内容 | ||
42 | */ | ||
43 | void refreshItems(); | ||
44 | |||
45 | /** | ||
46 | * 生成进度条布局 | ||
47 | */ | ||
48 | void buildProgress(); | ||
49 | |||
50 | /** | ||
51 | * 刷新进度条 | ||
52 | */ | ||
53 | void refreshProgress(); | ||
54 | |||
55 | /** | ||
56 | * 生成输入布局 | ||
57 | */ | ||
58 | void buildInput(); | ||
59 | |||
60 | /** | ||
61 | * 生成多按钮布局 | ||
62 | */ | ||
63 | void buildMultipleButton(); | ||
64 | |||
65 | /** | ||
66 | * 生成单个按钮布局 | ||
67 | */ | ||
68 | void buildSingleButton(); | ||
69 | |||
70 | /** | ||
71 | * 注册输入框确定事件 | ||
72 | */ | ||
73 | void regInputListener(); | ||
74 | |||
75 | /** | ||
76 | * 取出根布局 | ||
77 | * | ||
78 | * @return 对话框视图 | ||
79 | */ | ||
80 | View getView(); | ||
81 | } | ||
82 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/CircleDialog.java
File was created | 1 | package com.mylhyl.circledialog; | |
2 | |||
3 | import android.support.annotation.ColorInt; | ||
4 | import android.support.annotation.DrawableRes; | ||
5 | import android.support.annotation.FloatRange; | ||
6 | import android.support.annotation.NonNull; | ||
7 | import android.support.v4.app.DialogFragment; | ||
8 | import android.support.v4.app.FragmentActivity; | ||
9 | import android.view.Gravity; | ||
10 | import android.view.View; | ||
11 | import android.widget.AdapterView; | ||
12 | |||
13 | import com.mylhyl.circledialog.callback.ConfigButton; | ||
14 | import com.mylhyl.circledialog.callback.ConfigDialog; | ||
15 | import com.mylhyl.circledialog.callback.ConfigInput; | ||
16 | import com.mylhyl.circledialog.callback.ConfigItems; | ||
17 | import com.mylhyl.circledialog.callback.ConfigProgress; | ||
18 | import com.mylhyl.circledialog.callback.ConfigText; | ||
19 | import com.mylhyl.circledialog.callback.ConfigTitle; | ||
20 | import com.mylhyl.circledialog.params.ButtonParams; | ||
21 | import com.mylhyl.circledialog.params.CircleParams; | ||
22 | import com.mylhyl.circledialog.params.DialogParams; | ||
23 | import com.mylhyl.circledialog.params.InputParams; | ||
24 | import com.mylhyl.circledialog.params.ItemsParams; | ||
25 | import com.mylhyl.circledialog.params.ProgressParams; | ||
26 | import com.mylhyl.circledialog.params.TextParams; | ||
27 | import com.mylhyl.circledialog.params.TitleParams; | ||
28 | import com.mylhyl.circledialog.view.listener.OnInputClickListener; | ||
29 | |||
30 | /** | ||
31 | * Created by hupei on 2017/3/29. | ||
32 | */ | ||
33 | |||
34 | public final class CircleDialog { | ||
35 | private AbsCircleDialog mDialog; | ||
36 | |||
37 | private CircleDialog() { | ||
38 | } | ||
39 | |||
40 | public DialogFragment create(CircleParams params) { | ||
41 | if (mDialog == null) | ||
42 | mDialog = AbsCircleDialog.newAbsCircleDialog(params); | ||
43 | else { | ||
44 | if (mDialog != null && mDialog.getDialog() != null && mDialog.getDialog().isShowing()) { | ||
45 | mDialog.refreshView(); | ||
46 | } | ||
47 | } | ||
48 | return mDialog; | ||
49 | } | ||
50 | |||
51 | public void show(FragmentActivity activity) { | ||
52 | mDialog.show(activity.getSupportFragmentManager(), "circleDialog"); | ||
53 | } | ||
54 | |||
55 | public static class Builder { | ||
56 | private FragmentActivity mActivity; | ||
57 | private CircleDialog mCircleDialog; | ||
58 | private CircleParams mCircleParams; | ||
59 | |||
60 | |||
61 | public Builder(@NonNull FragmentActivity activity) { | ||
62 | this.mActivity = activity; | ||
63 | mCircleParams = new CircleParams(); | ||
64 | mCircleParams.dialogParams = new DialogParams(); | ||
65 | } | ||
66 | |||
67 | /** | ||
68 | * 设置对话框位置 | ||
69 | * | ||
70 | * @param gravity 位置 | ||
71 | * @return builder | ||
72 | */ | ||
73 | public Builder setGravity(int gravity) { | ||
74 | mCircleParams.dialogParams.gravity = gravity; | ||
75 | return this; | ||
76 | } | ||
77 | |||
78 | /** | ||
79 | * 设置对话框点击外部关闭 | ||
80 | * | ||
81 | * @param cancel true允许 | ||
82 | * @return Builder | ||
83 | */ | ||
84 | public Builder setCanceledOnTouchOutside(boolean cancel) { | ||
85 | mCircleParams.dialogParams.canceledOnTouchOutside = cancel; | ||
86 | return this; | ||
87 | } | ||
88 | |||
89 | /** | ||
90 | * 设置对话框返回键关闭 | ||
91 | * | ||
92 | * @param cancel true允许 | ||
93 | * @return Builder | ||
94 | */ | ||
95 | public Builder setCancelable(boolean cancel) { | ||
96 | mCircleParams.dialogParams.cancelable = cancel; | ||
97 | return this; | ||
98 | } | ||
99 | |||
100 | /** | ||
101 | * 设置对话框宽度 | ||
102 | * | ||
103 | * @param width 0.0 - 1.0 | ||
104 | * @return Builder | ||
105 | */ | ||
106 | public Builder setWidth(@FloatRange(from = 0.0, to = 1.0) float width) { | ||
107 | mCircleParams.dialogParams.width = width; | ||
108 | return this; | ||
109 | } | ||
110 | |||
111 | /** | ||
112 | * 设置对话框圆角 | ||
113 | * | ||
114 | * @param radius 半径 | ||
115 | * @return Builder | ||
116 | */ | ||
117 | public Builder setRadius(int radius) { | ||
118 | mCircleParams.dialogParams.radius = radius; | ||
119 | return this; | ||
120 | } | ||
121 | |||
122 | public Builder configDialog(@NonNull ConfigDialog configDialog) { | ||
123 | configDialog.onConfig(mCircleParams.dialogParams); | ||
124 | return this; | ||
125 | } | ||
126 | |||
127 | public Builder setTitle(@NonNull String text) { | ||
128 | newTitleParams(); | ||
129 | mCircleParams.titleParams.text = text; | ||
130 | return this; | ||
131 | } | ||
132 | |||
133 | public Builder setTitleColor(@ColorInt int color) { | ||
134 | newTitleParams(); | ||
135 | mCircleParams.titleParams.textColor = color; | ||
136 | return this; | ||
137 | } | ||
138 | |||
139 | public Builder configTitle(@NonNull ConfigTitle configTitle) { | ||
140 | newTitleParams(); | ||
141 | configTitle.onConfig(mCircleParams.titleParams); | ||
142 | return this; | ||
143 | } | ||
144 | |||
145 | private void newTitleParams() { | ||
146 | if (mCircleParams.titleParams == null) | ||
147 | mCircleParams.titleParams = new TitleParams(); | ||
148 | } | ||
149 | |||
150 | public Builder setText(@NonNull String text) { | ||
151 | newTextParams(); | ||
152 | mCircleParams.textParams.text = text; | ||
153 | return this; | ||
154 | } | ||
155 | |||
156 | public Builder setTextColor(@ColorInt int color) { | ||
157 | newTextParams(); | ||
158 | mCircleParams.textParams.textColor = color; | ||
159 | return this; | ||
160 | } | ||
161 | |||
162 | public Builder configText(@NonNull ConfigText configText) { | ||
163 | newTextParams(); | ||
164 | configText.onConfig(mCircleParams.textParams); | ||
165 | return this; | ||
166 | } | ||
167 | |||
168 | private void newTextParams() { | ||
169 | //判断是否已经设置过 | ||
170 | if (mCircleParams.dialogParams.gravity == Gravity.NO_GRAVITY) | ||
171 | mCircleParams.dialogParams.gravity = Gravity.CENTER; | ||
172 | if (mCircleParams.textParams == null) | ||
173 | mCircleParams.textParams = new TextParams(); | ||
174 | } | ||
175 | |||
176 | public Builder setItems(@NonNull Object items, AdapterView.OnItemClickListener listener) { | ||
177 | newItemsParams(); | ||
178 | ItemsParams params = mCircleParams.itemsParams; | ||
179 | params.items = items; | ||
180 | params.listener = listener; | ||
181 | return this; | ||
182 | } | ||
183 | |||
184 | |||
185 | public Builder configItems(@NonNull ConfigItems configItems) { | ||
186 | newItemsParams(); | ||
187 | configItems.onConfig(mCircleParams.itemsParams); | ||
188 | return this; | ||
189 | } | ||
190 | |||
191 | private void newItemsParams() { | ||
192 | //设置列表特殊的参数 | ||
193 | DialogParams dialogParams = mCircleParams.dialogParams; | ||
194 | //判断是否已经设置过 | ||
195 | if (dialogParams.gravity == Gravity.NO_GRAVITY) | ||
196 | dialogParams.gravity = Gravity.BOTTOM;//默认底部显示 | ||
197 | //判断是否已经设置过 | ||
198 | if (dialogParams.yOff == 0) | ||
199 | dialogParams.yOff = 20;//底部与屏幕的距离 | ||
200 | |||
201 | if (mCircleParams.itemsParams == null) | ||
202 | mCircleParams.itemsParams = new ItemsParams() { | ||
203 | @Override | ||
204 | public void dismiss() { | ||
205 | onDismiss(); | ||
206 | } | ||
207 | }; | ||
208 | } | ||
209 | |||
210 | /** | ||
211 | * 设置进度条文本 | ||
212 | * | ||
213 | * @param text 进度条文本,style = 水平样式时,支持String.format() 例如:已经下载%s | ||
214 | * @return | ||
215 | */ | ||
216 | public Builder setProgressText(@NonNull String text) { | ||
217 | newProgressParams(); | ||
218 | mCircleParams.progressParams.text = text; | ||
219 | return this; | ||
220 | } | ||
221 | |||
222 | /** | ||
223 | * 设置进度条样式 | ||
224 | * | ||
225 | * @param style {@link ProgressParams#STYLE_HORIZONTAL 水平样式} or | ||
226 | * {@link ProgressParams#STYLE_SPINNER} | ||
227 | * @return | ||
228 | */ | ||
229 | public Builder setProgressStyle(int style) { | ||
230 | newProgressParams(); | ||
231 | mCircleParams.progressParams.style = style; | ||
232 | return this; | ||
233 | } | ||
234 | |||
235 | public Builder setProgress(int max, int progress) { | ||
236 | newProgressParams(); | ||
237 | ProgressParams progressParams = mCircleParams.progressParams; | ||
238 | progressParams.max = max; | ||
239 | progressParams.progress = progress; | ||
240 | return this; | ||
241 | } | ||
242 | |||
243 | public Builder setProgressDrawable(@DrawableRes int progressDrawableId) { | ||
244 | newProgressParams(); | ||
245 | mCircleParams.progressParams.progressDrawableId = progressDrawableId; | ||
246 | return this; | ||
247 | } | ||
248 | |||
249 | public Builder setProgressHeight(int height) { | ||
250 | newProgressParams(); | ||
251 | mCircleParams.progressParams.progressHeight = height; | ||
252 | return this; | ||
253 | } | ||
254 | |||
255 | public Builder configProgress(@NonNull ConfigProgress configProgress) { | ||
256 | newProgressParams(); | ||
257 | configProgress.onConfig(mCircleParams.progressParams); | ||
258 | return this; | ||
259 | } | ||
260 | |||
261 | private void newProgressParams() { | ||
262 | //判断是否已经设置过 | ||
263 | if (mCircleParams.dialogParams.gravity == Gravity.NO_GRAVITY) | ||
264 | mCircleParams.dialogParams.gravity = Gravity.CENTER; | ||
265 | if (mCircleParams.progressParams == null) | ||
266 | mCircleParams.progressParams = new ProgressParams(); | ||
267 | } | ||
268 | |||
269 | public Builder setInputHint(@NonNull String text) { | ||
270 | newInputParams(); | ||
271 | mCircleParams.inputParams.hintText = text; | ||
272 | return this; | ||
273 | } | ||
274 | |||
275 | public Builder setInputHeight(int height) { | ||
276 | newInputParams(); | ||
277 | mCircleParams.inputParams.inputHeight = height; | ||
278 | return this; | ||
279 | } | ||
280 | |||
281 | public Builder configInput(@NonNull ConfigInput configInput) { | ||
282 | newInputParams(); | ||
283 | configInput.onConfig(mCircleParams.inputParams); | ||
284 | return this; | ||
285 | } | ||
286 | |||
287 | private void newInputParams() { | ||
288 | //判断是否已经设置过 | ||
289 | if (mCircleParams.dialogParams.gravity == Gravity.NO_GRAVITY) | ||
290 | mCircleParams.dialogParams.gravity = Gravity.CENTER; | ||
291 | if (mCircleParams.inputParams == null) | ||
292 | mCircleParams.inputParams = new InputParams(); | ||
293 | } | ||
294 | |||
295 | public Builder setPositive(@NonNull String text, View.OnClickListener listener) { | ||
296 | newPositiveParams(); | ||
297 | ButtonParams params = mCircleParams.positiveParams; | ||
298 | params.text = text; | ||
299 | params.listener = listener; | ||
300 | return this; | ||
301 | } | ||
302 | |||
303 | public Builder setPositiveInput(@NonNull String text, OnInputClickListener listener) { | ||
304 | newPositiveParams(); | ||
305 | ButtonParams params = mCircleParams.positiveParams; | ||
306 | params.text = text; | ||
307 | params.inputListener = listener; | ||
308 | return this; | ||
309 | } | ||
310 | |||
311 | public Builder configPositive(@NonNull ConfigButton configButton) { | ||
312 | newPositiveParams(); | ||
313 | configButton.onConfig(mCircleParams.positiveParams); | ||
314 | return this; | ||
315 | } | ||
316 | |||
317 | private void newPositiveParams() { | ||
318 | if (mCircleParams.positiveParams == null) | ||
319 | mCircleParams.positiveParams = new ButtonParams() { | ||
320 | @Override | ||
321 | public void dismiss() { | ||
322 | onDismiss(); | ||
323 | } | ||
324 | }; | ||
325 | } | ||
326 | |||
327 | public Builder setNegative(@NonNull String text, View.OnClickListener listener) { | ||
328 | newNegativeParams(); | ||
329 | ButtonParams params = mCircleParams.negativeParams; | ||
330 | params.text = text; | ||
331 | params.listener = listener; | ||
332 | return this; | ||
333 | } | ||
334 | |||
335 | |||
336 | public Builder configNegative(@NonNull ConfigButton configButton) { | ||
337 | newNegativeParams(); | ||
338 | configButton.onConfig(mCircleParams.negativeParams); | ||
339 | return this; | ||
340 | } | ||
341 | |||
342 | private void newNegativeParams() { | ||
343 | if (mCircleParams.negativeParams == null) | ||
344 | mCircleParams.negativeParams = new ButtonParams() { | ||
345 | @Override | ||
346 | public void dismiss() { | ||
347 | onDismiss(); | ||
348 | } | ||
349 | }; | ||
350 | } | ||
351 | |||
352 | private void onDismiss() { | ||
353 | if (mCircleParams.dialogFragment != null) { | ||
354 | mCircleParams.dialogFragment.dismiss(); | ||
355 | mActivity = null; | ||
356 | mCircleParams.dialogFragment = null; | ||
357 | } | ||
358 | } | ||
359 | |||
360 | public DialogFragment create() { | ||
361 | if (mCircleDialog == null) | ||
362 | mCircleDialog = new CircleDialog(); | ||
363 | return mCircleDialog.create(mCircleParams); | ||
364 | } | ||
365 | |||
366 | public DialogFragment show() { | ||
367 | DialogFragment dialogFragment = create(); | ||
368 | mCircleDialog.show(mActivity); | ||
369 | return dialogFragment; | ||
370 | } | ||
371 | } | ||
372 | } | ||
373 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/Controller.java
File was created | 1 | package com.mylhyl.circledialog; | |
2 | |||
3 | import android.content.Context; | ||
4 | import android.view.View; | ||
5 | import android.view.animation.Animation; | ||
6 | import android.view.animation.AnimationUtils; | ||
7 | |||
8 | import com.mylhyl.circledialog.params.CircleParams; | ||
9 | import com.mylhyl.circledialog.view.BuildViewImpl; | ||
10 | |||
11 | /** | ||
12 | * Created by hupei on 2017/3/29. | ||
13 | */ | ||
14 | |||
15 | public class Controller { | ||
16 | private Context mContext; | ||
17 | private CircleParams mParams; | ||
18 | private BuildView mCreateView; | ||
19 | |||
20 | public Controller(Context context, CircleParams params) { | ||
21 | this.mContext = context; | ||
22 | this.mParams = params; | ||
23 | mCreateView = new BuildViewImpl(mContext, mParams); | ||
24 | } | ||
25 | |||
26 | public View createView() { | ||
27 | applyRoot(); | ||
28 | applyHeader(); | ||
29 | applyBody(); | ||
30 | return getView(); | ||
31 | } | ||
32 | |||
33 | public void refreshView() { | ||
34 | mCreateView.refreshText(); | ||
35 | mCreateView.refreshItems(); | ||
36 | mCreateView.refreshProgress(); | ||
37 | //刷新时带动画 | ||
38 | if (mParams.dialogParams.refreshAnimation != 0 && getView() != null) | ||
39 | getView().post(new Runnable() { | ||
40 | @Override | ||
41 | public void run() { | ||
42 | Animation animation = AnimationUtils.loadAnimation(mContext, mParams | ||
43 | .dialogParams | ||
44 | .refreshAnimation); | ||
45 | if (animation != null) getView().startAnimation(animation); | ||
46 | } | ||
47 | }); | ||
48 | } | ||
49 | |||
50 | private void applyRoot() { | ||
51 | mCreateView.buildRoot(); | ||
52 | } | ||
53 | |||
54 | private void applyHeader() { | ||
55 | if (mParams.titleParams != null) | ||
56 | mCreateView.buildTitle(); | ||
57 | } | ||
58 | |||
59 | private void applyBody() { | ||
60 | //文本 | ||
61 | if (mParams.textParams != null) { | ||
62 | mCreateView.buildText(); | ||
63 | applyButton(); | ||
64 | } | ||
65 | //列表 | ||
66 | else if (mParams.itemsParams != null) { | ||
67 | mCreateView.buildItems(); | ||
68 | //有确定或者有取消按钮 | ||
69 | if (mParams.positiveParams != null || mParams.negativeParams != null) | ||
70 | mCreateView.buildItemsButton(); | ||
71 | } | ||
72 | //进度条 | ||
73 | else if (mParams.progressParams != null) { | ||
74 | mCreateView.buildProgress(); | ||
75 | applyButton(); | ||
76 | } | ||
77 | //输入框 | ||
78 | else if (mParams.inputParams != null) { | ||
79 | mCreateView.buildInput(); | ||
80 | applyButton(); | ||
81 | mCreateView.regInputListener(); | ||
82 | } | ||
83 | } | ||
84 | |||
85 | private void applyButton() { | ||
86 | //有确定并且有取消按钮 | ||
87 | if (mParams.positiveParams != null && mParams.negativeParams != null) | ||
88 | mCreateView.buildMultipleButton(); | ||
89 | //有确定或者有取消按钮 | ||
90 | else if (mParams.positiveParams != null || mParams.negativeParams != null) | ||
91 | mCreateView.buildSingleButton(); | ||
92 | } | ||
93 | |||
94 | private View getView() { | ||
95 | return mCreateView.getView(); | ||
96 | } | ||
97 | } | ||
98 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/callback/ConfigButton.java
File was created | 1 | package com.mylhyl.circledialog.callback; | |
2 | |||
3 | import com.mylhyl.circledialog.params.ButtonParams; | ||
4 | |||
5 | /** | ||
6 | * Created by hupei on 2017/3/30. | ||
7 | */ | ||
8 | |||
9 | public abstract class ConfigButton { | ||
10 | public abstract void onConfig(ButtonParams params); | ||
11 | } | ||
12 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/callback/ConfigDialog.java
File was created | 1 | package com.mylhyl.circledialog.callback; | |
2 | |||
3 | import com.mylhyl.circledialog.params.DialogParams; | ||
4 | |||
5 | /** | ||
6 | * Created by hupei on 2017/3/30. | ||
7 | */ | ||
8 | public abstract class ConfigDialog { | ||
9 | public abstract void onConfig(DialogParams params); | ||
10 | } | ||
11 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/callback/ConfigInput.java
File was created | 1 | package com.mylhyl.circledialog.callback; | |
2 | |||
3 | import com.mylhyl.circledialog.params.InputParams; | ||
4 | |||
5 | /** | ||
6 | * Created by hupei on 2017/3/31. | ||
7 | */ | ||
8 | |||
9 | public abstract class ConfigInput { | ||
10 | public abstract void onConfig(InputParams params); | ||
11 | } | ||
12 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/callback/ConfigItems.java
File was created | 1 | package com.mylhyl.circledialog.callback; | |
2 | |||
3 | import com.mylhyl.circledialog.params.ItemsParams; | ||
4 | |||
5 | /** | ||
6 | * Created by hupei on 2017/3/30. | ||
7 | */ | ||
8 | |||
9 | public abstract class ConfigItems { | ||
10 | public abstract void onConfig(ItemsParams params); | ||
11 | } | ||
12 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/callback/ConfigProgress.java
File was created | 1 | package com.mylhyl.circledialog.callback; | |
2 | |||
3 | import com.mylhyl.circledialog.params.ProgressParams; | ||
4 | |||
5 | /** | ||
6 | * Created by hupei on 2017/3/31. | ||
7 | */ | ||
8 | |||
9 | public abstract class ConfigProgress { | ||
10 | public abstract void onConfig(ProgressParams params); | ||
11 | } | ||
12 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/callback/ConfigText.java
File was created | 1 | package com.mylhyl.circledialog.callback; | |
2 | |||
3 | import com.mylhyl.circledialog.params.TextParams; | ||
4 | |||
5 | /** | ||
6 | * Created by hupei on 2017/3/30. | ||
7 | */ | ||
8 | |||
9 | public abstract class ConfigText { | ||
10 | public abstract void onConfig(TextParams params); | ||
11 | } | ||
12 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/callback/ConfigTitle.java
File was created | 1 | package com.mylhyl.circledialog.callback; | |
2 | |||
3 | import com.mylhyl.circledialog.params.TitleParams; | ||
4 | |||
5 | /** | ||
6 | * Created by hupei on 2017/3/30. | ||
7 | */ | ||
8 | |||
9 | public abstract class ConfigTitle { | ||
10 | public abstract void onConfig(TitleParams params); | ||
11 | } | ||
12 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/params/ButtonParams.java
File was created | 1 | package com.mylhyl.circledialog.params; | |
2 | |||
3 | import android.os.Parcel; | ||
4 | import android.os.Parcelable; | ||
5 | import android.view.View; | ||
6 | |||
7 | import com.mylhyl.circledialog.res.values.CircleColor; | ||
8 | import com.mylhyl.circledialog.res.values.CircleDimen; | ||
9 | import com.mylhyl.circledialog.view.listener.OnInputClickListener; | ||
10 | |||
11 | import java.io.Serializable; | ||
12 | |||
13 | /** | ||
14 | * 按钮参数 | ||
15 | * Created by hupei on 2017/3/30. | ||
16 | */ | ||
17 | public class ButtonParams implements Parcelable { | ||
18 | public void dismiss() { | ||
19 | |||
20 | } | ||
21 | |||
22 | /** | ||
23 | * 按钮点击事件 | ||
24 | */ | ||
25 | public View.OnClickListener listener; | ||
26 | /** | ||
27 | * 输入框确定事件 | ||
28 | */ | ||
29 | public OnInputClickListener inputListener; | ||
30 | /** | ||
31 | * 按钮框与顶部距离 | ||
32 | */ | ||
33 | public int topMargin; | ||
34 | /** | ||
35 | * 按钮文本颜色 | ||
36 | */ | ||
37 | public int textColor = CircleColor.button; | ||
38 | /** | ||
39 | * 按钮文本大小 | ||
40 | */ | ||
41 | public int textSize = CircleDimen.FOOTER_TEXT_SIZE; | ||
42 | /** | ||
43 | * 按钮高度 | ||
44 | */ | ||
45 | public int height = CircleDimen.FOOTER_HEIGHT; | ||
46 | /** | ||
47 | * 按钮背景颜色 | ||
48 | */ | ||
49 | public int backgroundColor; | ||
50 | /** | ||
51 | * 按钮文本 | ||
52 | */ | ||
53 | public String text; | ||
54 | |||
55 | |||
56 | @Override | ||
57 | public int describeContents() { | ||
58 | return 0; | ||
59 | } | ||
60 | |||
61 | @Override | ||
62 | public void writeToParcel(Parcel dest, int flags) { | ||
63 | dest.writeInt(this.topMargin); | ||
64 | dest.writeInt(this.textColor); | ||
65 | dest.writeInt(this.textSize); | ||
66 | dest.writeInt(this.height); | ||
67 | dest.writeInt(this.backgroundColor); | ||
68 | dest.writeString(this.text); | ||
69 | } | ||
70 | |||
71 | public ButtonParams() { | ||
72 | } | ||
73 | |||
74 | protected ButtonParams(Parcel in) { | ||
75 | this.topMargin = in.readInt(); | ||
76 | this.textColor = in.readInt(); | ||
77 | this.textSize = in.readInt(); | ||
78 | this.height = in.readInt(); | ||
79 | this.backgroundColor = in.readInt(); | ||
80 | this.text = in.readString(); | ||
81 | } | ||
82 | |||
83 | public static final Parcelable.Creator<ButtonParams> CREATOR = new Parcelable.Creator<ButtonParams>() { | ||
84 | @Override | ||
85 | public ButtonParams createFromParcel(Parcel source) { | ||
86 | return new ButtonParams(source); | ||
87 | } | ||
88 | |||
89 | @Override | ||
90 | public ButtonParams[] newArray(int size) { | ||
91 | return new ButtonParams[size]; | ||
92 | } | ||
93 | }; | ||
94 | } | ||
95 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/params/CircleParams.java
File was created | 1 | package com.mylhyl.circledialog.params; | |
2 | |||
3 | import android.os.Parcel; | ||
4 | import android.os.Parcelable; | ||
5 | import android.support.v4.app.DialogFragment; | ||
6 | |||
7 | import com.mylhyl.circledialog.AbsCircleDialog; | ||
8 | |||
9 | import java.io.Serializable; | ||
10 | |||
11 | /** | ||
12 | * Created by hupei on 2017/3/30. | ||
13 | */ | ||
14 | |||
15 | public final class CircleParams implements Parcelable { | ||
16 | public DialogFragment dialogFragment; | ||
17 | public DialogParams dialogParams; | ||
18 | public TitleParams titleParams; | ||
19 | public TextParams textParams; | ||
20 | public ButtonParams negativeParams; | ||
21 | public ButtonParams positiveParams; | ||
22 | public ItemsParams itemsParams; | ||
23 | public ProgressParams progressParams; | ||
24 | public InputParams inputParams; | ||
25 | |||
26 | @Override | ||
27 | public int describeContents() { | ||
28 | return 0; | ||
29 | } | ||
30 | |||
31 | @Override | ||
32 | public void writeToParcel(Parcel dest, int flags) { | ||
33 | dest.writeParcelable(this.dialogParams, flags); | ||
34 | dest.writeParcelable(this.titleParams, flags); | ||
35 | dest.writeParcelable(this.textParams, flags); | ||
36 | dest.writeParcelable(this.negativeParams, flags); | ||
37 | dest.writeParcelable(this.positiveParams, flags); | ||
38 | dest.writeParcelable(this.itemsParams, flags); | ||
39 | dest.writeParcelable(this.progressParams, flags); | ||
40 | dest.writeParcelable(this.inputParams, flags); | ||
41 | } | ||
42 | |||
43 | public CircleParams() { | ||
44 | } | ||
45 | |||
46 | protected CircleParams(Parcel in) { | ||
47 | this.dialogParams = in.readParcelable(DialogParams.class.getClassLoader()); | ||
48 | this.titleParams = in.readParcelable(TitleParams.class.getClassLoader()); | ||
49 | this.textParams = in.readParcelable(TextParams.class.getClassLoader()); | ||
50 | this.negativeParams = in.readParcelable(ButtonParams.class.getClassLoader()); | ||
51 | this.positiveParams = in.readParcelable(ButtonParams.class.getClassLoader()); | ||
52 | this.itemsParams = in.readParcelable(ItemsParams.class.getClassLoader()); | ||
53 | this.progressParams = in.readParcelable(ProgressParams.class.getClassLoader()); | ||
54 | this.inputParams = in.readParcelable(InputParams.class.getClassLoader()); | ||
55 | } | ||
56 | |||
57 | public static final Parcelable.Creator<CircleParams> CREATOR = new Parcelable.Creator<CircleParams>() { | ||
58 | @Override | ||
59 | public CircleParams createFromParcel(Parcel source) { | ||
60 | return new CircleParams(source); | ||
61 | } | ||
62 | |||
63 | @Override | ||
64 | public CircleParams[] newArray(int size) { | ||
65 | return new CircleParams[size]; | ||
66 | } | ||
67 | }; | ||
68 | } | ||
69 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/params/DialogParams.java
File was created | 1 | package com.mylhyl.circledialog.params; | |
2 | |||
3 | import android.graphics.Color; | ||
4 | import android.os.Parcel; | ||
5 | import android.os.Parcelable; | ||
6 | import android.view.Gravity; | ||
7 | |||
8 | import com.mylhyl.circledialog.res.values.CircleDimen; | ||
9 | |||
10 | import java.io.Serializable; | ||
11 | |||
12 | /** | ||
13 | * 对话框参数 | ||
14 | * Created by hupei on 2017/3/30. | ||
15 | */ | ||
16 | public class DialogParams implements Parcelable { | ||
17 | /** | ||
18 | * 对话框的位置 | ||
19 | */ | ||
20 | public int gravity = Gravity.NO_GRAVITY; | ||
21 | /** | ||
22 | * 是否触摸外部关闭 | ||
23 | */ | ||
24 | public boolean canceledOnTouchOutside = true; | ||
25 | /** | ||
26 | * 返回键是否关闭 | ||
27 | */ | ||
28 | public boolean cancelable = true; | ||
29 | /** | ||
30 | * 对话框透明度,范围:0-1;1不透明 | ||
31 | */ | ||
32 | public float alpha = 1f; | ||
33 | /** | ||
34 | * 对话框宽度,范围:0-1;1整屏宽 | ||
35 | */ | ||
36 | public float width = 0.9f; | ||
37 | /** | ||
38 | * 对话框与屏幕边距 | ||
39 | */ | ||
40 | public int[] mPadding; | ||
41 | /** | ||
42 | * 对话框弹出动画,StyleRes | ||
43 | */ | ||
44 | public int animStyle; | ||
45 | /** | ||
46 | * 对话框刷新动画,AnimRes | ||
47 | */ | ||
48 | public int refreshAnimation; | ||
49 | /** | ||
50 | * 对话框背景是否昏暗,默认true | ||
51 | */ | ||
52 | public boolean isDimEnabled = true; | ||
53 | /** | ||
54 | * 对话框的背景色透明,因为列表模式情况,内容与按钮中间有距离 | ||
55 | */ | ||
56 | public int backgroundColor = Color.TRANSPARENT; | ||
57 | /** | ||
58 | * 对话框的圆角半径 | ||
59 | */ | ||
60 | public int radius = CircleDimen.RADIUS; | ||
61 | /** | ||
62 | * 对话框 x 坐标偏移 | ||
63 | */ | ||
64 | public int xOff; | ||
65 | /** | ||
66 | * 对话框 y 坐标偏移 | ||
67 | */ | ||
68 | public int yOff; | ||
69 | |||
70 | @Override | ||
71 | public int describeContents() { | ||
72 | return 0; | ||
73 | } | ||
74 | |||
75 | @Override | ||
76 | public void writeToParcel(Parcel dest, int flags) { | ||
77 | dest.writeInt(this.gravity); | ||
78 | dest.writeByte(this.canceledOnTouchOutside ? (byte) 1 : (byte) 0); | ||
79 | dest.writeByte(this.cancelable ? (byte) 1 : (byte) 0); | ||
80 | dest.writeFloat(this.alpha); | ||
81 | dest.writeFloat(this.width); | ||
82 | dest.writeIntArray(this.mPadding); | ||
83 | dest.writeInt(this.animStyle); | ||
84 | dest.writeInt(this.refreshAnimation); | ||
85 | dest.writeByte(this.isDimEnabled ? (byte) 1 : (byte) 0); | ||
86 | dest.writeInt(this.backgroundColor); | ||
87 | dest.writeInt(this.radius); | ||
88 | dest.writeInt(this.xOff); | ||
89 | dest.writeInt(this.yOff); | ||
90 | } | ||
91 | |||
92 | public DialogParams() { | ||
93 | } | ||
94 | |||
95 | protected DialogParams(Parcel in) { | ||
96 | this.gravity = in.readInt(); | ||
97 | this.canceledOnTouchOutside = in.readByte() != 0; | ||
98 | this.cancelable = in.readByte() != 0; | ||
99 | this.alpha = in.readFloat(); | ||
100 | this.width = in.readFloat(); | ||
101 | this.mPadding = in.createIntArray(); | ||
102 | this.animStyle = in.readInt(); | ||
103 | this.refreshAnimation = in.readInt(); | ||
104 | this.isDimEnabled = in.readByte() != 0; | ||
105 | this.backgroundColor = in.readInt(); | ||
106 | this.radius = in.readInt(); | ||
107 | this.xOff = in.readInt(); | ||
108 | this.yOff = in.readInt(); | ||
109 | } | ||
110 | |||
111 | public static final Parcelable.Creator<DialogParams> CREATOR = new Parcelable.Creator<DialogParams>() { | ||
112 | @Override | ||
113 | public DialogParams createFromParcel(Parcel source) { | ||
114 | return new DialogParams(source); | ||
115 | } | ||
116 | |||
117 | @Override | ||
118 | public DialogParams[] newArray(int size) { | ||
119 | return new DialogParams[size]; | ||
120 | } | ||
121 | }; | ||
122 | } | ||
123 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/params/InputParams.java
File was created | 1 | package com.mylhyl.circledialog.params; | |
2 | |||
3 | import android.graphics.Color; | ||
4 | import android.os.Parcel; | ||
5 | import android.os.Parcelable; | ||
6 | |||
7 | import com.mylhyl.circledialog.res.values.CircleColor; | ||
8 | import com.mylhyl.circledialog.res.values.CircleDimen; | ||
9 | |||
10 | import java.io.Serializable; | ||
11 | |||
12 | /** | ||
13 | * 输入框参数 | ||
14 | * Created by hupei on 2017/3/31. | ||
15 | */ | ||
16 | public class InputParams implements Parcelable { | ||
17 | private static final int[] MARGINS = {50, 20, 50, 40}; | ||
18 | |||
19 | /** | ||
20 | * 输入框与body视图的距离 | ||
21 | */ | ||
22 | public int[] margins = MARGINS; | ||
23 | /** | ||
24 | * 输入框的高度 | ||
25 | */ | ||
26 | public int inputHeight = CircleDimen.INPUT_HEIGHT; | ||
27 | /** | ||
28 | * 输入框提示语 | ||
29 | */ | ||
30 | public String hintText; | ||
31 | /** | ||
32 | * 输入框提示语颜色 | ||
33 | */ | ||
34 | public int hintTextColor = CircleColor.content; | ||
35 | /** | ||
36 | * 输入框背景资源文件 | ||
37 | */ | ||
38 | public int inputBackgroundResourceId; | ||
39 | /** | ||
40 | * 输入框边框线条粗细 | ||
41 | */ | ||
42 | public int strokeWidth = 1; | ||
43 | /** | ||
44 | * 输入框边框线条颜色 | ||
45 | */ | ||
46 | public int strokeColor = CircleColor.inputStroke; | ||
47 | /** | ||
48 | * 输入框的背景 | ||
49 | */ | ||
50 | public int inputBackgroundColor = Color.TRANSPARENT; | ||
51 | /** | ||
52 | * body视图的背景色 | ||
53 | */ | ||
54 | public int backgroundColor; | ||
55 | /** | ||
56 | * 输入框字体大小 | ||
57 | */ | ||
58 | public int textSize = CircleDimen.CONTENT_TEXT_SIZE; | ||
59 | /** | ||
60 | * 输入框字体颜色 | ||
61 | */ | ||
62 | public int textColor = CircleColor.title; | ||
63 | |||
64 | @Override | ||
65 | public int describeContents() { | ||
66 | return 0; | ||
67 | } | ||
68 | |||
69 | @Override | ||
70 | public void writeToParcel(Parcel dest, int flags) { | ||
71 | dest.writeIntArray(this.margins); | ||
72 | dest.writeInt(this.inputHeight); | ||
73 | dest.writeString(this.hintText); | ||
74 | dest.writeInt(this.hintTextColor); | ||
75 | dest.writeInt(this.inputBackgroundResourceId); | ||
76 | dest.writeInt(this.strokeWidth); | ||
77 | dest.writeInt(this.strokeColor); | ||
78 | dest.writeInt(this.inputBackgroundColor); | ||
79 | dest.writeInt(this.backgroundColor); | ||
80 | dest.writeInt(this.textSize); | ||
81 | dest.writeInt(this.textColor); | ||
82 | } | ||
83 | |||
84 | public InputParams() { | ||
85 | } | ||
86 | |||
87 | protected InputParams(Parcel in) { | ||
88 | this.margins = in.createIntArray(); | ||
89 | this.inputHeight = in.readInt(); | ||
90 | this.hintText = in.readString(); | ||
91 | this.hintTextColor = in.readInt(); | ||
92 | this.inputBackgroundResourceId = in.readInt(); | ||
93 | this.strokeWidth = in.readInt(); | ||
94 | this.strokeColor = in.readInt(); | ||
95 | this.inputBackgroundColor = in.readInt(); | ||
96 | this.backgroundColor = in.readInt(); | ||
97 | this.textSize = in.readInt(); | ||
98 | this.textColor = in.readInt(); | ||
99 | } | ||
100 | |||
101 | public static final Parcelable.Creator<InputParams> CREATOR = new Parcelable | ||
102 | .Creator<InputParams>() { | ||
103 | @Override | ||
104 | public InputParams createFromParcel(Parcel source) { | ||
105 | return new InputParams(source); | ||
106 | } | ||
107 | |||
108 | @Override | ||
109 | public InputParams[] newArray(int size) { | ||
110 | return new InputParams[size]; | ||
111 | } | ||
112 | }; | ||
113 | } | ||
114 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/params/ItemsParams.java
File was created | 1 | package com.mylhyl.circledialog.params; | |
2 | |||
3 | import android.os.Parcel; | ||
4 | import android.os.Parcelable; | ||
5 | import android.widget.AdapterView; | ||
6 | |||
7 | import com.mylhyl.circledialog.res.values.CircleColor; | ||
8 | import com.mylhyl.circledialog.res.values.CircleDimen; | ||
9 | |||
10 | import java.io.Serializable; | ||
11 | |||
12 | /** | ||
13 | * items 内容参数 | ||
14 | * Created by hupei on 2017/3/30. | ||
15 | */ | ||
16 | public class ItemsParams implements Parcelable { | ||
17 | public void dismiss() { | ||
18 | } | ||
19 | |||
20 | /** | ||
21 | * item点击事件 | ||
22 | */ | ||
23 | public AdapterView.OnItemClickListener listener; | ||
24 | /** | ||
25 | * item高度 | ||
26 | */ | ||
27 | public int itemHeight = CircleDimen.ITEM_HEIGHT; | ||
28 | /** | ||
29 | * item内间距 | ||
30 | */ | ||
31 | public int[] padding; | ||
32 | /** | ||
33 | * 数据源:array or list | ||
34 | */ | ||
35 | public Object items; | ||
36 | /** | ||
37 | * item背景色 | ||
38 | */ | ||
39 | public int backgroundColor; | ||
40 | /** | ||
41 | * item字体色 | ||
42 | */ | ||
43 | public int textColor = CircleColor.content; | ||
44 | /** | ||
45 | * item字体大小 | ||
46 | */ | ||
47 | public int textSize = CircleDimen.CONTENT_TEXT_SIZE; | ||
48 | |||
49 | @Override | ||
50 | public int describeContents() { | ||
51 | return 0; | ||
52 | } | ||
53 | |||
54 | @Override | ||
55 | public void writeToParcel(Parcel dest, int flags) { | ||
56 | dest.writeInt(this.itemHeight); | ||
57 | dest.writeIntArray(this.padding); | ||
58 | dest.writeInt(this.backgroundColor); | ||
59 | dest.writeInt(this.textColor); | ||
60 | dest.writeInt(this.textSize); | ||
61 | } | ||
62 | |||
63 | public ItemsParams() { | ||
64 | } | ||
65 | |||
66 | protected ItemsParams(Parcel in) { | ||
67 | this.itemHeight = in.readInt(); | ||
68 | this.padding = in.createIntArray(); | ||
69 | this.backgroundColor = in.readInt(); | ||
70 | this.textColor = in.readInt(); | ||
71 | this.textSize = in.readInt(); | ||
72 | } | ||
73 | |||
74 | public static final Parcelable.Creator<ItemsParams> CREATOR = new Parcelable.Creator<ItemsParams>() { | ||
75 | @Override | ||
76 | public ItemsParams createFromParcel(Parcel source) { | ||
77 | return new ItemsParams(source); | ||
78 | } | ||
79 | |||
80 | @Override | ||
81 | public ItemsParams[] newArray(int size) { | ||
82 | return new ItemsParams[size]; | ||
83 | } | ||
84 | }; | ||
85 | } | ||
86 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/params/ProgressParams.java
File was created | 1 | package com.mylhyl.circledialog.params; | |
2 | |||
3 | import android.os.Parcel; | ||
4 | import android.os.Parcelable; | ||
5 | |||
6 | import com.mylhyl.circledialog.res.values.CircleColor; | ||
7 | import com.mylhyl.circledialog.res.values.CircleDimen; | ||
8 | |||
9 | /** | ||
10 | * 进度条参数 | ||
11 | * Created by hupei on 2017/3/31. | ||
12 | */ | ||
13 | public class ProgressParams implements Parcelable { | ||
14 | |||
15 | private static final int[] MARGINS = {20, 45, 20, 45}; | ||
16 | private static final int[] TEXT_PADDING = {0, 0, 0, 45}; | ||
17 | |||
18 | /** | ||
19 | * 水平进度条 | ||
20 | */ | ||
21 | public static final int STYLE_HORIZONTAL = 0; | ||
22 | /** | ||
23 | * 旋转进度条 | ||
24 | */ | ||
25 | public static final int STYLE_SPINNER = 1; | ||
26 | |||
27 | /** | ||
28 | * 进度条样式,默认水平样式 | ||
29 | */ | ||
30 | public int style = STYLE_HORIZONTAL; | ||
31 | /** | ||
32 | * 进度条与body的边距 | ||
33 | */ | ||
34 | public int[] margins = MARGINS; | ||
35 | /** | ||
36 | * 底部文字内边距 | ||
37 | */ | ||
38 | public int[] padding = TEXT_PADDING; | ||
39 | /** | ||
40 | * 进度条资源背景 | ||
41 | */ | ||
42 | public int progressDrawableId; | ||
43 | /** | ||
44 | * 进度条高度 | ||
45 | */ | ||
46 | public int progressHeight; | ||
47 | /** | ||
48 | * 最大刻度 | ||
49 | */ | ||
50 | public int max; | ||
51 | /** | ||
52 | * 刻度 | ||
53 | */ | ||
54 | public int progress; | ||
55 | /** | ||
56 | * 进度条显示的文字,支持String.format() 例如:已经下载%s | ||
57 | */ | ||
58 | public String text = ""; | ||
59 | |||
60 | /** | ||
61 | * body背景颜色 | ||
62 | */ | ||
63 | public int backgroundColor; | ||
64 | /** | ||
65 | * 文本字体颜色 | ||
66 | */ | ||
67 | public int textColor = CircleColor.content; | ||
68 | /** | ||
69 | * 文本字体大小 | ||
70 | */ | ||
71 | public int textSize = CircleDimen.CONTENT_TEXT_SIZE; | ||
72 | |||
73 | @Override | ||
74 | public int describeContents() { | ||
75 | return 0; | ||
76 | } | ||
77 | |||
78 | @Override | ||
79 | public void writeToParcel(Parcel dest, int flags) { | ||
80 | dest.writeInt(this.style); | ||
81 | dest.writeIntArray(this.margins); | ||
82 | dest.writeIntArray(this.padding); | ||
83 | dest.writeInt(this.progressDrawableId); | ||
84 | dest.writeInt(this.progressHeight); | ||
85 | dest.writeInt(this.max); | ||
86 | dest.writeInt(this.progress); | ||
87 | dest.writeString(this.text); | ||
88 | dest.writeInt(this.backgroundColor); | ||
89 | dest.writeInt(this.textColor); | ||
90 | dest.writeInt(this.textSize); | ||
91 | } | ||
92 | |||
93 | public ProgressParams() { | ||
94 | } | ||
95 | |||
96 | protected ProgressParams(Parcel in) { | ||
97 | this.style = in.readInt(); | ||
98 | this.margins = in.createIntArray(); | ||
99 | this.padding = in.createIntArray(); | ||
100 | this.progressDrawableId = in.readInt(); | ||
101 | this.progressHeight = in.readInt(); | ||
102 | this.max = in.readInt(); | ||
103 | this.progress = in.readInt(); | ||
104 | this.text = in.readString(); | ||
105 | this.backgroundColor = in.readInt(); | ||
106 | this.textColor = in.readInt(); | ||
107 | this.textSize = in.readInt(); | ||
108 | } | ||
109 | |||
110 | public static final Parcelable.Creator<ProgressParams> CREATOR = new Parcelable | ||
111 | .Creator<ProgressParams>() { | ||
112 | @Override | ||
113 | public ProgressParams createFromParcel(Parcel source) { | ||
114 | return new ProgressParams(source); | ||
115 | } | ||
116 | |||
117 | @Override | ||
118 | public ProgressParams[] newArray(int size) { | ||
119 | return new ProgressParams[size]; | ||
120 | } | ||
121 | }; | ||
122 | } | ||
123 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/params/TextParams.java
File was created | 1 | package com.mylhyl.circledialog.params; | |
2 | |||
3 | import android.os.Parcel; | ||
4 | import android.os.Parcelable; | ||
5 | import android.view.Gravity; | ||
6 | |||
7 | import com.mylhyl.circledialog.res.values.CircleColor; | ||
8 | import com.mylhyl.circledialog.res.values.CircleDimen; | ||
9 | |||
10 | /** | ||
11 | * 文本内容参数 | ||
12 | * Created by hupei on 2017/3/30. | ||
13 | */ | ||
14 | public class TextParams implements Parcelable { | ||
15 | /** | ||
16 | * body文本内间距 | ||
17 | */ | ||
18 | public int[] padding; | ||
19 | /** | ||
20 | * 文本 | ||
21 | */ | ||
22 | public String text; | ||
23 | /** | ||
24 | * 文本高度 | ||
25 | */ | ||
26 | public int height = CircleDimen.TITLE_HEIGHT; | ||
27 | /** | ||
28 | * 文本背景颜色 | ||
29 | */ | ||
30 | public int backgroundColor; | ||
31 | /** | ||
32 | * 文本字体颜色 | ||
33 | */ | ||
34 | public int textColor = CircleColor.content; | ||
35 | /** | ||
36 | * 文本字体大小 | ||
37 | */ | ||
38 | public int textSize = CircleDimen.CONTENT_TEXT_SIZE; | ||
39 | |||
40 | public int gravity = Gravity.CENTER; | ||
41 | |||
42 | @Override | ||
43 | public int describeContents() { | ||
44 | return 0; | ||
45 | } | ||
46 | |||
47 | @Override | ||
48 | public void writeToParcel(Parcel dest, int flags) { | ||
49 | dest.writeIntArray(this.padding); | ||
50 | dest.writeString(this.text); | ||
51 | dest.writeInt(this.height); | ||
52 | dest.writeInt(this.backgroundColor); | ||
53 | dest.writeInt(this.textColor); | ||
54 | dest.writeInt(this.textSize); | ||
55 | dest.writeInt(this.gravity); | ||
56 | } | ||
57 | |||
58 | public TextParams() { | ||
59 | } | ||
60 | |||
61 | protected TextParams(Parcel in) { | ||
62 | this.padding = in.createIntArray(); | ||
63 | this.text = in.readString(); | ||
64 | this.height = in.readInt(); | ||
65 | this.backgroundColor = in.readInt(); | ||
66 | this.textColor = in.readInt(); | ||
67 | this.textSize = in.readInt(); | ||
68 | this.gravity = in.readInt(); | ||
69 | } | ||
70 | |||
71 | public static final Parcelable.Creator<TextParams> CREATOR = new Parcelable | ||
72 | .Creator<TextParams>() { | ||
73 | @Override | ||
74 | public TextParams createFromParcel(Parcel source) { | ||
75 | return new TextParams(source); | ||
76 | } | ||
77 | |||
78 | @Override | ||
79 | public TextParams[] newArray(int size) { | ||
80 | return new TextParams[size]; | ||
81 | } | ||
82 | }; | ||
83 | } | ||
84 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/params/TitleParams.java
File was created | 1 | package com.mylhyl.circledialog.params; | |
2 | |||
3 | import android.os.Parcel; | ||
4 | import android.os.Parcelable; | ||
5 | import android.view.Gravity; | ||
6 | |||
7 | import com.mylhyl.circledialog.res.values.CircleColor; | ||
8 | import com.mylhyl.circledialog.res.values.CircleDimen; | ||
9 | |||
10 | /** | ||
11 | * 标题参数 | ||
12 | * Created by hupei on 2017/3/30. | ||
13 | */ | ||
14 | public class TitleParams implements Parcelable { | ||
15 | /** | ||
16 | * 标题 | ||
17 | */ | ||
18 | public String text; | ||
19 | /** | ||
20 | * 标题高度 | ||
21 | */ | ||
22 | public int height = CircleDimen.TITLE_HEIGHT; | ||
23 | /** | ||
24 | * 标题字体大小 | ||
25 | */ | ||
26 | public int textSize = CircleDimen.TITLE_TEXT_SIZE; | ||
27 | /** | ||
28 | * 标题字体颜色 | ||
29 | */ | ||
30 | public int textColor = CircleColor.title; | ||
31 | /** | ||
32 | * 标题背景颜色 | ||
33 | */ | ||
34 | public int backgroundColor; | ||
35 | |||
36 | public int gravity = Gravity.CENTER; | ||
37 | |||
38 | @Override | ||
39 | public int describeContents() { | ||
40 | return 0; | ||
41 | } | ||
42 | |||
43 | @Override | ||
44 | public void writeToParcel(Parcel dest, int flags) { | ||
45 | dest.writeString(this.text); | ||
46 | dest.writeInt(this.height); | ||
47 | dest.writeInt(this.textSize); | ||
48 | dest.writeInt(this.textColor); | ||
49 | dest.writeInt(this.backgroundColor); | ||
50 | dest.writeInt(this.gravity); | ||
51 | } | ||
52 | |||
53 | public TitleParams() { | ||
54 | } | ||
55 | |||
56 | protected TitleParams(Parcel in) { | ||
57 | this.text = in.readString(); | ||
58 | this.height = in.readInt(); | ||
59 | this.textSize = in.readInt(); | ||
60 | this.textColor = in.readInt(); | ||
61 | this.backgroundColor = in.readInt(); | ||
62 | this.gravity = in.readInt(); | ||
63 | } | ||
64 | |||
65 | public static final Parcelable.Creator<TitleParams> CREATOR = new Parcelable | ||
66 | .Creator<TitleParams>() { | ||
67 | @Override | ||
68 | public TitleParams createFromParcel(Parcel source) { | ||
69 | return new TitleParams(source); | ||
70 | } | ||
71 | |||
72 | @Override | ||
73 | public TitleParams[] newArray(int size) { | ||
74 | return new TitleParams[size]; | ||
75 | } | ||
76 | }; | ||
77 | } | ||
78 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/res/drawable/CircleDrawable.java
File was created | 1 | package com.mylhyl.circledialog.res.drawable; | |
2 | |||
3 | import android.graphics.drawable.ShapeDrawable; | ||
4 | import android.graphics.drawable.shapes.RoundRectShape; | ||
5 | |||
6 | /** | ||
7 | * 圆角 | ||
8 | * Created by hupei on 2017/3/29. | ||
9 | */ | ||
10 | public class CircleDrawable extends ShapeDrawable { | ||
11 | |||
12 | public CircleDrawable(int backgroundColor, int radius) { | ||
13 | this(backgroundColor, radius, radius, radius, radius); | ||
14 | } | ||
15 | |||
16 | public CircleDrawable(int backgroundColor, int leftTopRadius, int rightTopRadius | ||
17 | , int rightBottomRadius, int leftBottomRadius) { | ||
18 | getPaint().setColor(backgroundColor);//内部填充颜色 | ||
19 | //圆角半径 | ||
20 | setShape(DrawableHelper.getRoundRectShape(leftTopRadius, rightTopRadius, rightBottomRadius, leftBottomRadius)); | ||
21 | } | ||
22 | |||
23 | } | ||
24 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/res/drawable/DrawableHelper.java
File was created | 1 | package com.mylhyl.circledialog.res.drawable; | |
2 | |||
3 | import android.graphics.drawable.shapes.RoundRectShape; | ||
4 | |||
5 | /** | ||
6 | * Created by hupei on 2017/3/30. | ||
7 | */ | ||
8 | |||
9 | class DrawableHelper { | ||
10 | |||
11 | public static RoundRectShape getRoundRectShape(int leftTop, int rightTop, int rightBottom, int leftBottom) { | ||
12 | float outerRadii[] = new float[8]; | ||
13 | if (leftTop > 0) { | ||
14 | outerRadii[0] = leftTop; | ||
15 | outerRadii[1] = leftTop; | ||
16 | } | ||
17 | if (rightTop > 0) { | ||
18 | outerRadii[2] = rightTop; | ||
19 | outerRadii[3] = rightTop; | ||
20 | } | ||
21 | if (rightBottom > 0) { | ||
22 | outerRadii[4] = rightBottom; | ||
23 | outerRadii[5] = rightBottom; | ||
24 | } | ||
25 | if (leftBottom > 0) { | ||
26 | outerRadii[6] = leftBottom; | ||
27 | outerRadii[7] = leftBottom; | ||
28 | } | ||
29 | return new RoundRectShape(outerRadii, null, null); | ||
30 | } | ||
31 | } | ||
32 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/res/drawable/InputDrawable.java
File was created | 1 | package com.mylhyl.circledialog.res.drawable; | |
2 | |||
3 | import android.graphics.drawable.GradientDrawable; | ||
4 | |||
5 | /** | ||
6 | * 输入框背景 | ||
7 | * Created by hupei on 2017/3/31. | ||
8 | */ | ||
9 | |||
10 | public class InputDrawable extends GradientDrawable { | ||
11 | public InputDrawable(int strokeWidth, int strokeColor, int backgroundColor) { | ||
12 | setColor(backgroundColor);//内部填充颜色 | ||
13 | setStroke(strokeWidth, strokeColor);//边框宽度,边框颜色 | ||
14 | } | ||
15 | } | ||
16 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/res/drawable/ProgressDrawable.java
File was created | 1 | package com.mylhyl.circledialog.res.drawable; | |
2 | |||
3 | import android.graphics.drawable.ClipDrawable; | ||
4 | import android.graphics.drawable.Drawable; | ||
5 | import android.graphics.drawable.GradientDrawable; | ||
6 | import android.graphics.drawable.LayerDrawable; | ||
7 | import android.view.Gravity; | ||
8 | |||
9 | /** | ||
10 | * 进度条背景,不提供内置水平样式 | ||
11 | * Created by hupei on 2017/3/29. | ||
12 | */ | ||
13 | @Deprecated | ||
14 | public final class ProgressDrawable { | ||
15 | private static final int colorsBg[] = {0xffBEBEBE, 0xffF5F5F5}; | ||
16 | private static final int colorsSecondaryProgress[] = {0xff85B0E9, 0xff165CBC}; | ||
17 | private static final int colorsProgress[] = {0xff85B0E9, 0xff165CBC}; | ||
18 | private LayerDrawable mLayerDrawable; | ||
19 | |||
20 | public ProgressDrawable() { | ||
21 | GradientDrawable background = createBackground(); | ||
22 | ClipDrawable secondaryProgress = createSecondaryProgress(); | ||
23 | ClipDrawable progress = createProgress(); | ||
24 | Drawable[] layers = {background, secondaryProgress, progress}; | ||
25 | mLayerDrawable = new LayerDrawable(layers); | ||
26 | mLayerDrawable.setId(0, android.R.id.background); | ||
27 | mLayerDrawable.setId(1, android.R.id.secondaryProgress); | ||
28 | mLayerDrawable.setId(2, android.R.id.progress); | ||
29 | } | ||
30 | |||
31 | private GradientDrawable createBackground() { | ||
32 | /* <item android:id="@android:id/background"> | ||
33 | <shape> | ||
34 | <corners android:radius="5dip" /> | ||
35 | |||
36 | <gradient | ||
37 | android:angle="270" | ||
38 | android:centerY="0.75" | ||
39 | android:endColor="#F5F5F5" | ||
40 | android:startColor="#BEBEBE" /> | ||
41 | </shape> | ||
42 | </item>*/ | ||
43 | |||
44 | GradientDrawable drawable = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colorsBg); | ||
45 | drawable.setCornerRadius(5); | ||
46 | drawable.setGradientCenter(0.5f, 0.75f); | ||
47 | return drawable; | ||
48 | } | ||
49 | |||
50 | private ClipDrawable createSecondaryProgress() { | ||
51 | /* <item android:id="@android:id/secondaryProgress"> | ||
52 | <clip> | ||
53 | <shape> | ||
54 | <corners android:radius="0dip" /> | ||
55 | |||
56 | <gradient | ||
57 | android:angle="270" | ||
58 | android:centerY="0.75" | ||
59 | android:endColor="#165CBC" | ||
60 | android:startColor="#85B0E9" /> | ||
61 | </shape> | ||
62 | </clip> | ||
63 | </item>*/ | ||
64 | GradientDrawable drawable = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, | ||
65 | colorsSecondaryProgress); | ||
66 | drawable.setGradientCenter(0.5f, 0.75f); | ||
67 | ClipDrawable clipDrawable = new ClipDrawable(drawable, Gravity.LEFT, ClipDrawable.HORIZONTAL); | ||
68 | return clipDrawable; | ||
69 | } | ||
70 | |||
71 | private ClipDrawable createProgress() { | ||
72 | /* <item android:id="@android:id/progress"> | ||
73 | <clip> | ||
74 | <shape> | ||
75 | <corners android:radius="5dip" /> | ||
76 | |||
77 | <gradient | ||
78 | android:angle="270" | ||
79 | android:centerY="0.75" | ||
80 | android:endColor="#165CBC" | ||
81 | android:startColor="#85B0E9" /> | ||
82 | </shape> | ||
83 | </clip> | ||
84 | </item>*/ | ||
85 | |||
86 | //android:angle 默认是Orientation.TOP_BOTTOM,见源码 GradientDrawableGradient_angle 处 | ||
87 | //见源码 updateGradientDrawableGradient | ||
88 | GradientDrawable drawable = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colorsProgress); | ||
89 | drawable.setCornerRadius(5);//android:radius | ||
90 | drawable.setGradientCenter(0.5f, 0.75f);//x默认是0.5,android:centerY | ||
91 | ClipDrawable clipDrawable = new ClipDrawable(drawable, Gravity.LEFT, ClipDrawable.HORIZONTAL); | ||
92 | return clipDrawable; | ||
93 | } | ||
94 | |||
95 | public LayerDrawable getLayerDrawable() { | ||
96 | return mLayerDrawable; | ||
97 | } | ||
98 | } | ||
99 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/res/drawable/SelectorBtn.java
File was created | 1 | package com.mylhyl.circledialog.res.drawable; | |
2 | |||
3 | import android.graphics.drawable.ShapeDrawable; | ||
4 | import android.graphics.drawable.StateListDrawable; | ||
5 | |||
6 | import com.mylhyl.circledialog.res.values.CircleColor; | ||
7 | |||
8 | /** | ||
9 | * 按钮的背景,有点击效果 | ||
10 | * Created by hupei on 2017/3/30. | ||
11 | */ | ||
12 | |||
13 | public class SelectorBtn extends StateListDrawable { | ||
14 | |||
15 | public SelectorBtn(int backgroundColor, int leftTopRadius, int rightTopRadius, int rightBottomRadius, int | ||
16 | leftBottomRadius) { | ||
17 | //按下 | ||
18 | ShapeDrawable drawablePress = new ShapeDrawable(DrawableHelper.getRoundRectShape(leftTopRadius, rightTopRadius, | ||
19 | rightBottomRadius, leftBottomRadius)); | ||
20 | drawablePress.getPaint().setColor(CircleColor.buttonPress); | ||
21 | //默认 | ||
22 | ShapeDrawable defaultDrawable = new ShapeDrawable(DrawableHelper.getRoundRectShape(leftTopRadius, | ||
23 | rightTopRadius, | ||
24 | rightBottomRadius, leftBottomRadius)); | ||
25 | defaultDrawable.getPaint().setColor(backgroundColor); | ||
26 | |||
27 | addState(new int[]{android.R.attr.state_pressed}, drawablePress); | ||
28 | addState(new int[]{-android.R.attr.state_pressed}, defaultDrawable); | ||
29 | } | ||
30 | } | ||
31 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/res/values/CircleColor.java
File was created | 1 | package com.mylhyl.circledialog.res.values; | |
2 | |||
3 | /** | ||
4 | * Created by hupei on 2017/3/29. | ||
5 | */ | ||
6 | public class CircleColor { | ||
7 | |||
8 | /** | ||
9 | * 对话框背景色 | ||
10 | */ | ||
11 | public static final int bgDialog = 0xFFf8f8f8; | ||
12 | |||
13 | /** | ||
14 | * 标题颜色 | ||
15 | */ | ||
16 | public static final int title = 0xFF000000; | ||
17 | /** | ||
18 | * 消息内容颜色 | ||
19 | */ | ||
20 | public static final int content = 0xFF8F8F8F; | ||
21 | /** | ||
22 | * 按钮颜色 | ||
23 | */ | ||
24 | public static final int button = 0xFF007AFF; | ||
25 | /** | ||
26 | * 线条颜色 | ||
27 | */ | ||
28 | public static final int divider = 0xFFD7D7DB; | ||
29 | /** | ||
30 | * 按钮点击颜色 | ||
31 | */ | ||
32 | public static final int buttonPress = 0xFFEAEAEA; | ||
33 | /** | ||
34 | * 输入框边框颜色 | ||
35 | */ | ||
36 | public static final int inputStroke = 0xFF808080; | ||
37 | } | ||
38 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/res/values/CircleDimen.java
File was created | 1 | package com.mylhyl.circledialog.res.values; | |
2 | |||
3 | /** | ||
4 | * Created by hupei on 2017/3/29. | ||
5 | */ | ||
6 | public class CircleDimen { | ||
7 | /** | ||
8 | * 所有的圆角 | ||
9 | */ | ||
10 | public static final int RADIUS = 30; | ||
11 | /** | ||
12 | * 标题高 | ||
13 | */ | ||
14 | public static final int TITLE_HEIGHT = 170; | ||
15 | /** | ||
16 | * 标题字体大小 | ||
17 | */ | ||
18 | public static final int TITLE_TEXT_SIZE = 60; | ||
19 | /** | ||
20 | * 文字消息字体大小 | ||
21 | */ | ||
22 | public static final int CONTENT_TEXT_SIZE = 50; | ||
23 | |||
24 | /** | ||
25 | * 列表每行高度 | ||
26 | */ | ||
27 | public static final int ITEM_HEIGHT = 170; | ||
28 | /** | ||
29 | * 底部按钮高度 | ||
30 | */ | ||
31 | public static final int FOOTER_HEIGHT = 150; | ||
32 | /** | ||
33 | * 底部按钮字体大小 | ||
34 | */ | ||
35 | public static final int FOOTER_TEXT_SIZE = 40; | ||
36 | |||
37 | /** | ||
38 | * 列表模式底部按钮与列表的距离 | ||
39 | */ | ||
40 | public static final int BUTTON_ITEMS_MARGIN = 15; | ||
41 | |||
42 | /** | ||
43 | * 输入框的高 | ||
44 | */ | ||
45 | public static final int INPUT_HEIGHT = 340; | ||
46 | /** | ||
47 | * 水平进度条高度 | ||
48 | */ | ||
49 | public static final int PROGRESS_HEIGHT_HORIZONTAL = 10; | ||
50 | /** | ||
51 | * 转换进度条高度 | ||
52 | */ | ||
53 | public static final int PROGRESS_HEIGHT_SPINNER = 80; | ||
54 | } | ||
55 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/scale/ScaleAdapter.java
File was created | 1 | package com.mylhyl.circledialog.scale; | |
2 | |||
3 | import android.content.Context; | ||
4 | |||
5 | /** | ||
6 | * Created by hupei on 2016/3/8 17:33. | ||
7 | */ | ||
8 | class ScaleAdapter { | ||
9 | |||
10 | private Context mContext; | ||
11 | |||
12 | public ScaleAdapter(Context context) { | ||
13 | mContext = context; | ||
14 | } | ||
15 | |||
16 | public float adapt(float scale, int screenWidth, int screenHeight) { | ||
17 | if (screenWidth < 720 || screenHeight < 720) {//针对小屏(小分辨率)设备做调整 | ||
18 | if (screenWidth <= 480 || screenHeight <= 480) {//普通480设备 | ||
19 | scale *= 1.2f; | ||
20 | } else { | ||
21 | if (ScaleUtils.getDevicePhysicalSize(mContext) < 4.0) {//小屏手机,较高分辨率(如 mx) | ||
22 | scale *= 1.3f; | ||
23 | } else {//华为U9200 | ||
24 | scale *= 1.05f; | ||
25 | } | ||
26 | } | ||
27 | } | ||
28 | return scale; | ||
29 | } | ||
30 | } | ||
31 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/scale/ScaleLayoutConfig.java
File was created | 1 | package com.mylhyl.circledialog.scale; | |
2 | |||
3 | import android.content.Context; | ||
4 | import android.content.pm.ApplicationInfo; | ||
5 | import android.content.pm.PackageManager; | ||
6 | |||
7 | /** | ||
8 | * Created by hupei on 2016/3/8 17:32. | ||
9 | */ | ||
10 | public class ScaleLayoutConfig { | ||
11 | private static ScaleLayoutConfig sInstance; | ||
12 | |||
13 | private static final String KEY_DESIGN_WIDTH = "design_width"; | ||
14 | private static final String KEY_DESIGN_HEIGHT = "design_height"; | ||
15 | |||
16 | private int mScreenWidth; | ||
17 | private int mScreenHeight; | ||
18 | |||
19 | private int mDesignWidth = 1080; | ||
20 | private int mDesignHeight = 1920; | ||
21 | |||
22 | private float mScale; | ||
23 | |||
24 | private ScaleLayoutConfig() { | ||
25 | } | ||
26 | |||
27 | public static void init(Context context) { | ||
28 | if (sInstance == null) { | ||
29 | sInstance = new ScaleLayoutConfig(); | ||
30 | sInstance.initInternal(context, new ScaleAdapter(context)); | ||
31 | } | ||
32 | } | ||
33 | |||
34 | public static ScaleLayoutConfig getInstance() { | ||
35 | if (sInstance == null) { | ||
36 | throw new IllegalStateException("Must init before using."); | ||
37 | } | ||
38 | return sInstance; | ||
39 | } | ||
40 | |||
41 | private void initInternal(Context context, ScaleAdapter scaleAdapter) { | ||
42 | getMetaData(context); | ||
43 | checkParams(); | ||
44 | int[] size = ScaleUtils.getRealScreenSize(context); | ||
45 | mScreenWidth = size[0]; | ||
46 | mScreenHeight = size[1]; | ||
47 | |||
48 | if (mScreenWidth > mScreenHeight) {//横屏状态下,宽高互换,按竖屏模式计算scale | ||
49 | mScreenWidth = mScreenWidth + mScreenHeight; | ||
50 | mScreenHeight = mScreenWidth - mScreenHeight; | ||
51 | mScreenWidth = mScreenWidth - mScreenHeight; | ||
52 | } | ||
53 | |||
54 | float deviceScale = (float) mScreenHeight / mScreenWidth; | ||
55 | float designScale = (float) mDesignHeight / mDesignWidth; | ||
56 | if (deviceScale <= designScale) {//高宽比小于等于标准比(较标准屏宽一些),以高为基准计算scale(以短边计算),否则以宽为基准计算scale | ||
57 | mScale = (float) mScreenHeight / mDesignHeight; | ||
58 | } else { | ||
59 | mScale = (float) mScreenWidth / mDesignWidth; | ||
60 | } | ||
61 | |||
62 | if (scaleAdapter != null) { | ||
63 | mScale = scaleAdapter.adapt(mScale, mScreenWidth, mScreenHeight); | ||
64 | } | ||
65 | } | ||
66 | |||
67 | private void getMetaData(Context context) { | ||
68 | PackageManager packageManager = context.getPackageManager(); | ||
69 | ApplicationInfo applicationInfo; | ||
70 | try { | ||
71 | applicationInfo = packageManager.getApplicationInfo(context | ||
72 | .getPackageName(), PackageManager.GET_META_DATA); | ||
73 | if (applicationInfo != null && applicationInfo.metaData != null | ||
74 | && applicationInfo.metaData.containsKey(KEY_DESIGN_WIDTH) | ||
75 | && applicationInfo.metaData.containsKey(KEY_DESIGN_HEIGHT)) { | ||
76 | mDesignWidth = (int) applicationInfo.metaData.get(KEY_DESIGN_WIDTH); | ||
77 | mDesignHeight = (int) applicationInfo.metaData.get(KEY_DESIGN_HEIGHT); | ||
78 | } | ||
79 | } catch (PackageManager.NameNotFoundException e) { | ||
80 | |||
81 | } | ||
82 | } | ||
83 | |||
84 | private void checkParams() { | ||
85 | if (mDesignHeight <= 0 || mDesignWidth <= 0) { | ||
86 | throw new RuntimeException( | ||
87 | "you must set " + KEY_DESIGN_WIDTH + " and " + KEY_DESIGN_HEIGHT + " > 0"); | ||
88 | } | ||
89 | } | ||
90 | |||
91 | public float getScale() { | ||
92 | return mScale; | ||
93 | } | ||
94 | } | ||
95 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/scale/ScaleUtils.java
File was created | 1 | package com.mylhyl.circledialog.scale; | |
2 | |||
3 | import android.content.Context; | ||
4 | import android.graphics.Point; | ||
5 | import android.os.Build; | ||
6 | import android.util.DisplayMetrics; | ||
7 | import android.view.Display; | ||
8 | import android.view.WindowManager; | ||
9 | |||
10 | /** | ||
11 | * Created by hupei on 2016/3/8 17:19. | ||
12 | */ | ||
13 | public class ScaleUtils { | ||
14 | public static int scaleValue(int val) { | ||
15 | return (int) (val * ScaleLayoutConfig.getInstance().getScale()); | ||
16 | } | ||
17 | |||
18 | public static int[] getRealScreenSize(Context context) { | ||
19 | |||
20 | int[] size = new int[2]; | ||
21 | |||
22 | WindowManager w = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); | ||
23 | Display d = w.getDefaultDisplay(); | ||
24 | DisplayMetrics metrics = new DisplayMetrics(); | ||
25 | d.getMetrics(metrics); | ||
26 | |||
27 | // since SDK_INT = 1; | ||
28 | int widthPixels = metrics.widthPixels; | ||
29 | int heightPixels = metrics.heightPixels; | ||
30 | // includes window decorations (statusbar bar/menu bar) | ||
31 | if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17) { | ||
32 | try { | ||
33 | widthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(d); | ||
34 | heightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(d); | ||
35 | } catch (Exception ignored) { | ||
36 | } | ||
37 | } else if (Build.VERSION.SDK_INT >= 17) {// includes window decorations (statusbar bar/menu bar) | ||
38 | Point realSize = new Point(); | ||
39 | d.getRealSize(realSize); | ||
40 | widthPixels = realSize.x; | ||
41 | heightPixels = realSize.y; | ||
42 | } | ||
43 | |||
44 | size[0] = widthPixels; | ||
45 | size[1] = heightPixels; | ||
46 | return size; | ||
47 | } | ||
48 | |||
49 | |||
50 | public static double getDevicePhysicalSize(Context context) { | ||
51 | int[] size = getRealScreenSize(context); | ||
52 | DisplayMetrics dm = context.getResources().getDisplayMetrics(); | ||
53 | double x = Math.pow(size[0] / dm.xdpi, 2); | ||
54 | double y = Math.pow(size[1] / dm.ydpi, 2); | ||
55 | |||
56 | return Math.sqrt(x + y); | ||
57 | } | ||
58 | } | ||
59 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/BodyInputView.java
File was created | 1 | package com.mylhyl.circledialog.view; | |
2 | |||
3 | import android.content.Context; | ||
4 | import android.os.Build; | ||
5 | import android.widget.EditText; | ||
6 | import android.widget.LinearLayout; | ||
7 | |||
8 | import com.mylhyl.circledialog.params.ButtonParams; | ||
9 | import com.mylhyl.circledialog.params.CircleParams; | ||
10 | import com.mylhyl.circledialog.params.DialogParams; | ||
11 | import com.mylhyl.circledialog.params.InputParams; | ||
12 | import com.mylhyl.circledialog.params.TitleParams; | ||
13 | import com.mylhyl.circledialog.res.drawable.CircleDrawable; | ||
14 | import com.mylhyl.circledialog.res.drawable.InputDrawable; | ||
15 | import com.mylhyl.circledialog.res.values.CircleColor; | ||
16 | |||
17 | /** | ||
18 | * Created by hupei on 2017/3/31. | ||
19 | */ | ||
20 | |||
21 | class BodyInputView extends ScaleLinearLayout { | ||
22 | private ScaleEditText mEditText; | ||
23 | |||
24 | public BodyInputView(Context context, CircleParams params) { | ||
25 | super(context); | ||
26 | init(context, params); | ||
27 | } | ||
28 | |||
29 | private void init(Context context, CircleParams params) { | ||
30 | DialogParams dialogParams = params.dialogParams; | ||
31 | TitleParams titleParams = params.titleParams; | ||
32 | InputParams inputParams = params.inputParams; | ||
33 | ButtonParams negativeParams = params.negativeParams; | ||
34 | ButtonParams positiveParams = params.positiveParams; | ||
35 | |||
36 | //如果标题没有背景色,则使用默认色 | ||
37 | int backgroundColor = inputParams.backgroundColor != 0 ? inputParams.backgroundColor : | ||
38 | CircleColor.bgDialog; | ||
39 | |||
40 | //有标题没按钮则底部圆角 | ||
41 | if (titleParams != null && negativeParams == null && positiveParams == null) { | ||
42 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | ||
43 | setBackground(new CircleDrawable(backgroundColor, 0, 0, dialogParams.radius, | ||
44 | dialogParams.radius)); | ||
45 | } else { | ||
46 | setBackgroundDrawable(new CircleDrawable(backgroundColor, 0, 0, dialogParams | ||
47 | .radius, dialogParams.radius)); | ||
48 | } | ||
49 | } | ||
50 | //没标题有按钮则顶部圆角 | ||
51 | else if (titleParams == null && (negativeParams != null || positiveParams != null)) { | ||
52 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | ||
53 | setBackground(new CircleDrawable(backgroundColor, dialogParams.radius, dialogParams | ||
54 | .radius, 0, 0)); | ||
55 | } else { | ||
56 | setBackgroundDrawable(new CircleDrawable(backgroundColor, dialogParams.radius, | ||
57 | dialogParams.radius, 0, 0)); | ||
58 | } | ||
59 | } | ||
60 | //没标题没按钮则全部圆角 | ||
61 | else if (titleParams == null && negativeParams == null && positiveParams == null) { | ||
62 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | ||
63 | setBackground(new CircleDrawable(backgroundColor, dialogParams.radius)); | ||
64 | } else { | ||
65 | setBackgroundDrawable(new CircleDrawable(backgroundColor, dialogParams.radius)); | ||
66 | } | ||
67 | } | ||
68 | //有标题有按钮则不用考虑圆角 | ||
69 | else setBackgroundColor(backgroundColor); | ||
70 | |||
71 | mEditText = new ScaleEditText(context); | ||
72 | mEditText.setHint(inputParams.hintText); | ||
73 | mEditText.setHintTextColor(inputParams.hintTextColor); | ||
74 | mEditText.setTextSize(inputParams.textSize); | ||
75 | mEditText.setTextColor(inputParams.textColor); | ||
76 | mEditText.setHeight(inputParams.inputHeight); | ||
77 | |||
78 | int backgroundResourceId = inputParams.inputBackgroundResourceId; | ||
79 | if (backgroundResourceId == 0) { | ||
80 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | ||
81 | mEditText.setBackground(new InputDrawable(inputParams.strokeWidth, inputParams | ||
82 | .strokeColor, inputParams.inputBackgroundColor)); | ||
83 | } else { | ||
84 | mEditText.setBackgroundDrawable(new InputDrawable(inputParams.strokeWidth, | ||
85 | inputParams.strokeColor, inputParams.inputBackgroundColor)); | ||
86 | } | ||
87 | } else mEditText.setBackgroundResource(backgroundResourceId); | ||
88 | |||
89 | LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, | ||
90 | LayoutParams.WRAP_CONTENT); | ||
91 | int[] margins = inputParams.margins; | ||
92 | if (margins != null) { | ||
93 | layoutParams.setMargins(margins[0], margins[1], margins[2], margins[3]); | ||
94 | } | ||
95 | addView(mEditText, layoutParams); | ||
96 | } | ||
97 | |||
98 | public EditText getInput() { | ||
99 | return mEditText; | ||
100 | } | ||
101 | } | ||
102 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/BodyItemsView.java
File was created | 1 | package com.mylhyl.circledialog.view; | |
2 | |||
3 | import android.content.Context; | ||
4 | import android.graphics.Color; | ||
5 | import android.graphics.drawable.ColorDrawable; | ||
6 | import android.os.Build; | ||
7 | import android.view.View; | ||
8 | import android.view.ViewGroup; | ||
9 | import android.widget.AdapterView; | ||
10 | import android.widget.BaseAdapter; | ||
11 | import android.widget.LinearLayout; | ||
12 | import android.widget.ListView; | ||
13 | import android.widget.TextView; | ||
14 | |||
15 | import com.mylhyl.circledialog.params.CircleParams; | ||
16 | import com.mylhyl.circledialog.params.ItemsParams; | ||
17 | import com.mylhyl.circledialog.params.TitleParams; | ||
18 | import com.mylhyl.circledialog.res.drawable.SelectorBtn; | ||
19 | import com.mylhyl.circledialog.res.values.CircleColor; | ||
20 | |||
21 | import java.util.Arrays; | ||
22 | import java.util.List; | ||
23 | |||
24 | /** | ||
25 | * Created by hupei on 2017/3/30. | ||
26 | */ | ||
27 | |||
28 | class BodyItemsView extends ListView { | ||
29 | private BaseAdapter mAdapter; | ||
30 | |||
31 | public BodyItemsView(Context context, CircleParams params) { | ||
32 | super(context); | ||
33 | init(context, params); | ||
34 | } | ||
35 | |||
36 | private void init(Context context, CircleParams params) { | ||
37 | final ItemsParams itemsParams = params.itemsParams; | ||
38 | |||
39 | LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LayoutParams | ||
40 | .MATCH_PARENT, LayoutParams | ||
41 | .MATCH_PARENT); | ||
42 | setLayoutParams(layoutParams); | ||
43 | |||
44 | setSelector(new ColorDrawable(Color.TRANSPARENT)); | ||
45 | setDivider(new ColorDrawable(CircleColor.divider)); | ||
46 | setDividerHeight(1); | ||
47 | |||
48 | setOnItemClickListener(new OnItemClickListener() { | ||
49 | @Override | ||
50 | public void onItemClick(AdapterView<?> parent, View view, int position, long id) { | ||
51 | itemsParams.dismiss(); | ||
52 | if (itemsParams.listener != null) | ||
53 | itemsParams.listener.onItemClick(parent, view, position, id); | ||
54 | } | ||
55 | }); | ||
56 | |||
57 | mAdapter = new ItemsAdapter(context, params); | ||
58 | setAdapter(mAdapter); | ||
59 | } | ||
60 | |||
61 | public void refreshItems() { | ||
62 | post(new Runnable() { | ||
63 | @Override | ||
64 | public void run() { | ||
65 | mAdapter.notifyDataSetChanged(); | ||
66 | } | ||
67 | }); | ||
68 | } | ||
69 | |||
70 | static class ItemsAdapter<T> extends BaseAdapter { | ||
71 | class ViewHolder { | ||
72 | TextView item; | ||
73 | } | ||
74 | |||
75 | private Context mContext; | ||
76 | private List<T> mItems; | ||
77 | private int mRadius; | ||
78 | private int mBackgroundColor; | ||
79 | private ItemsParams mItemsParams; | ||
80 | private TitleParams mTitleParams; | ||
81 | |||
82 | public ItemsAdapter(Context context, CircleParams params) { | ||
83 | this.mContext = context; | ||
84 | this.mTitleParams = params.titleParams; | ||
85 | this.mItemsParams = params.itemsParams; | ||
86 | this.mRadius = params.dialogParams.radius; | ||
87 | //如果没有背景色,则使用默认色 | ||
88 | this.mBackgroundColor = mItemsParams.backgroundColor != 0 ? mItemsParams | ||
89 | .backgroundColor : CircleColor | ||
90 | .bgDialog; | ||
91 | Object entity = this.mItemsParams.items; | ||
92 | if (entity != null && entity instanceof Iterable) { | ||
93 | this.mItems = (List<T>) entity; | ||
94 | } else if (entity != null && entity.getClass().isArray()) { | ||
95 | this.mItems = Arrays.asList((T[]) entity); | ||
96 | } else { | ||
97 | throw new IllegalArgumentException("entity must be an Array or an Iterable."); | ||
98 | } | ||
99 | } | ||
100 | |||
101 | @Override | ||
102 | public int getCount() { | ||
103 | if (mItems != null) | ||
104 | return mItems.size(); | ||
105 | return 0; | ||
106 | } | ||
107 | |||
108 | @Override | ||
109 | public T getItem(int position) { | ||
110 | if (mItems != null) | ||
111 | return mItems.get(position); | ||
112 | return null; | ||
113 | } | ||
114 | |||
115 | @Override | ||
116 | public long getItemId(int position) { | ||
117 | return 0; | ||
118 | } | ||
119 | |||
120 | @Override | ||
121 | public View getView(int position, View convertView, ViewGroup parent) { | ||
122 | ViewHolder viewHolder; | ||
123 | if (convertView == null) { | ||
124 | viewHolder = new ViewHolder(); | ||
125 | ScaleTextView textView = new ScaleTextView(mContext); | ||
126 | textView.setTextSize(mItemsParams.textSize); | ||
127 | textView.setTextColor(mItemsParams.textColor); | ||
128 | textView.setHeight(mItemsParams.itemHeight); | ||
129 | viewHolder.item = textView; | ||
130 | convertView = textView; | ||
131 | convertView.setTag(viewHolder); | ||
132 | } else { | ||
133 | viewHolder = (ViewHolder) convertView.getTag(); | ||
134 | } | ||
135 | |||
136 | //top | ||
137 | if (position == 0 && mTitleParams == null) { | ||
138 | if (getCount() == 1) { | ||
139 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | ||
140 | viewHolder.item.setBackground(new SelectorBtn(mBackgroundColor, mRadius, | ||
141 | mRadius, mRadius, mRadius)); | ||
142 | } else { | ||
143 | viewHolder.item.setBackgroundDrawable(new SelectorBtn(mBackgroundColor, | ||
144 | mRadius, mRadius, mRadius, mRadius)); | ||
145 | } | ||
146 | } else { | ||
147 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | ||
148 | viewHolder.item.setBackground(new SelectorBtn(mBackgroundColor, | ||
149 | mRadius, mRadius, 0, 0)); | ||
150 | } else { | ||
151 | viewHolder.item.setBackgroundDrawable(new SelectorBtn(mBackgroundColor, | ||
152 | mRadius, mRadius, 0, 0)); | ||
153 | } | ||
154 | } | ||
155 | } | ||
156 | //bottom | ||
157 | else if (position == getCount() - 1) { | ||
158 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | ||
159 | viewHolder.item.setBackground(new SelectorBtn(mBackgroundColor, 0, 0, | ||
160 | mRadius, mRadius)); | ||
161 | } else { | ||
162 | viewHolder.item.setBackgroundDrawable(new SelectorBtn(mBackgroundColor, 0, 0, | ||
163 | mRadius, mRadius)); | ||
164 | } | ||
165 | } | ||
166 | //middle | ||
167 | else { | ||
168 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | ||
169 | viewHolder.item.setBackground(new SelectorBtn(mBackgroundColor, 0, 0, 0, 0)); | ||
170 | } else { | ||
171 | viewHolder.item.setBackgroundDrawable(new SelectorBtn(mBackgroundColor, 0, 0, | ||
172 | 0, 0)); | ||
173 | } | ||
174 | } | ||
175 | viewHolder.item.setText(String.valueOf(getItem(position).toString())); | ||
176 | return convertView; | ||
177 | } | ||
178 | } | ||
179 | } | ||
180 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/BodyProgressView.java
File was created | 1 | package com.mylhyl.circledialog.view; | |
2 | |||
3 | import android.content.Context; | ||
4 | import android.os.Build; | ||
5 | import android.os.Handler; | ||
6 | import android.os.Message; | ||
7 | import android.text.TextUtils; | ||
8 | import android.widget.LinearLayout; | ||
9 | import android.widget.ProgressBar; | ||
10 | |||
11 | import com.mylhyl.circledialog.params.ButtonParams; | ||
12 | import com.mylhyl.circledialog.params.CircleParams; | ||
13 | import com.mylhyl.circledialog.params.DialogParams; | ||
14 | import com.mylhyl.circledialog.params.ProgressParams; | ||
15 | import com.mylhyl.circledialog.params.TitleParams; | ||
16 | import com.mylhyl.circledialog.res.drawable.CircleDrawable; | ||
17 | import com.mylhyl.circledialog.res.values.CircleColor; | ||
18 | import com.mylhyl.circledialog.res.values.CircleDimen; | ||
19 | |||
20 | import java.lang.reflect.Field; | ||
21 | import java.lang.reflect.Modifier; | ||
22 | |||
23 | /** | ||
24 | * Created by hupei on 2017/3/31. | ||
25 | */ | ||
26 | |||
27 | class BodyProgressView extends ScaleLinearLayout { | ||
28 | private ProgressParams mProgressParams; | ||
29 | private ProgressBar mProgressBar; | ||
30 | private Handler mViewUpdateHandler; | ||
31 | |||
32 | public BodyProgressView(Context context, CircleParams params) { | ||
33 | super(context); | ||
34 | init(context, params); | ||
35 | } | ||
36 | |||
37 | private void init(Context context, CircleParams params) { | ||
38 | setOrientation(LinearLayout.VERTICAL); | ||
39 | DialogParams dialogParams = params.dialogParams; | ||
40 | TitleParams titleParams = params.titleParams; | ||
41 | ButtonParams negativeParams = params.negativeParams; | ||
42 | ButtonParams positiveParams = params.positiveParams; | ||
43 | mProgressParams = params.progressParams; | ||
44 | |||
45 | //如果没有背景色,则使用默认色 | ||
46 | int backgroundColor = mProgressParams.backgroundColor != 0 ? mProgressParams | ||
47 | .backgroundColor : CircleColor | ||
48 | .bgDialog; | ||
49 | |||
50 | //有标题没按钮则底部圆角 | ||
51 | if (titleParams != null && negativeParams == null && positiveParams == null) { | ||
52 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | ||
53 | setBackground(new CircleDrawable(backgroundColor, 0, 0, dialogParams.radius, | ||
54 | dialogParams.radius)); | ||
55 | } else { | ||
56 | setBackgroundDrawable(new CircleDrawable(backgroundColor, 0, 0, dialogParams.radius, | ||
57 | dialogParams.radius)); | ||
58 | } | ||
59 | } | ||
60 | //没标题有按钮则顶部圆角 | ||
61 | else if (titleParams == null && (negativeParams != null || positiveParams != null)) { | ||
62 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | ||
63 | setBackground(new CircleDrawable(backgroundColor, dialogParams.radius, dialogParams | ||
64 | .radius, 0, 0)); | ||
65 | } else { | ||
66 | setBackgroundDrawable(new CircleDrawable(backgroundColor, dialogParams.radius, | ||
67 | dialogParams.radius, 0, 0)); | ||
68 | } | ||
69 | } | ||
70 | //没标题没按钮则全部圆角 | ||
71 | else if (titleParams == null && negativeParams == null && positiveParams == null) { | ||
72 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | ||
73 | setBackground(new CircleDrawable(backgroundColor, dialogParams.radius)); | ||
74 | } else { | ||
75 | setBackgroundDrawable(new CircleDrawable(backgroundColor, dialogParams.radius)); | ||
76 | } | ||
77 | } | ||
78 | //有标题有按钮则不用考虑圆角 | ||
79 | else setBackgroundColor(backgroundColor); | ||
80 | |||
81 | //自定义样式 | ||
82 | int progressDrawableId = mProgressParams.progressDrawableId; | ||
83 | //水平样式 | ||
84 | if (mProgressParams.style == ProgressParams.STYLE_HORIZONTAL) { | ||
85 | if (progressDrawableId != 0) { | ||
86 | mProgressBar = new ProgressBar(getContext()); | ||
87 | setFieldValue(mProgressBar, "mOnlyIndeterminate", new Boolean(false)); | ||
88 | mProgressBar.setIndeterminate(false); | ||
89 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) | ||
90 | mProgressBar.setProgressDrawableTiled(context.getDrawable(progressDrawableId)); | ||
91 | else | ||
92 | mProgressBar.setProgressDrawable(context.getResources().getDrawable | ||
93 | (progressDrawableId)); | ||
94 | } else { | ||
95 | mProgressBar = new ProgressBar(getContext(), null, android.R.attr | ||
96 | .progressBarStyleHorizontal); | ||
97 | } | ||
98 | mProgressParams.progressHeight = CircleDimen.PROGRESS_HEIGHT_HORIZONTAL; | ||
99 | } | ||
100 | //旋转样式 | ||
101 | else { | ||
102 | if (progressDrawableId != 0) { | ||
103 | mProgressBar = new ProgressBar(getContext()); | ||
104 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) | ||
105 | mProgressBar.setIndeterminateDrawableTiled(context.getDrawable | ||
106 | (progressDrawableId)); | ||
107 | else | ||
108 | mProgressBar.setIndeterminateDrawable(context.getResources().getDrawable | ||
109 | (progressDrawableId)); | ||
110 | } else { | ||
111 | mProgressBar = new ProgressBar(getContext(), null, android.R.attr.progressBarStyle); | ||
112 | } | ||
113 | mProgressParams.progressHeight = CircleDimen.PROGRESS_HEIGHT_SPINNER; | ||
114 | } | ||
115 | |||
116 | LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, mProgressParams | ||
117 | .progressHeight); | ||
118 | int[] margins = mProgressParams.margins; | ||
119 | if (margins != null) | ||
120 | layoutParams.setMargins(margins[0], margins[1], margins[2], margins[3]); | ||
121 | addView(mProgressBar, layoutParams); | ||
122 | |||
123 | //构建文本 | ||
124 | final ScaleTextView textView = new ScaleTextView(getContext()); | ||
125 | textView.setTextSize(mProgressParams.textSize); | ||
126 | textView.setTextColor(mProgressParams.textColor); | ||
127 | int[] padding = mProgressParams.padding; | ||
128 | if (padding != null) | ||
129 | textView.setAutoPadding(padding[0], padding[1], padding[2], padding[3]); | ||
130 | addView(textView); | ||
131 | |||
132 | if (mProgressParams.style == ProgressParams.STYLE_HORIZONTAL) { | ||
133 | mViewUpdateHandler = new Handler() { | ||
134 | @Override | ||
135 | public void handleMessage(Message msg) { | ||
136 | super.handleMessage(msg); | ||
137 | int progress = mProgressBar.getProgress(); | ||
138 | int max = mProgressBar.getMax(); | ||
139 | int percent = (int) (((float) progress / (float) max) * 100); | ||
140 | String args = percent + "%"; | ||
141 | if (!TextUtils.isEmpty(mProgressParams.text) && mProgressParams.text.contains | ||
142 | ("%s")) | ||
143 | textView.setText(String.format(mProgressParams.text, args)); | ||
144 | else textView.setText(mProgressParams.text + args); | ||
145 | } | ||
146 | }; | ||
147 | } else { | ||
148 | textView.setText(mProgressParams.text); | ||
149 | } | ||
150 | } | ||
151 | |||
152 | |||
153 | public void refreshProgress() { | ||
154 | mProgressBar.setMax(mProgressParams.max); | ||
155 | mProgressBar.setProgress(mProgressParams.progress); | ||
156 | mProgressBar.setSecondaryProgress(mProgressParams.progress + 10); | ||
157 | onProgressChanged(); | ||
158 | } | ||
159 | |||
160 | private void onProgressChanged() { | ||
161 | if (mViewUpdateHandler != null && !mViewUpdateHandler.hasMessages(0)) | ||
162 | mViewUpdateHandler.sendEmptyMessage(0); | ||
163 | } | ||
164 | |||
165 | /** | ||
166 | * 直接设置对象属性值,无视private/protected修饰符,不经过setter函数. | ||
167 | */ | ||
168 | private static void setFieldValue(final Object object, final String fieldName, final Object | ||
169 | value) { | ||
170 | Field field = getDeclaredField(object, fieldName); | ||
171 | if (field == null) | ||
172 | throw new IllegalArgumentException("Could not find field [" + fieldName + "] on " + | ||
173 | "target [" + object + "]"); | ||
174 | makeAccessible(field); | ||
175 | try { | ||
176 | field.set(object, value); | ||
177 | } catch (IllegalAccessException e) { | ||
178 | e.printStackTrace(); | ||
179 | } | ||
180 | } | ||
181 | |||
182 | /** | ||
183 | * 循环向上转型,获取对象的DeclaredField. | ||
184 | */ | ||
185 | protected static Field getDeclaredField(final Object object, final String fieldName) { | ||
186 | return getDeclaredField(object.getClass(), fieldName); | ||
187 | } | ||
188 | |||
189 | /** | ||
190 | * 循环向上转型,获取类的DeclaredField. | ||
191 | */ | ||
192 | @SuppressWarnings("unchecked") | ||
193 | protected static Field getDeclaredField(final Class clazz, final String fieldName) { | ||
194 | for (Class superClass = clazz; superClass != Object.class; superClass = superClass | ||
195 | .getSuperclass()) { | ||
196 | try { | ||
197 | return superClass.getDeclaredField(fieldName); | ||
198 | } catch (NoSuchFieldException e) { | ||
199 | e.printStackTrace();// Field不在当前类定义,继续向上转型 | ||
200 | } | ||
201 | } | ||
202 | return null; | ||
203 | } | ||
204 | |||
205 | /** | ||
206 | * 强制转换fileld可访问. | ||
207 | */ | ||
208 | protected static void makeAccessible(Field field) { | ||
209 | if (!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field | ||
210 | .getDeclaringClass().getModifiers())) { | ||
211 | field.setAccessible(true); | ||
212 | } | ||
213 | } | ||
214 | } | ||
215 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/BodyTextView.java
File was created | 1 | package com.mylhyl.circledialog.view; | |
2 | |||
3 | import android.content.Context; | ||
4 | import android.os.Build; | ||
5 | |||
6 | import com.mylhyl.circledialog.params.ButtonParams; | ||
7 | import com.mylhyl.circledialog.params.CircleParams; | ||
8 | import com.mylhyl.circledialog.params.DialogParams; | ||
9 | import com.mylhyl.circledialog.params.TextParams; | ||
10 | import com.mylhyl.circledialog.params.TitleParams; | ||
11 | import com.mylhyl.circledialog.res.drawable.CircleDrawable; | ||
12 | import com.mylhyl.circledialog.res.values.CircleColor; | ||
13 | |||
14 | /** | ||
15 | * 对话框纯文本视图 | ||
16 | * Created by hupei on 2017/3/30. | ||
17 | */ | ||
18 | class BodyTextView extends ScaleTextView { | ||
19 | private CircleParams mParams; | ||
20 | |||
21 | public BodyTextView(Context context, CircleParams params) { | ||
22 | super(context); | ||
23 | this.mParams = params; | ||
24 | init(params); | ||
25 | } | ||
26 | |||
27 | private void init(CircleParams params) { | ||
28 | DialogParams dialogParams = params.dialogParams; | ||
29 | TitleParams titleParams = params.titleParams; | ||
30 | TextParams textParams = params.textParams; | ||
31 | ButtonParams negativeParams = params.negativeParams; | ||
32 | ButtonParams positiveParams = params.positiveParams; | ||
33 | |||
34 | setGravity(textParams.gravity); | ||
35 | |||
36 | //如果标题没有背景色,则使用默认色 | ||
37 | int backgroundColor = textParams.backgroundColor != 0 ? textParams.backgroundColor : | ||
38 | CircleColor.bgDialog; | ||
39 | |||
40 | //有标题没按钮则底部圆角 | ||
41 | if (titleParams != null && negativeParams == null && positiveParams == null) { | ||
42 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | ||
43 | setBackground(new CircleDrawable(backgroundColor, 0, 0, dialogParams.radius, | ||
44 | dialogParams.radius)); | ||
45 | } else { | ||
46 | setBackgroundDrawable(new CircleDrawable(backgroundColor, 0, 0, dialogParams.radius, | ||
47 | dialogParams.radius)); | ||
48 | } | ||
49 | } | ||
50 | //没标题有按钮则顶部圆角 | ||
51 | else if (titleParams == null && (negativeParams != null || positiveParams != null)) { | ||
52 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | ||
53 | setBackground(new CircleDrawable(backgroundColor, dialogParams.radius, dialogParams | ||
54 | .radius, 0, 0)); | ||
55 | } else { | ||
56 | setBackgroundDrawable(new CircleDrawable(backgroundColor, dialogParams.radius, | ||
57 | dialogParams.radius, 0, 0)); | ||
58 | } | ||
59 | } | ||
60 | //没标题没按钮则全部圆角 | ||
61 | else if (titleParams == null && negativeParams == null && positiveParams == null) { | ||
62 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | ||
63 | setBackground(new CircleDrawable(backgroundColor, dialogParams.radius)); | ||
64 | } else { | ||
65 | setBackgroundDrawable(new CircleDrawable(backgroundColor, dialogParams.radius)); | ||
66 | } | ||
67 | } | ||
68 | //有标题有按钮则不用考虑圆角 | ||
69 | else setBackgroundColor(backgroundColor); | ||
70 | |||
71 | // setHeight(textParams.height); | ||
72 | setMinHeight(textParams.height); | ||
73 | setTextColor(textParams.textColor); | ||
74 | setTextSize(textParams.textSize); | ||
75 | setText(textParams.text); | ||
76 | |||
77 | int[] padding = textParams.padding; | ||
78 | if (padding != null) setAutoPadding(padding[0], padding[1], padding[2], padding[3]); | ||
79 | } | ||
80 | |||
81 | public void refreshText() { | ||
82 | if (mParams.textParams == null) return; | ||
83 | post(new Runnable() { | ||
84 | @Override | ||
85 | public void run() { | ||
86 | setText(mParams.textParams.text); | ||
87 | } | ||
88 | }); | ||
89 | } | ||
90 | } | ||
91 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/BuildViewImpl.java
File was created | 1 | package com.mylhyl.circledialog.view; | |
2 | |||
3 | import android.content.Context; | ||
4 | import android.view.View; | ||
5 | import android.widget.LinearLayout; | ||
6 | |||
7 | import com.mylhyl.circledialog.BuildView; | ||
8 | import com.mylhyl.circledialog.params.CircleParams; | ||
9 | |||
10 | /** | ||
11 | * Created by hupei on 2017/3/29. | ||
12 | */ | ||
13 | |||
14 | public class BuildViewImpl implements BuildView { | ||
15 | private Context mContext; | ||
16 | private CircleParams mParams; | ||
17 | private LinearLayout mRoot; | ||
18 | private TitleView mTitleView; | ||
19 | private BodyTextView mBodyTextView; | ||
20 | private BodyItemsView mBodyItemsView; | ||
21 | private BodyProgressView mBodyProgressView; | ||
22 | private BodyInputView mBodyInputView; | ||
23 | private ItemsButton mItemsButton; | ||
24 | private MultipleButton mMultipleButton; | ||
25 | private SingleButton mSingleButton; | ||
26 | |||
27 | public BuildViewImpl(Context context, CircleParams params) { | ||
28 | this.mContext = context; | ||
29 | this.mParams = params; | ||
30 | } | ||
31 | |||
32 | @Override | ||
33 | public void buildRoot() { | ||
34 | if (mRoot == null) { | ||
35 | mRoot = new ScaleLinearLayout(mContext); | ||
36 | mRoot.setOrientation(LinearLayout.VERTICAL); | ||
37 | } | ||
38 | } | ||
39 | |||
40 | @Override | ||
41 | public void buildTitle() { | ||
42 | if (mTitleView == null) { | ||
43 | mTitleView = new TitleView(mContext, mParams); | ||
44 | mRoot.addView(mTitleView); | ||
45 | } | ||
46 | } | ||
47 | |||
48 | @Override | ||
49 | public void buildText() { | ||
50 | if (mBodyTextView == null) { | ||
51 | mBodyTextView = new BodyTextView(mContext, mParams); | ||
52 | mRoot.addView(mBodyTextView); | ||
53 | } | ||
54 | } | ||
55 | |||
56 | @Override | ||
57 | public void refreshText() { | ||
58 | if (mBodyTextView != null) mBodyTextView.refreshText(); | ||
59 | } | ||
60 | |||
61 | @Override | ||
62 | public void buildItems() { | ||
63 | if (mBodyItemsView == null) { | ||
64 | mBodyItemsView = new BodyItemsView(mContext, mParams); | ||
65 | mRoot.addView(mBodyItemsView); | ||
66 | } | ||
67 | } | ||
68 | |||
69 | @Override | ||
70 | public void buildItemsButton() { | ||
71 | if (mItemsButton == null) { | ||
72 | mItemsButton = new ItemsButton(mContext, mParams); | ||
73 | mRoot.addView(mItemsButton); | ||
74 | } | ||
75 | } | ||
76 | |||
77 | @Override | ||
78 | public void refreshItems() { | ||
79 | if (mBodyItemsView != null) mBodyItemsView.refreshItems(); | ||
80 | } | ||
81 | |||
82 | @Override | ||
83 | public void buildProgress() { | ||
84 | if (mBodyProgressView == null) { | ||
85 | mBodyProgressView = new BodyProgressView(mContext, mParams); | ||
86 | mRoot.addView(mBodyProgressView); | ||
87 | } | ||
88 | } | ||
89 | |||
90 | |||
91 | @Override | ||
92 | public void refreshProgress() { | ||
93 | if (mBodyProgressView != null) mBodyProgressView.refreshProgress(); | ||
94 | } | ||
95 | |||
96 | @Override | ||
97 | public void buildInput() { | ||
98 | if (mBodyInputView == null) { | ||
99 | mBodyInputView = new BodyInputView(mContext, mParams); | ||
100 | mRoot.addView(mBodyInputView); | ||
101 | } | ||
102 | } | ||
103 | |||
104 | @Override | ||
105 | public void buildMultipleButton() { | ||
106 | if (mMultipleButton == null) { | ||
107 | mMultipleButton = new MultipleButton(mContext, mParams); | ||
108 | DividerView dividerView = new DividerView(mContext); | ||
109 | dividerView.setVertical(); | ||
110 | mRoot.addView(dividerView); | ||
111 | mRoot.addView(mMultipleButton); | ||
112 | } | ||
113 | } | ||
114 | |||
115 | @Override | ||
116 | public void buildSingleButton() { | ||
117 | if (mSingleButton == null) { | ||
118 | mSingleButton = new SingleButton(mContext, mParams); | ||
119 | DividerView dividerViewV = new DividerView(mContext); | ||
120 | dividerViewV.setVertical(); | ||
121 | mRoot.addView(dividerViewV); | ||
122 | mRoot.addView(mSingleButton); | ||
123 | } | ||
124 | } | ||
125 | |||
126 | @Override | ||
127 | public void regInputListener() { | ||
128 | if (mSingleButton != null && mBodyInputView != null) | ||
129 | mSingleButton.regOnInputClickListener(mBodyInputView.getInput()); | ||
130 | |||
131 | if (mMultipleButton != null && mBodyInputView != null) | ||
132 | mMultipleButton.regOnInputClickListener(mBodyInputView.getInput()); | ||
133 | } | ||
134 | |||
135 | @Override | ||
136 | public View getView() { | ||
137 | return mRoot; | ||
138 | } | ||
139 | } | ||
140 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/DividerView.java
File was created | 1 | package com.mylhyl.circledialog.view; | |
2 | |||
3 | import android.content.Context; | ||
4 | import android.view.View; | ||
5 | import android.widget.LinearLayout; | ||
6 | |||
7 | import com.mylhyl.circledialog.res.values.CircleColor; | ||
8 | |||
9 | /** | ||
10 | * 分隔线,默认垂直 | ||
11 | * Created by hupei on 2017/3/30. | ||
12 | */ | ||
13 | class DividerView extends View { | ||
14 | public DividerView(Context context) { | ||
15 | super(context); | ||
16 | init(); | ||
17 | } | ||
18 | |||
19 | private void init() { | ||
20 | setLayoutParams(new LinearLayout.LayoutParams(1, LinearLayout.LayoutParams.MATCH_PARENT)); | ||
21 | setBackgroundColor(CircleColor.divider); | ||
22 | } | ||
23 | |||
24 | /** | ||
25 | * 将分隔线设置为水平分隔 | ||
26 | */ | ||
27 | public void setVertical() { | ||
28 | setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 1)); | ||
29 | } | ||
30 | } | ||
31 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/ItemsButton.java
File was created | 1 | package com.mylhyl.circledialog.view; | |
2 | |||
3 | import android.content.Context; | ||
4 | import android.os.Build; | ||
5 | import android.view.View; | ||
6 | import android.view.ViewGroup; | ||
7 | import android.widget.LinearLayout; | ||
8 | |||
9 | import com.mylhyl.circledialog.scale.ScaleUtils; | ||
10 | import com.mylhyl.circledialog.params.ButtonParams; | ||
11 | import com.mylhyl.circledialog.params.CircleParams; | ||
12 | import com.mylhyl.circledialog.res.drawable.SelectorBtn; | ||
13 | import com.mylhyl.circledialog.res.values.CircleColor; | ||
14 | import com.mylhyl.circledialog.res.values.CircleDimen; | ||
15 | |||
16 | /** | ||
17 | * 列表对话框的取消按钮视图 | ||
18 | * Created by hupei on 2017/3/30. | ||
19 | */ | ||
20 | class ItemsButton extends ScaleTextView { | ||
21 | |||
22 | public ItemsButton(Context context, CircleParams params) { | ||
23 | super(context); | ||
24 | init(params); | ||
25 | } | ||
26 | |||
27 | private void init(CircleParams params) { | ||
28 | ButtonParams negativeParams = params.negativeParams; | ||
29 | final ButtonParams buttonParams = negativeParams != null ? negativeParams : params | ||
30 | .positiveParams; | ||
31 | //为列表显示时,设置列表与按钮之间的距离 | ||
32 | if (params.itemsParams != null) buttonParams.topMargin = CircleDimen.BUTTON_ITEMS_MARGIN; | ||
33 | |||
34 | LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup | ||
35 | .LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, 1); | ||
36 | layoutParams.topMargin = ScaleUtils.scaleValue(buttonParams.topMargin); | ||
37 | setLayoutParams(layoutParams); | ||
38 | |||
39 | setClickable(true); | ||
40 | setOnClickListener(new OnClickListener() { | ||
41 | @Override | ||
42 | public void onClick(View v) { | ||
43 | buttonParams.dismiss(); | ||
44 | if (buttonParams.listener != null) buttonParams.listener.onClick(v); | ||
45 | } | ||
46 | }); | ||
47 | setText(buttonParams.text); | ||
48 | setTextSize(buttonParams.textSize); | ||
49 | setTextColor(buttonParams.textColor); | ||
50 | setHeight(buttonParams.height); | ||
51 | |||
52 | //如果取消按钮没有背景色,则使用默认色 | ||
53 | int backgroundColor = buttonParams.backgroundColor != 0 ? buttonParams.backgroundColor : | ||
54 | CircleColor.bgDialog; | ||
55 | int radius = params.dialogParams.radius; | ||
56 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | ||
57 | setBackground(new SelectorBtn(backgroundColor, radius, radius, radius, radius)); | ||
58 | } else { | ||
59 | setBackgroundDrawable(new SelectorBtn(backgroundColor, radius, radius, radius, radius)); | ||
60 | } | ||
61 | } | ||
62 | } | ||
63 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/MultipleButton.java
File was created | 1 | package com.mylhyl.circledialog.view; | |
2 | |||
3 | import android.content.Context; | ||
4 | import android.os.Build; | ||
5 | import android.text.TextUtils; | ||
6 | import android.view.View; | ||
7 | import android.view.ViewGroup; | ||
8 | import android.widget.EditText; | ||
9 | import android.widget.LinearLayout; | ||
10 | |||
11 | import com.mylhyl.circledialog.params.ButtonParams; | ||
12 | import com.mylhyl.circledialog.params.CircleParams; | ||
13 | import com.mylhyl.circledialog.res.drawable.SelectorBtn; | ||
14 | import com.mylhyl.circledialog.res.values.CircleColor; | ||
15 | |||
16 | /** | ||
17 | * 对话框确定按钮与取消的视图 | ||
18 | * Created by hupei on 2017/3/30. | ||
19 | */ | ||
20 | class MultipleButton extends ScaleLinearLayout { | ||
21 | private ButtonParams mNegativeParams; | ||
22 | private ButtonParams mPositiveParams; | ||
23 | private ScaleTextView mNegativeButton; | ||
24 | private ScaleTextView mPositiveButton; | ||
25 | |||
26 | public MultipleButton(Context context, CircleParams params) { | ||
27 | super(context); | ||
28 | init(params); | ||
29 | } | ||
30 | |||
31 | private void init(CircleParams params) { | ||
32 | setOrientation(HORIZONTAL); | ||
33 | |||
34 | mNegativeParams = params.negativeParams; | ||
35 | mPositiveParams = params.positiveParams; | ||
36 | |||
37 | int radius = params.dialogParams.radius; | ||
38 | |||
39 | //取消按钮 | ||
40 | createNegative(radius); | ||
41 | |||
42 | //添加二人按钮之间的分隔线 | ||
43 | DividerView dividerView = new DividerView(getContext()); | ||
44 | addView(dividerView); | ||
45 | |||
46 | //确定按钮 | ||
47 | createPositive(radius); | ||
48 | } | ||
49 | |||
50 | private void createNegative(int radius) { | ||
51 | mNegativeButton = new ScaleTextView(getContext()); | ||
52 | mNegativeButton.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, | ||
53 | ViewGroup | ||
54 | .LayoutParams.WRAP_CONTENT, 1)); | ||
55 | |||
56 | mNegativeButton.setText(mNegativeParams.text); | ||
57 | mNegativeButton.setTextSize(mNegativeParams.textSize); | ||
58 | mNegativeButton.setTextColor(mNegativeParams.textColor); | ||
59 | mNegativeButton.setHeight(mNegativeParams.height); | ||
60 | |||
61 | //如果取消按钮没有背景色,则使用默认色 | ||
62 | int backgroundNegative = mNegativeParams.backgroundColor != 0 ? mNegativeParams | ||
63 | .backgroundColor : CircleColor.bgDialog; | ||
64 | //按钮左下方为圆角 | ||
65 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | ||
66 | mNegativeButton.setBackground(new SelectorBtn(backgroundNegative, 0, 0, 0, radius)); | ||
67 | } else { | ||
68 | mNegativeButton.setBackgroundDrawable(new SelectorBtn(backgroundNegative, 0, 0, 0, | ||
69 | radius)); | ||
70 | } | ||
71 | |||
72 | regNegativeListener(); | ||
73 | |||
74 | addView(mNegativeButton); | ||
75 | } | ||
76 | |||
77 | private void createPositive(int radius) { | ||
78 | |||
79 | mPositiveButton = new ScaleTextView(getContext()); | ||
80 | mPositiveButton.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, | ||
81 | ViewGroup | ||
82 | .LayoutParams.WRAP_CONTENT, 1)); | ||
83 | |||
84 | mPositiveButton.setText(mPositiveParams.text); | ||
85 | mPositiveButton.setTextSize(mPositiveParams.textSize); | ||
86 | mPositiveButton.setTextColor(mPositiveParams.textColor); | ||
87 | mPositiveButton.setHeight(mPositiveParams.height); | ||
88 | |||
89 | //如果取消按钮没有背景色,则使用默认色 | ||
90 | int backgroundPositive = mPositiveParams.backgroundColor != 0 ? mPositiveParams | ||
91 | .backgroundColor : CircleColor | ||
92 | .bgDialog; | ||
93 | |||
94 | //取消按钮右下方为圆角 | ||
95 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | ||
96 | mPositiveButton.setBackground(new SelectorBtn(backgroundPositive, 0, 0, radius, 0)); | ||
97 | } else { | ||
98 | mPositiveButton.setBackgroundDrawable(new SelectorBtn(backgroundPositive, 0, 0, | ||
99 | radius, 0)); | ||
100 | } | ||
101 | |||
102 | regPositiveListener(); | ||
103 | |||
104 | addView(mPositiveButton); | ||
105 | } | ||
106 | |||
107 | private void regNegativeListener() { | ||
108 | mNegativeButton.setOnClickListener(new OnClickListener() { | ||
109 | @Override | ||
110 | public void onClick(View v) { | ||
111 | mNegativeParams.dismiss(); | ||
112 | if (mNegativeParams.listener != null) mNegativeParams.listener.onClick(v); | ||
113 | } | ||
114 | }); | ||
115 | } | ||
116 | |||
117 | private void regPositiveListener() { | ||
118 | mPositiveButton.setOnClickListener(new OnClickListener() { | ||
119 | @Override | ||
120 | public void onClick(View v) { | ||
121 | mPositiveParams.dismiss(); | ||
122 | if (mPositiveParams.listener != null) mPositiveParams.listener.onClick(v); | ||
123 | } | ||
124 | }); | ||
125 | } | ||
126 | |||
127 | public void regOnInputClickListener(final EditText input) { | ||
128 | mPositiveButton.setOnClickListener(new OnClickListener() { | ||
129 | @Override | ||
130 | public void onClick(View v) { | ||
131 | String text = input.getText().toString(); | ||
132 | if (!TextUtils.isEmpty(text)) | ||
133 | mPositiveParams.dismiss(); | ||
134 | if (mPositiveParams.inputListener != null) | ||
135 | mPositiveParams.inputListener.onClick(text, v); | ||
136 | } | ||
137 | }); | ||
138 | } | ||
139 | } | ||
140 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/ScaleEditText.java
File was created | 1 | package com.mylhyl.circledialog.view; | |
2 | |||
3 | import android.content.Context; | ||
4 | import android.util.TypedValue; | ||
5 | import android.view.Gravity; | ||
6 | import android.widget.EditText; | ||
7 | |||
8 | import com.mylhyl.circledialog.scale.ScaleUtils; | ||
9 | |||
10 | /** | ||
11 | * Created by hupei on 2017/3/31. | ||
12 | */ | ||
13 | class ScaleEditText extends EditText { | ||
14 | public ScaleEditText(Context context) { | ||
15 | super(context); | ||
16 | config(); | ||
17 | } | ||
18 | |||
19 | private void config() { | ||
20 | requestFocus(); | ||
21 | setFocusable(true); | ||
22 | setFocusableInTouchMode(true); | ||
23 | setGravity(Gravity.TOP | Gravity.LEFT); | ||
24 | } | ||
25 | |||
26 | @Override | ||
27 | public void setHeight(int pixels) { | ||
28 | int dimenHeight = ScaleUtils.scaleValue(pixels); | ||
29 | super.setHeight(dimenHeight); | ||
30 | } | ||
31 | |||
32 | @Override | ||
33 | public void setTextSize(float size) { | ||
34 | int dimenTextSize = ScaleUtils.scaleValue((int) size); | ||
35 | setTextSize(TypedValue.COMPLEX_UNIT_PX, dimenTextSize); | ||
36 | } | ||
37 | } | ||
38 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/ScaleLinearLayout.java
File was created | 1 | package com.mylhyl.circledialog.view; | |
2 | |||
3 | import android.annotation.TargetApi; | ||
4 | import android.content.Context; | ||
5 | import android.os.Build; | ||
6 | import android.util.AttributeSet; | ||
7 | import android.widget.LinearLayout; | ||
8 | |||
9 | import com.mylhyl.circledialog.scale.ScaleLayoutConfig; | ||
10 | |||
11 | |||
12 | /** | ||
13 | * Created by hupei on 2017/3/29. | ||
14 | */ | ||
15 | class ScaleLinearLayout extends LinearLayout { | ||
16 | public ScaleLinearLayout(Context context) { | ||
17 | this(context, null); | ||
18 | } | ||
19 | |||
20 | public ScaleLinearLayout(Context context, AttributeSet attrs) { | ||
21 | this(context, attrs, 0); | ||
22 | } | ||
23 | |||
24 | public ScaleLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) { | ||
25 | super(context, attrs, defStyleAttr); | ||
26 | ScaleLayoutConfig.init(context); | ||
27 | } | ||
28 | |||
29 | @TargetApi(Build.VERSION_CODES.LOLLIPOP) | ||
30 | public ScaleLinearLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { | ||
31 | super(context, attrs, defStyleAttr, defStyleRes); | ||
32 | ScaleLayoutConfig.init(context); | ||
33 | } | ||
34 | } | ||
35 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/ScaleTextView.java
File was created | 1 | package com.mylhyl.circledialog.view; | |
2 | |||
3 | import android.content.Context; | ||
4 | import android.util.TypedValue; | ||
5 | import android.view.Gravity; | ||
6 | import android.widget.TextView; | ||
7 | |||
8 | import com.mylhyl.circledialog.scale.ScaleUtils; | ||
9 | |||
10 | /** | ||
11 | * Created by hupei on 2017/3/29. | ||
12 | */ | ||
13 | |||
14 | class ScaleTextView extends TextView { | ||
15 | public ScaleTextView(Context context) { | ||
16 | super(context); | ||
17 | config(); | ||
18 | } | ||
19 | |||
20 | private void config() { | ||
21 | setGravity(Gravity.CENTER); | ||
22 | } | ||
23 | |||
24 | @Override | ||
25 | public void setHeight(int pixels) { | ||
26 | int dimenHeight = ScaleUtils.scaleValue(pixels); | ||
27 | super.setHeight(dimenHeight); | ||
28 | } | ||
29 | |||
30 | @Override | ||
31 | public void setTextSize(float size) { | ||
32 | int dimenTextSize = ScaleUtils.scaleValue((int) size); | ||
33 | setTextSize(TypedValue.COMPLEX_UNIT_PX, dimenTextSize); | ||
34 | } | ||
35 | |||
36 | public void setAutoPadding(int left, int top, int right, int bottom) { | ||
37 | int dimenLeft = ScaleUtils.scaleValue(left); | ||
38 | int dimenTop = ScaleUtils.scaleValue(top); | ||
39 | int dimenRight = ScaleUtils.scaleValue(right); | ||
40 | int dimenBottom = ScaleUtils.scaleValue(bottom); | ||
41 | super.setPadding(dimenLeft, dimenTop, dimenRight, dimenBottom); | ||
42 | } | ||
43 | } | ||
44 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/SingleButton.java
File was created | 1 | package com.mylhyl.circledialog.view; | |
2 | |||
3 | import android.content.Context; | ||
4 | import android.os.Build; | ||
5 | import android.text.TextUtils; | ||
6 | import android.view.View; | ||
7 | import android.widget.EditText; | ||
8 | |||
9 | import com.mylhyl.circledialog.params.ButtonParams; | ||
10 | import com.mylhyl.circledialog.params.CircleParams; | ||
11 | import com.mylhyl.circledialog.res.drawable.SelectorBtn; | ||
12 | import com.mylhyl.circledialog.res.values.CircleColor; | ||
13 | |||
14 | /** | ||
15 | * 对话框单个按钮的视图 | ||
16 | * Created by hupei on 2017/3/30. | ||
17 | */ | ||
18 | class SingleButton extends ScaleTextView { | ||
19 | private ButtonParams mButtonParams; | ||
20 | |||
21 | public SingleButton(Context context, CircleParams params) { | ||
22 | super(context); | ||
23 | init(params); | ||
24 | } | ||
25 | |||
26 | private void init(CircleParams params) { | ||
27 | mButtonParams = params.negativeParams != null ? params.negativeParams : params | ||
28 | .positiveParams; | ||
29 | |||
30 | setText(mButtonParams.text); | ||
31 | setTextSize(mButtonParams.textSize); | ||
32 | setTextColor(mButtonParams.textColor); | ||
33 | setHeight(mButtonParams.height); | ||
34 | |||
35 | //如果取消按钮没有背景色,则使用默认色 | ||
36 | int backgroundColor = mButtonParams.backgroundColor != 0 ? mButtonParams.backgroundColor | ||
37 | : CircleColor.bgDialog; | ||
38 | |||
39 | int radius = params.dialogParams.radius; | ||
40 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | ||
41 | setBackground(new SelectorBtn(backgroundColor, 0, 0, radius, radius)); | ||
42 | } else { | ||
43 | setBackgroundDrawable(new SelectorBtn(backgroundColor, 0, 0, radius, radius)); | ||
44 | } | ||
45 | |||
46 | regOnClickListener(); | ||
47 | } | ||
48 | |||
49 | private void regOnClickListener() { | ||
50 | setOnClickListener(new OnClickListener() { | ||
51 | @Override | ||
52 | public void onClick(View v) { | ||
53 | mButtonParams.dismiss(); | ||
54 | if (mButtonParams.listener != null) mButtonParams.listener.onClick(v); | ||
55 | } | ||
56 | }); | ||
57 | } | ||
58 | |||
59 | public void regOnInputClickListener(final EditText input) { | ||
60 | setOnClickListener(new OnClickListener() { | ||
61 | @Override | ||
62 | public void onClick(View v) { | ||
63 | String text = input.getText().toString(); | ||
64 | if (!TextUtils.isEmpty(text)) | ||
65 | mButtonParams.dismiss(); | ||
66 | if (mButtonParams.inputListener != null) | ||
67 | mButtonParams.inputListener.onClick(text, v); | ||
68 | } | ||
69 | }); | ||
70 | } | ||
71 | } | ||
72 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/TitleView.java
File was created | 1 | package com.mylhyl.circledialog.view; | |
2 | |||
3 | import android.content.Context; | ||
4 | import android.os.Build; | ||
5 | |||
6 | import com.mylhyl.circledialog.params.CircleParams; | ||
7 | import com.mylhyl.circledialog.params.DialogParams; | ||
8 | import com.mylhyl.circledialog.params.TitleParams; | ||
9 | import com.mylhyl.circledialog.res.drawable.CircleDrawable; | ||
10 | import com.mylhyl.circledialog.res.values.CircleColor; | ||
11 | |||
12 | /** | ||
13 | * 对话框标题 | ||
14 | * Created by hupei on 2017/3/29. | ||
15 | */ | ||
16 | class TitleView extends ScaleTextView { | ||
17 | |||
18 | public TitleView(Context context, CircleParams params) { | ||
19 | super(context); | ||
20 | init(params); | ||
21 | } | ||
22 | |||
23 | private void init(CircleParams params) { | ||
24 | DialogParams dialogParams = params.dialogParams; | ||
25 | TitleParams titleParams = params.titleParams; | ||
26 | |||
27 | setGravity(titleParams.gravity); | ||
28 | |||
29 | //如果标题没有背景色,则使用默认色 | ||
30 | int backgroundColor = titleParams.backgroundColor != 0 ? titleParams.backgroundColor : | ||
31 | CircleColor.bgDialog; | ||
32 | |||
33 | //有内容则顶部圆角 | ||
34 | if (params.textParams != null || params.itemsParams != null || params.progressParams != null | ||
35 | || params.inputParams != null) { | ||
36 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | ||
37 | setBackground(new CircleDrawable(backgroundColor, dialogParams.radius, dialogParams | ||
38 | .radius, 0, 0)); | ||
39 | } else { | ||
40 | setBackgroundDrawable(new CircleDrawable(backgroundColor, dialogParams.radius, | ||
41 | dialogParams.radius, 0, 0)); | ||
42 | } | ||
43 | } | ||
44 | //无内容则全部圆角 | ||
45 | else { | ||
46 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | ||
47 | setBackground(new CircleDrawable(backgroundColor, dialogParams.radius)); | ||
48 | } else { | ||
49 | setBackgroundDrawable(new CircleDrawable(backgroundColor, dialogParams.radius)); | ||
50 | } | ||
51 | } | ||
52 | |||
53 | setHeight(titleParams.height); | ||
54 | setTextColor(titleParams.textColor); | ||
55 | setTextSize(titleParams.textSize); | ||
56 | setText(titleParams.text); | ||
57 | } | ||
58 | } | ||
59 |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/listener/OnInputClickListener.java
File was created | 1 | package com.mylhyl.circledialog.view.listener; | |
2 | |||
3 | import android.view.View; | ||
4 | |||
5 | /** | ||
6 | * Created by hupei on 2017/3/30. | ||
7 | */ | ||
8 | public interface OnInputClickListener { | ||
9 | void onClick(String text, View v); | ||
10 | } | ||
11 |
PersonalCenter/settings.gradle
1 | include ':app' | 1 | include ':app', ':circledialog' |
2 | 2 |