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
PersonalCenter/.idea/misc.xml
... | ... | @@ -37,7 +37,7 @@ |
37 | 37 | <ConfirmationsSetting value="0" id="Add" /> |
38 | 38 | <ConfirmationsSetting value="0" id="Remove" /> |
39 | 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 | 41 | <output url="file://$PROJECT_DIR$/build/classes" /> |
42 | 42 | </component> |
43 | 43 | <component name="ProjectType"> | ... | ... |
PersonalCenter/.idea/modules.xml
... | ... | @@ -3,7 +3,10 @@ |
3 | 3 | <component name="ProjectModuleManager"> |
4 | 4 | <modules> |
5 | 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 | 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 | 10 | </modules> |
8 | 11 | </component> |
9 | 12 | </project> |
10 | 13 | \ No newline at end of file | ... | ... |
PersonalCenter/app/build.gradle
... | ... | @@ -5,7 +5,7 @@ android { |
5 | 5 | buildToolsVersion "25.0.3" |
6 | 6 | defaultConfig { |
7 | 7 | applicationId "com.hjx.personalcenter" |
8 | - minSdkVersion 9 | |
8 | + minSdkVersion 15 | |
9 | 9 | targetSdkVersion 25 |
10 | 10 | versionCode 1 |
11 | 11 | versionName "1.0" |
... | ... | @@ -20,10 +20,11 @@ android { |
20 | 20 | } |
21 | 21 | |
22 | 22 | dependencies { |
23 | - compile fileTree(dir: 'libs', include: ['*.jar']) | |
23 | + compile fileTree(include: ['*.jar'], dir: 'libs') | |
24 | 24 | androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { |
25 | 25 | exclude group: 'com.android.support', module: 'support-annotations' |
26 | 26 | }) |
27 | 27 | compile 'com.android.support:appcompat-v7:25.3.1' |
28 | 28 | testCompile 'junit:junit:4.12' |
29 | + compile project(':circledialog') | |
29 | 30 | } | ... | ... |
PersonalCenter/app/src/main/AndroidManifest.xml
... | ... | @@ -66,6 +66,18 @@ |
66 | 66 | android:screenOrientation="landscape"> |
67 | 67 | |
68 | 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 | 81 | </application> |
70 | 82 | |
71 | 83 | </manifest> |
72 | 84 | \ No newline at end of file | ... | ... |
PersonalCenter/app/src/main/java/com/hjx/personalcenter/activity/ChoiseTextBookActivity.java
... | ... | @@ -0,0 +1,88 @@ |
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 | +} | ... | ... |
PersonalCenter/app/src/main/java/com/hjx/personalcenter/activity/RegisterInfoActivity.java
1 | 1 | package com.hjx.personalcenter.activity; |
2 | 2 | |
3 | -import android.app.Activity; | |
4 | -import android.app.AlertDialog; | |
5 | -import android.content.DialogInterface; | |
3 | +import android.content.Intent; | |
6 | 4 | import android.os.Bundle; |
5 | +import android.support.v7.app.AppCompatActivity; | |
7 | 6 | import android.view.View; |
8 | 7 | import android.widget.Button; |
9 | 8 | import android.widget.EditText; |
10 | 9 | import android.widget.TextView; |
11 | -import android.widget.Toast; | |
12 | 10 | |
13 | 11 | import com.hjx.personalcenter.R; |
12 | +import com.hjx.personalcenter.customdialog.ListDialog; | |
14 | 13 | |
15 | 14 | /**填写注册信息 熊巍 |
16 | 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 | 19 | private EditText et_username; |
21 | 20 | private TextView et_region,et_grade,et_school; |
22 | 21 | private Button btn_ok; |
... | ... | @@ -50,6 +49,7 @@ public class RegisterInfoActivity extends Activity implements View.OnClickListen |
50 | 49 | et_region.setOnClickListener(this); |
51 | 50 | et_grade.setOnClickListener(this); |
52 | 51 | et_school.setOnClickListener(this); |
52 | + btn_ok.setOnClickListener(this); | |
53 | 53 | |
54 | 54 | |
55 | 55 | } |
... | ... | @@ -65,20 +65,17 @@ public class RegisterInfoActivity extends Activity implements View.OnClickListen |
65 | 65 | case R.id.et_school: |
66 | 66 | break; |
67 | 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 | 72 | break; |
69 | 73 | } |
70 | 74 | |
71 | 75 | } |
72 | 76 | |
73 | 77 | private void choisegrade() { |
74 | - AlertDialog dialog = new AlertDialog.Builder(this) | |
75 | - .setTitle("选择年级") | |
76 | - .setItems(items, new DialogInterface.OnClickListener() { | |
77 | - @Override | |
78 | - public void onClick(DialogInterface dialog, int which) { | |
79 | - Toast.makeText(RegisterInfoActivity.this, items[which], Toast.LENGTH_SHORT).show(); | |
80 | - } | |
81 | - }).create(); | |
82 | - dialog.show(); | |
78 | + ListDialog.getInstance().show(getSupportFragmentManager(), "ListDialog"); | |
79 | + | |
83 | 80 | } |
84 | 81 | } | ... | ... |
PersonalCenter/app/src/main/java/com/hjx/personalcenter/activity/TheStartPageActivity.java
... | ... | @@ -0,0 +1,18 @@ |
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 | +} | ... | ... |
PersonalCenter/app/src/main/java/com/hjx/personalcenter/customdialog/ElectronicCardDialog.java
... | ... | @@ -0,0 +1,48 @@ |
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 | +} | ... | ... |
PersonalCenter/app/src/main/java/com/hjx/personalcenter/customdialog/ListDialog.java
... | ... | @@ -0,0 +1,61 @@ |
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 | +} | ... | ... |
PersonalCenter/app/src/main/res/drawable/corcle_white_bg.xml
... | ... | @@ -0,0 +1,13 @@ |
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> | |
0 | 14 | \ No newline at end of file | ... | ... |
PersonalCenter/app/src/main/res/layout/activity_choisetextbook.xml
... | ... | @@ -0,0 +1,57 @@ |
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> | |
0 | 58 | \ No newline at end of file | ... | ... |
PersonalCenter/app/src/main/res/layout/activity_choisetextbook_items.xml
... | ... | @@ -0,0 +1,34 @@ |
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> | |
0 | 35 | \ No newline at end of file | ... | ... |
PersonalCenter/app/src/main/res/layout/activity_start_page.xml
... | ... | @@ -0,0 +1,21 @@ |
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> | |
0 | 22 | \ No newline at end of file | ... | ... |
PersonalCenter/app/src/main/res/layout/custom_adilog_electroniccard.xml
... | ... | @@ -0,0 +1,81 @@ |
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> | |
0 | 82 | \ No newline at end of file | ... | ... |
PersonalCenter/app/src/main/res/layout/custom_adilog_list.xml
... | ... | @@ -0,0 +1,40 @@ |
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> | ... | ... |
PersonalCenter/app/src/main/res/layout/custom_adilog_list_item.xml
... | ... | @@ -0,0 +1,13 @@ |
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> | |
0 | 14 | \ No newline at end of file | ... | ... |
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
... | ... | @@ -10,4 +10,7 @@ |
10 | 10 | <color name="login_edittext_normal">#d4d4d4</color> |
11 | 11 | <color name="error_hint">#ED1c24</color> |
12 | 12 | <color name="login_edittext_pressed">#1cb8ff</color> |
13 | + <color name="cutoff_line">#CCCCCC</color> | |
14 | + <color name="electronic_card">#ff480f</color> | |
15 | + | |
13 | 16 | </resources> | ... | ... |
PersonalCenter/app/src/main/res/values/strings.xml
... | ... | @@ -9,15 +9,21 @@ |
9 | 9 | <string name="forget_pwd">忘记密码</string> |
10 | 10 | <string name="string_menu_title">修改密码</string> |
11 | 11 | <string name="string_regist_info">填写注册信息</string> |
12 | + <string name="string_textbook_info">选择教材版本</string> | |
12 | 13 | <string name="string_regist_username">用户名</string> |
13 | 14 | <string name="string_regist_region">地区</string> |
14 | 15 | <string name="string_regist_grade">年级</string> |
15 | 16 | <string name="string_regist_school">学校</string> |
16 | 17 | <string name="string_regist_next">下一步</string> |
18 | + <string name="string_start_page">开始学习体验</string> | |
19 | + | |
17 | 20 | //电子保卡 |
18 | 21 | <string name="string_electroniccard_info_title">填写保卡信息</string> |
22 | + <string name="string_electroniccard_info_fill">填写电子保卡</string> | |
19 | 23 | <string name="string_electroniccard_info_change">修改保卡信息</string> |
20 | 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 | 29 | </resources> | ... | ... |
PersonalCenter/build.gradle
PersonalCenter/circledialog/.gitignore
... | ... | @@ -0,0 +1 @@ |
1 | +/build | ... | ... |
PersonalCenter/circledialog/build.gradle
... | ... | @@ -0,0 +1,39 @@ |
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 | +} | |
0 | 40 | \ No newline at end of file | ... | ... |
PersonalCenter/circledialog/proguard-rules.pro
... | ... | @@ -0,0 +1,17 @@ |
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 | +#} | ... | ... |
PersonalCenter/circledialog/src/main/AndroidManifest.xml
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/AbsCircleDialog.java
... | ... | @@ -0,0 +1,77 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/BaseCircleDialog.java
... | ... | @@ -0,0 +1,272 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/BuildView.java
... | ... | @@ -0,0 +1,81 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/CircleDialog.java
... | ... | @@ -0,0 +1,372 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/Controller.java
... | ... | @@ -0,0 +1,97 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/callback/ConfigButton.java
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/callback/ConfigDialog.java
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/callback/ConfigInput.java
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/callback/ConfigItems.java
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/callback/ConfigProgress.java
... | ... | @@ -0,0 +1,11 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/callback/ConfigText.java
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/callback/ConfigTitle.java
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/params/ButtonParams.java
... | ... | @@ -0,0 +1,94 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/params/CircleParams.java
... | ... | @@ -0,0 +1,68 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/params/DialogParams.java
... | ... | @@ -0,0 +1,122 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/params/InputParams.java
... | ... | @@ -0,0 +1,113 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/params/ItemsParams.java
... | ... | @@ -0,0 +1,85 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/params/ProgressParams.java
... | ... | @@ -0,0 +1,122 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/params/TextParams.java
... | ... | @@ -0,0 +1,83 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/params/TitleParams.java
... | ... | @@ -0,0 +1,77 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/res/drawable/CircleDrawable.java
... | ... | @@ -0,0 +1,23 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/res/drawable/DrawableHelper.java
... | ... | @@ -0,0 +1,31 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/res/drawable/InputDrawable.java
... | ... | @@ -0,0 +1,15 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/res/drawable/ProgressDrawable.java
... | ... | @@ -0,0 +1,98 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/res/drawable/SelectorBtn.java
... | ... | @@ -0,0 +1,30 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/res/values/CircleColor.java
... | ... | @@ -0,0 +1,37 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/res/values/CircleDimen.java
... | ... | @@ -0,0 +1,54 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/scale/ScaleAdapter.java
... | ... | @@ -0,0 +1,30 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/scale/ScaleLayoutConfig.java
... | ... | @@ -0,0 +1,94 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/scale/ScaleUtils.java
... | ... | @@ -0,0 +1,58 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/BodyInputView.java
... | ... | @@ -0,0 +1,101 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/BodyItemsView.java
... | ... | @@ -0,0 +1,179 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/BodyProgressView.java
... | ... | @@ -0,0 +1,214 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/BodyTextView.java
... | ... | @@ -0,0 +1,90 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/BuildViewImpl.java
... | ... | @@ -0,0 +1,139 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/DividerView.java
... | ... | @@ -0,0 +1,30 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/ItemsButton.java
... | ... | @@ -0,0 +1,62 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/MultipleButton.java
... | ... | @@ -0,0 +1,139 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/ScaleEditText.java
... | ... | @@ -0,0 +1,37 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/ScaleLinearLayout.java
... | ... | @@ -0,0 +1,34 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/ScaleTextView.java
... | ... | @@ -0,0 +1,43 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/SingleButton.java
... | ... | @@ -0,0 +1,71 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/TitleView.java
... | ... | @@ -0,0 +1,58 @@ |
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 | +} | ... | ... |
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/view/listener/OnInputClickListener.java
PersonalCenter/settings.gradle