Commit c55b3db1a78da9815fa4b6b644930c6d109a2c76

Authored by xiongwei
1 parent b4a2140e72
Exists in master

自定义对话框,选择教材页,电子保卡弹出,16-开始学习体验,填写保卡-手机验证。等等界面的编写。

Showing 72 changed files with 3994 additions and 18 deletions   Show diff stats
PersonalCenter/.idea/gradle.xml
... ... @@ -9,6 +9,7 @@
9 9 <set>
10 10 <option value="$PROJECT_DIR$" />
11 11 <option value="$PROJECT_DIR$/app" />
  12 + <option value="$PROJECT_DIR$/circledialog" />
12 13 </set>
13 14 </option>
14 15 <option name="resolveModulePerSourceSet" value="false" />
... ...
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
... ... @@ -9,6 +9,7 @@ buildscript {
9 9  
10 10 // NOTE: Do not place your application dependencies here; they belong
11 11 // in the individual module build.gradle files
  12 + classpath 'com.novoda:bintray-release:0.3.4'
12 13 }
13 14 }
14 15  
... ...
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
... ... @@ -0,0 +1,5 @@
  1 +<manifest package="com.mylhyl.circledialog">
  2 +
  3 + <application/>
  4 +
  5 +</manifest>
... ...
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
... ... @@ -0,0 +1,11 @@
  1 +package com.mylhyl.circledialog.callback;
  2 +
  3 +import com.mylhyl.circledialog.params.ButtonParams;
  4 +
  5 +/**
  6 + * Created by hupei on 2017/3/30.
  7 + */
  8 +
  9 +public abstract class ConfigButton {
  10 + public abstract void onConfig(ButtonParams params);
  11 +}
... ...
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/callback/ConfigDialog.java
... ... @@ -0,0 +1,10 @@
  1 +package com.mylhyl.circledialog.callback;
  2 +
  3 +import com.mylhyl.circledialog.params.DialogParams;
  4 +
  5 +/**
  6 + * Created by hupei on 2017/3/30.
  7 + */
  8 +public abstract class ConfigDialog {
  9 + public abstract void onConfig(DialogParams params);
  10 +}
... ...
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/callback/ConfigInput.java
... ... @@ -0,0 +1,11 @@
  1 +package com.mylhyl.circledialog.callback;
  2 +
  3 +import com.mylhyl.circledialog.params.InputParams;
  4 +
  5 +/**
  6 + * Created by hupei on 2017/3/31.
  7 + */
  8 +
  9 +public abstract class ConfigInput {
  10 + public abstract void onConfig(InputParams params);
  11 +}
... ...
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/callback/ConfigItems.java
... ... @@ -0,0 +1,11 @@
  1 +package com.mylhyl.circledialog.callback;
  2 +
  3 +import com.mylhyl.circledialog.params.ItemsParams;
  4 +
  5 +/**
  6 + * Created by hupei on 2017/3/30.
  7 + */
  8 +
  9 +public abstract class ConfigItems {
  10 + public abstract void onConfig(ItemsParams params);
  11 +}
... ...
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
... ... @@ -0,0 +1,11 @@
  1 +package com.mylhyl.circledialog.callback;
  2 +
  3 +import com.mylhyl.circledialog.params.TextParams;
  4 +
  5 +/**
  6 + * Created by hupei on 2017/3/30.
  7 + */
  8 +
  9 +public abstract class ConfigText {
  10 + public abstract void onConfig(TextParams params);
  11 +}
... ...
PersonalCenter/circledialog/src/main/java/com/mylhyl/circledialog/callback/ConfigTitle.java
... ... @@ -0,0 +1,11 @@
  1 +package com.mylhyl.circledialog.callback;
  2 +
  3 +import com.mylhyl.circledialog.params.TitleParams;
  4 +
  5 +/**
  6 + * Created by hupei on 2017/3/30.
  7 + */
  8 +
  9 +public abstract class ConfigTitle {
  10 + public abstract void onConfig(TitleParams params);
  11 +}
... ...
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
... ... @@ -0,0 +1,10 @@
  1 +package com.mylhyl.circledialog.view.listener;
  2 +
  3 +import android.view.View;
  4 +
  5 +/**
  6 + * Created by hupei on 2017/3/30.
  7 + */
  8 +public interface OnInputClickListener {
  9 + void onClick(String text, View v);
  10 +}
... ...
PersonalCenter/settings.gradle
1   -include ':app'
  1 +include ':app', ':circledialog'
... ...