Browse Source

Merge branch 'developer' of https://gitlab.com/Arisono/SkWeiChat-Baidu into feature_raomeng

# Conflicts:
#	app_core/common/src/main/java/com/core/net/http/ViewUtil.java
raomeng 8 years ago
parent
commit
a6851823b8
72 changed files with 1535 additions and 100 deletions
  1. 2 2
      WeiChat/build.gradle
  2. 12 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/secretary/BookingAddActivity.java
  3. 6 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/me/MeFragment.java
  4. 7 7
      WeiChat/src/main/res/layout/activity_booking_list.xml
  5. 1 1
      WeiChat/src/main/res/values-zh-rCN/strings.xml
  6. 1 1
      WeiChat/src/main/res/values/strings.xml
  7. 3 3
      WeiChat/version.properties
  8. 10 0
      app_core/common/src/main/assets/work_menu.json
  9. 10 0
      app_core/common/src/main/assets/work_menu_b2b.json
  10. 11 0
      app_core/common/src/main/assets/work_menu_personal.json
  11. 8 20
      app_core/common/src/main/java/com/core/net/http/ViewUtil.java
  12. 43 32
      app_core/common/src/main/res/drawable/bg_bule_btn.xml
  13. 1 0
      app_core/common/src/main/res/layout/base_bar_layout.xml
  14. 1 0
      app_core/common/src/main/res/layout/pop_dialog_list.xml
  15. 1 0
      app_core/common/src/main/res/values-en/strings.xml
  16. 6 3
      app_core/common/src/main/res/values-v21/styles.xml
  17. 2 1
      app_core/common/src/main/res/values-zh-rCN/strings.xml
  18. 1 0
      app_core/common/src/main/res/values-zh-rTW/strings.xml
  19. 2 1
      app_core/common/src/main/res/values/strings.xml
  20. 6 0
      app_modular/appbooking/src/main/java/com/modular/booking/activity/business/BBookingAddActivity.java
  21. 1 1
      app_modular/appbooking/src/main/java/com/modular/booking/adapter/ItemPopListAdapter.java
  22. 1 1
      app_modular/appbooking/src/main/res/layout/item_pop_list_select.xml
  23. 14 7
      app_modular/appme/src/main/java/com/uas/appme/settings/activity/SettingActivity.java
  24. 12 1
      app_modular/appme/src/main/res/drawable/bg_bule_btn.xml
  25. 1 1
      app_modular/appme/src/main/res/values-en/strings.xml
  26. 1 1
      app_modular/appme/src/main/res/values/strings.xml
  27. 1 0
      app_modular/appmusic/.gitignore
  28. 24 0
      app_modular/appmusic/build.gradle
  29. 25 0
      app_modular/appmusic/proguard-rules.pro
  30. 26 0
      app_modular/appmusic/src/androidTest/java/com/usoftchina/music/ExampleInstrumentedTest.java
  31. 18 0
      app_modular/appmusic/src/main/AndroidManifest.xml
  32. 67 0
      app_modular/appmusic/src/main/java/com/lg/lrcview_master/DefaultLrcParser.java
  33. 13 0
      app_modular/appmusic/src/main/java/com/lg/lrcview_master/ILrcParser.java
  34. 35 0
      app_modular/appmusic/src/main/java/com/lg/lrcview_master/ILrcView.java
  35. 118 0
      app_modular/appmusic/src/main/java/com/lg/lrcview_master/LrcRow.java
  36. 466 0
      app_modular/appmusic/src/main/java/com/lg/lrcview_master/LrcView.java
  37. 271 0
      app_modular/appmusic/src/main/java/com/usoftchina/pay/MainMusicActivity.java
  38. BIN
      app_modular/appmusic/src/main/res/drawable-hdpi/back_black.png
  39. BIN
      app_modular/appmusic/src/main/res/drawable-hdpi/bg_music.jpg
  40. BIN
      app_modular/appmusic/src/main/res/drawable-hdpi/bg_yingtang_music.png
  41. BIN
      app_modular/appmusic/src/main/res/drawable-hdpi/ic_launcher.png
  42. BIN
      app_modular/appmusic/src/main/res/drawable-hdpi/ic_player_seeker.png
  43. BIN
      app_modular/appmusic/src/main/res/drawable-hdpi/icon_music_yingtang.png
  44. BIN
      app_modular/appmusic/src/main/res/drawable-hdpi/music_paying.png
  45. BIN
      app_modular/appmusic/src/main/res/drawable-hdpi/music_start.png
  46. BIN
      app_modular/appmusic/src/main/res/drawable-hdpi/music_top.png
  47. BIN
      app_modular/appmusic/src/main/res/drawable-xhdpi/back_black.png
  48. BIN
      app_modular/appmusic/src/main/res/drawable-xhdpi/ic_launcher.png
  49. BIN
      app_modular/appmusic/src/main/res/drawable-xhdpi/music_paying.png
  50. BIN
      app_modular/appmusic/src/main/res/drawable-xhdpi/music_start.png
  51. BIN
      app_modular/appmusic/src/main/res/drawable-xxhdpi/back_black.png
  52. BIN
      app_modular/appmusic/src/main/res/drawable-xxhdpi/ic_launcher.png
  53. BIN
      app_modular/appmusic/src/main/res/drawable-xxhdpi/music_paying.png
  54. BIN
      app_modular/appmusic/src/main/res/drawable-xxhdpi/music_start.png
  55. 18 0
      app_modular/appmusic/src/main/res/drawable/layer_list_progrssbar_play_bottom.xml
  56. 11 0
      app_modular/appmusic/src/main/res/drawable/layer_list_thumb_playing_default.xml
  57. 10 0
      app_modular/appmusic/src/main/res/drawable/layer_list_thumb_playing_press.xml
  58. 10 0
      app_modular/appmusic/src/main/res/drawable/selector_btn.xml
  59. 6 0
      app_modular/appmusic/src/main/res/drawable/selector_progress_bar_playing.xml
  60. 9 0
      app_modular/appmusic/src/main/res/drawable/shape_btn_n.xml
  61. 9 0
      app_modular/appmusic/src/main/res/drawable/shape_btn_p.xml
  62. 9 0
      app_modular/appmusic/src/main/res/drawable/shape_btn_u.xml
  63. 10 0
      app_modular/appmusic/src/main/res/drawable/shape_toast_bg.xml
  64. 101 0
      app_modular/appmusic/src/main/res/layout/activity_main_music.xml
  65. 18 0
      app_modular/appmusic/src/main/res/layout/seekbar.xml
  66. 16 0
      app_modular/appmusic/src/main/res/layout/toast.xml
  67. BIN
      app_modular/appmusic/src/main/res/raw/yingtang.mp3
  68. 33 0
      app_modular/appmusic/src/main/res/raw/yingtanglrc.lrc
  69. 3 0
      app_modular/appmusic/src/main/res/values/strings.xml
  70. 17 0
      app_modular/appmusic/src/test/java/com/usoftchina/music/ExampleUnitTest.java
  71. 25 14
      app_modular/apputils/src/main/res/layout/item_select_alert_pop.xml
  72. 2 2
      settings.gradle

+ 2 - 2
WeiChat/build.gradle

@@ -167,7 +167,7 @@ dependencies {
     androidTestCompile deps.leakcanaryNp
     debugCompile deps.leakcanary
     releaseCompile deps.leakcanaryNp
-    //project
+  
     compile project(':common')
     compile project(':appmessages')
     compile project(':network')
@@ -178,7 +178,7 @@ dependencies {
     compile project(':appme')
     compile project(':appworks')
     compile project(':appbooking')
-//    compile project(':android-pdf-viewer')
+    compile project(':appmusic')
     compile project(':apputils')
     compile 'com.android.support.constraint:constraint-layout:1.0.2'
     compile 'com.android.support:support-v4:26.+'

+ 12 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/secretary/BookingAddActivity.java

@@ -87,7 +87,7 @@ public class BookingAddActivity extends SupportToolBarActivity implements  View.
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_book_add);
-       setTitle(getString(R.string.booking_add));
+        setTitle(getString(R.string.booking_add));
         tvBookObject =findViewById(R.id.tv_book_object);
         companyAddRl =findViewById(R.id.company_add_rl);
         tvBookTimes =findViewById(R.id.tv_book_times);
@@ -270,6 +270,12 @@ public class BookingAddActivity extends SupportToolBarActivity implements  View.
             bt_commit.setEnabled(true);
             return;
         }
+
+        if (StringUtil.isEmpty(tv_book_topic.getText().toString())) {
+            ToastMessage("请选择预约地址!");
+            bt_commit.setEnabled(true);
+            return;
+        }
 //        showLoading();
         String content = "";
         content = et_book_content.getText().toString();
@@ -332,6 +338,11 @@ public class BookingAddActivity extends SupportToolBarActivity implements  View.
             bt_commit.setEnabled(true);
             return;
         }
+        if (StringUtil.isEmpty(tv_book_topic.getText().toString())) {
+            ToastMessage("请选择预约地址!");
+            bt_commit.setEnabled(true);
+            return;
+        }
 //        showLoading();
         String content = "";
         content = et_book_content.getText().toString();

+ 6 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/me/MeFragment.java

@@ -480,6 +480,9 @@ public class MeFragment extends EasyFragment implements View.OnClickListener, On
                     showToact(R.string.networks_out);
                     return;
                 }
+                if (DialogUtils.isDialogShowing(ViewUtil.popupWindow)){
+                    ViewUtil.popupWindow.dismiss();
+                }
                 if (DialogUtils.isDialogShowing(popupWindow)){
                     popupWindow.dismiss();
                 }
@@ -494,6 +497,9 @@ public class MeFragment extends EasyFragment implements View.OnClickListener, On
                     if (DialogUtils.isDialogShowing(ViewUtil.popupWindow)){
                         ViewUtil.popupWindow.dismiss();
                     }
+                    if (DialogUtils.isDialogShowing(popupWindow)){
+                        popupWindow.dismiss();
+                    }
                     changeMaster();
                 }
                 break;

+ 7 - 7
WeiChat/src/main/res/layout/activity_booking_list.xml

@@ -46,7 +46,7 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:orientation="horizontal"
-            android:background="#FFFFFF"
+            android:background="#F4F4F4"
             android:paddingTop="10dp"
             android:paddingBottom="10dp">
             <RelativeLayout
@@ -208,17 +208,17 @@
                 android:textSize="@dimen/text_main" />
         </LinearLayout>
 
-        <android.support.v4.view.ViewPager
-            android:id="@+id/viewPager"
-            android:layout_width="match_parent"
-            android:layout_height="200dp" 
-            android:background="@color/white"/>
-
         <View
             android:layout_width="match_parent"
             android:layout_height="2px"
             android:background="@color/item_line" />
 
+        <android.support.v4.view.ViewPager
+            android:id="@+id/viewPager"
+            android:layout_width="match_parent"
+            android:layout_height="200dp"
+            android:background="@color/white" />
+
         <com.core.widget.MyListView
             android:id="@+id/lv_book"
             android:layout_width="match_parent"

+ 1 - 1
WeiChat/src/main/res/values-zh-rCN/strings.xml

@@ -1166,7 +1166,7 @@
     <string name="c_photo_album">相册</string>
     <string name="c_photo_album_failed">选择失败</string>
     <string name="c_crop_failed">裁减失败</string>
-    <string name="exit_tips">确定退出此账号吗?</string>
+    <string name="exit_tips">确定退出此账号吗?</string>
     <string name="watting">等待</string>
     <string name="approvel">审批</string>
     <string name="Did_not_pass">未通过</string>

+ 1 - 1
WeiChat/src/main/res/values/strings.xml

@@ -376,7 +376,7 @@
     <string name="use_help">用户反馈</string>
     <string name="about_us">关于UU互联</string>
     <string name="app_version">当前版本</string>
-    <string name="exit_tips">确定退出此账号吗?</string>
+    <string name="exit_tips">确定退出此账号吗?</string>
     <string name="exit_current_account">退出登录</string>
     <string name="deleteing">删除中&#8230;</string>
     <string name="clear_completed">清除完毕</string>

+ 3 - 3
WeiChat/version.properties

@@ -1,5 +1,5 @@
-#Tue May 22 17:48:24 CST 2018
-debugName=322
+#Thu May 24 14:45:49 CST 2018
+debugName=374
 versionName=630
-debugCode=322
+debugCode=374
 versionCode=170

+ 10 - 0
app_core/common/src/main/assets/work_menu.json

@@ -55,6 +55,16 @@
         "menuUrl": "",
         "caller": "",
         "isHide": false
+      },
+      {
+        "isLocalMenu": true,
+        "menuName": "str_work_yingtang_song",
+        "menuIcon": "icon_music_yingtang",
+        "menuActivity": "com.usoftchina.pay.MainMusicActivity",
+        "menuTag": "local_yingtang_song",
+        "menuUrl": "",
+        "caller": "",
+        "isHide": false
       }
     ]
   },

+ 10 - 0
app_core/common/src/main/assets/work_menu_b2b.json

@@ -55,6 +55,16 @@
         "menuUrl": "",
         "caller": "",
         "isHide": false
+      },
+      {
+        "isLocalMenu": true,
+        "menuName": "str_work_yingtang_song",
+        "menuIcon": "icon_music_yingtang",
+        "menuActivity": "com.usoftchina.pay.MainMusicActivity",
+        "menuTag": "local_yingtang_song",
+        "menuUrl": "",
+        "caller": "",
+        "isHide": false
       }
     ]
   },

+ 11 - 0
app_core/common/src/main/assets/work_menu_personal.json

@@ -56,6 +56,17 @@
         "caller": "",
         "isHide": false
       }
+    ,
+      {
+        "isLocalMenu": true,
+        "menuName": "str_work_yingtang_song",
+        "menuIcon": "icon_music_yingtang",
+        "menuActivity": "com.usoftchina.pay.MainMusicActivity",
+        "menuTag": "local_yingtang_song",
+        "menuUrl": "",
+        "caller": "",
+        "isHide": false
+      }
     ]
   }
 ]

+ 8 - 20
app_core/common/src/main/java/com/core/net/http/ViewUtil.java

@@ -93,13 +93,12 @@ public class ViewUtil {
 
 
     public static void ToastMessage(Context cont, String msg) {
-        ToastUtil.showToast(cont, msg);
-
+        ToastUtil.showToast(cont,msg);
     }
 
 
     public static void ToastMessage(Context cont, String msg, int toastColor, int toastTime) {
-        ToastUtil.showToast(cont, msg);
+        ToastUtil.showToast(cont,msg);
 //        if (cont instanceof Activity) {
 //            if (crouton != null) {
 //                crouton.cancel();
@@ -276,7 +275,7 @@ public class ViewUtil {
      */
     public static void LoginTask(final String user_phone, final String user_password, final Context ct) {
         ViewUtil.ct = ct;
-        LogUtil.d("AppInfo", "password:" + user_password + " phone:" + user_phone);
+        LogUtil.d("AppInfo","password:"+user_password+" phone:"+user_phone);
         mdProcessDialog = new MaterialDialog.Builder(ct).title(
                 MyApplication.getInstance().getString(R.string.app_dialog_title))
                 .content(MyApplication.getInstance().getString(R.string.login_progress_erp))
@@ -322,7 +321,7 @@ public class ViewUtil {
                             if (mdProcessDialog != null) {
                                 mdProcessDialog.dismiss();
                             }
-                            ToastUtil.showToast(ct, errorMsg);
+                            ToastMessage(MyApplication.getInstance(),errorMsg);
                         } else {
                             String loginToken = JSONUtil.getText(resultObject, "token");
                             CommonUtil.setSharedPreferences(ct, Constants.CACHE.ACCOUNT_CENTER_TOKEN, loginToken);
@@ -331,7 +330,7 @@ public class ViewUtil {
                                 String accounts = JSON.toJSONString(accountArray);
                                 LoginSucess(accounts, user_phone, user_password);
                             } else {
-                                ToastUtil.showToast(ct, "企业列表为空");
+                                ToastMessage(MyApplication.getInstance(),"企业列表为空");
                             }
                         }
                     }
@@ -342,7 +341,7 @@ public class ViewUtil {
                         if (mdProcessDialog != null) {
                             mdProcessDialog.dismiss();
                         }
-                        ToastUtil.showToast(ct, failStr);
+                        ToastMessage(MyApplication.getInstance(),failStr);
                     }
                 });
     }
@@ -530,7 +529,7 @@ public class ViewUtil {
         } else {
             if (!StringUtil.isEmpty(CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_baseurl"))) {
             } else {
-                MyApplication.getInstance().startActivity(new Intent("com.modular.main.DataDownloadActivity"));
+              MyApplication.getInstance().startActivity(new Intent("com.modular.main.DataDownloadActivity"));
             }
             CommonUtil.setSharedPreferences(ct, "erp_baseurl", erp_baseurl);
         }
@@ -1190,19 +1189,8 @@ public class ViewUtil {
     }
 
     // 登录ERP
-    public static void LoginERPTask(String url, String enuu, String master, String username,
-                                    String password) {
+    public static void LoginERPTask(String url, String enuu, String master, String username, String password) {
         mdProcessDialog.setContent(MyApplication.getInstance().getString(R.string.login_progress_erp));
-//        url = url + "mobile/login.action";
-//        url = CommonUtil.getAppBaseUrl(MyApplication.getInstance()) + "mobile/login.action";
-//        Map<String, String> params = new HashMap<String, String>();
-//        params.put("username", username);
-//        params.put("password", password);
-//        params.put("master", master);
-//        LogUtil.i("login", "url=" + url);
-//        LogUtil.i("login", "params=" + JSONUtil.map2JSON(params));
-//        startNetThread(url, params, handler, Constants.SUCCESS_ERP, null, null, "post");
-//
         String loginToken = CommonUtil.getSharedPreferences(ct, Constants.CACHE.ACCOUNT_CENTER_TOKEN);
         HttpRequest.getInstance().sendRequest(url,
                 new HttpParams.Builder()

+ 43 - 32
app_core/common/src/main/res/drawable/bg_bule_btn.xml

@@ -1,35 +1,46 @@
 <?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_pressed="true">
-        <shape>
-            <solid android:color="@color/btn_orange_press" />
-            <corners android:radius="1dp" />
-            <padding android:bottom="0.5dp" android:left="0.5dp" android:right="0.5dp" android:top="0.5dp" />
-        </shape>
-    </item>
-    <item android:state_enabled="false">
-        <shape>
-            <solid android:color="@color/btn_orange_press" />
-            <corners android:radius="1dp" />
-            <padding android:bottom="0.5dp" android:left="0.5dp" android:right="0.5dp" android:top="0.5dp" />
-        </shape>
-    </item>
-    <item>
-        <shape android:shape="rectangle">
-            <corners
-                android:topLeftRadius="4dp"
-                android:topRightRadius="4dp"
-                android:bottomRightRadius="4dp"
-                android:bottomLeftRadius="4dp">
-            </corners>
-            <stroke
-                android:width="1dp"
-                android:color="#999999">
-            </stroke>
-            <solid
-                android:color="@color/titleBlue">
-            </solid>
-        </shape>
+    <item android:drawable="@drawable/shape_corner_deep_blue_bg" android:state_selected="true" />
+    <item android:drawable="@drawable/shape_corner_deep_blue_bg" android:state_pressed="true" />
+    <item android:drawable="@drawable/shape_corner_deep_blue_bg" android:state_checked="true" />
+    <item android:drawable="@drawable/shape_corner_shallow_blue_bg" android:state_enabled="true" />
+    <item android:drawable="@drawable/shape_corner_blue_unable_bg" android:state_enabled="false" />
+    <item android:drawable="@drawable/shape_corner_shallow_blue_bg" />
+</selector>
 
-    </item>
-</selector>
+    <!--
+    <?xml version="1.0" encoding="utf-8"?>
+    <selector xmlns:android="http://schemas.android.com/apk/res/android">
+        <item android:state_pressed="true">
+            <shape>
+                <solid android:color="@color/btn_orange_press" />
+                <corners android:radius="1dp" />
+                <padding android:bottom="0.5dp" android:left="0.5dp" android:right="0.5dp" android:top="0.5dp" />
+            </shape>
+        </item>
+        <item android:state_enabled="false">
+            <shape>
+                <solid android:color="@color/btn_orange_press" />
+                <corners android:radius="1dp" />
+                <padding android:bottom="0.5dp" android:left="0.5dp" android:right="0.5dp" android:top="0.5dp" />
+            </shape>
+        </item>
+        <item>
+            <shape android:shape="rectangle">
+                <corners
+                    android:topLeftRadius="4dp"
+                    android:topRightRadius="4dp"
+                    android:bottomRightRadius="4dp"
+                    android:bottomLeftRadius="4dp">
+                </corners>
+                <stroke
+                    android:width="1dp"
+                    android:color="#999999">
+                </stroke>
+                <solid
+                    android:color="@color/titleBlue">
+                </solid>
+            </shape>
+    
+        </item>
+    </selector>-->

+ 1 - 0
app_core/common/src/main/res/layout/base_bar_layout.xml

@@ -14,5 +14,6 @@
             android:id="@+id/contentFl"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
+            android:layout_below="@+id/toolbarVs"
             android:orientation="horizontal" />
 </LinearLayout>

+ 1 - 0
app_core/common/src/main/res/layout/pop_dialog_list.xml

@@ -25,6 +25,7 @@
             android:id="@+id/mList"
             style="@style/ListViewBasic"
             android:layout_height="300dp"
+            android:divider="@color/gray_light"
             android:dividerHeight="0dp">
         </ListView>
 </LinearLayout>

+ 1 - 0
app_core/common/src/main/res/values-en/strings.xml

@@ -1491,6 +1491,7 @@
     <string name="str_work_uu_sports">UU Sport</string>
     <string name="str_work_invite_register">invitation to register</string>
     <string name="str_work_uu_education">UU education</string>
+    <string name="str_work_yingtang_song">yingtang song</string>
 
     <string name="str_administrative_office">OA</string>
     <string name="str_work_work_approval">my reviews</string>

+ 6 - 3
app_core/common/src/main/res/values-v21/styles.xml

@@ -1,10 +1,13 @@
 <resources>>
     <style name="AppTheme.NoActionBar">
-        <item name="colorPrimary">@color/colorPrimary</item>
-        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
-        <item name="colorAccent">@color/colorAccent</item>
+        <item name="colorPrimary">@color/transparent</item>
+        <item name="colorPrimaryDark">@color/transparent</item>
+        <item name="colorAccent">@color/transparent</item>
         <item name="windowActionBar">false</item>
         <item name="windowNoTitle">true</item>
         <item name="android:windowTranslucentStatus">true</item>
+        <item name="android:windowBackground">@color/transparent</item>
+        <item name="android:windowIsTranslucent">true</item>
+        <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item>
     </style>
 </resources>

+ 2 - 1
app_core/common/src/main/res/values-zh-rCN/strings.xml

@@ -1167,7 +1167,7 @@
     <string name="c_photo_album">相册</string>
     <string name="c_photo_album_failed">选择失败</string>
     <string name="c_crop_failed">裁减失败</string>
-    <string name="exit_tips">确定退出此账号吗?</string>
+    <string name="exit_tips">确定退出此账号吗?</string>
     <string name="watting">等待</string>
     <string name="approvel">审批</string>
     <string name="Did_not_pass">未通过</string>
@@ -1555,6 +1555,7 @@
     <string name="str_work_uu_sports">UU运动</string>
     <string name="str_work_invite_register">邀请注册</string>
     <string name="str_work_uu_education">UU课堂</string>
+    <string name="str_work_yingtang_song">英唐之歌</string>
 
     <string name="str_administrative_office">行政办公</string>
     <string name="str_work_work_approval">我的审批</string>

+ 1 - 0
app_core/common/src/main/res/values-zh-rTW/strings.xml

@@ -1542,6 +1542,7 @@
     <string name="str_work_uu_sports">UU運動</string>
     <string name="str_work_invite_register">邀請註冊</string>
     <string name="str_work_uu_education">UU课堂</string>
+    <string name="str_work_yingtang_song">英唐之歌</string>
 
     <string name="str_administrative_office">行政辦公</string>
     <string name="str_work_work_approval">我的審批</string>

+ 2 - 1
app_core/common/src/main/res/values/strings.xml

@@ -376,7 +376,7 @@
     <string name="use_help">用户反馈</string>
     <string name="about_us">关于UU互联</string>
     <string name="app_version">当前版本</string>
-    <string name="exit_tips">确定退出此账号吗?</string>
+    <string name="exit_tips">确定退出此账号吗?</string>
     <string name="exit_current_account">退出登录</string>
     <string name="deleteing">删除中&#8230;</string>
     <string name="clear_completed">清除完毕</string>
@@ -1892,6 +1892,7 @@
     <string name="str_work_uu_sports">UU运动</string>
     <string name="str_work_invite_register">邀请注册</string>
     <string name="str_work_uu_education">UU课堂</string>
+    <string name="str_work_yingtang_song">英唐之歌</string>
 
     <string name="str_administrative_office">行政办公</string>
     <string name="str_work_work_approval">我的审批</string>

+ 6 - 0
app_modular/appbooking/src/main/java/com/modular/booking/activity/business/BBookingAddActivity.java

@@ -333,6 +333,12 @@ public class BBookingAddActivity extends SupportToolBarActivity implements View.
             bt_commit.setEnabled(true);
             return;
         }
+
+        if (StringUtil.isEmpty(tv_book_topic.getText().toString())) {
+            ToastMessage("请选择预约主题!");
+            bt_commit.setEnabled(true);
+            return;
+        }
         //前面四个值是连带出来的
         String map = "{" +
                 "\"ab_bman\":\"" + tvBookObject.getText().toString() + "\"," +

+ 1 - 1
app_modular/appbooking/src/main/java/com/modular/booking/adapter/ItemPopListAdapter.java

@@ -63,7 +63,7 @@ public class ItemPopListAdapter extends BaseAdapter {
         if (selectId==position) {
             convertView.setBackgroundResource(R.color.me_menu_item_press);
         }else{
-            convertView.setBackgroundResource(android.R.color.transparent);
+            convertView.setBackgroundResource(android.R.color.white);
         }
         initializeViews((ItemsSelectType1)getItem(position), (ViewHolder) convertView.getTag(),position);
         return convertView;

+ 1 - 1
app_modular/appbooking/src/main/res/layout/item_pop_list_select.xml

@@ -3,7 +3,7 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:id="@+id/tv_top"
-    android:background="@drawable/select_weixin_list_item">
+    android:background="@drawable/selector_check_items">
     <TextView
         android:id="@+id/tv_item_name"
         android:layout_width="wrap_content"

+ 14 - 7
app_modular/appme/src/main/java/com/uas/appme/settings/activity/SettingActivity.java

@@ -64,6 +64,7 @@ import com.me.network.app.http.HttpClient;
 import com.me.network.app.http.Method;
 import com.me.network.app.http.rx.ResultListener;
 import com.me.network.app.http.rx.ResultSubscriber;
+import com.modular.apputils.utils.PopupWindowHelper;
 import com.scwang.smartrefresh.layout.util.DensityUtil;
 import com.uas.appme.R;
 import com.uas.appme.pedometer.view.NewStepActivity;
@@ -183,8 +184,18 @@ public class SettingActivity extends SupportToolBarActivity implements View.OnCl
         mExitBtn.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-              //  showExitDialog();
-                showExitPop();
+//                startActivity(new Intent("com.usoftchina.pay.MainMusicActivity"));
+                PopupWindowHelper.showAlart(SettingActivity.this, getString(R.string.app_name), getString(R.string.exit_tips), new PopupWindowHelper.OnSelectListener() {
+                    @Override
+                    public void select(boolean selectOk) {
+                        if (selectOk){
+                            UserSp.getInstance(mContext).clearUserInfo();
+                            ViewUtil.clearAccount(mContext);
+                            LoginHelper.broadcastLogout(mContext);
+                            SettingActivity.this.finish();
+                        }
+                    }
+                });
             }
         });
         mCacheTv = (TextView) findViewById(R.id.cache_tv);
@@ -655,7 +666,6 @@ public class SettingActivity extends SupportToolBarActivity implements View.OnCl
     private  PopupWindow popupWindow;
     public void showExitPop() {
         View view = null;
-        
         WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
         if (popupWindow == null) {
             LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
@@ -670,10 +680,7 @@ public class SettingActivity extends SupportToolBarActivity implements View.OnCl
                 @Override
                 public void onClick(View view) {
                     popupWindow.dismiss();
-                    UserSp.getInstance(mContext).clearUserInfo();
-                    ViewUtil.clearAccount(mContext);
-                    LoginHelper.broadcastLogout(mContext);
-                    SettingActivity.this.finish();
+                  
                 }
             });
             tv_cancel.setOnClickListener(new View.OnClickListener() {

+ 12 - 1
app_modular/appme/src/main/res/drawable/bg_bule_btn.xml

@@ -1,4 +1,15 @@
 <?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/shape_corner_deep_blue_bg" android:state_selected="true" />
+    <item android:drawable="@drawable/shape_corner_deep_blue_bg" android:state_pressed="true" />
+    <item android:drawable="@drawable/shape_corner_deep_blue_bg" android:state_checked="true" />
+    <item android:drawable="@drawable/shape_corner_shallow_blue_bg" android:state_enabled="true" />
+    <item android:drawable="@drawable/shape_corner_blue_unable_bg" android:state_enabled="false" />
+    <item android:drawable="@drawable/shape_corner_shallow_blue_bg" />
+</selector>
+
+<!--
+<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_pressed="true">
         <shape>
@@ -21,4 +32,4 @@
             <padding android:bottom="0.5dp" android:left="0.5dp" android:right="0.5dp" android:top="0.5dp" />
         </shape>
     </item>
-</selector>
+</selector>-->

+ 1 - 1
app_modular/appme/src/main/res/values-en/strings.xml

@@ -376,7 +376,7 @@
     <string name="use_help">用户反馈</string>
     <string name="about_us">关于UU互联</string>
     <string name="app_version">当前版本</string>
-    <string name="exit_tips">确定退出此账号吗?</string>
+    <string name="exit_tips">确定退出此账号吗?</string>
     <string name="exit_current_account">退出登录</string>
     <string name="deleteing">删除中&#8230;</string>
     <string name="clear_completed">清除完毕</string>

+ 1 - 1
app_modular/appme/src/main/res/values/strings.xml

@@ -376,7 +376,7 @@
     <string name="use_help">用户反馈</string>
     <string name="about_us">关于UU互联</string>
     <string name="app_version">当前版本</string>
-    <string name="exit_tips">确定退出此账号吗?</string>
+    <string name="exit_tips">确定退出此账号吗?</string>
     <string name="exit_current_account">退出登录</string>
     <string name="deleteing">删除中&#8230;</string>
     <string name="clear_completed">清除完毕</string>

+ 1 - 0
app_modular/appmusic/.gitignore

@@ -0,0 +1 @@
+/build

+ 24 - 0
app_modular/appmusic/build.gradle

@@ -0,0 +1,24 @@
+apply plugin: 'com.android.library'
+
+
+android {
+    compileSdkVersion rootProject.ext.android.compileSdkVersion
+    buildToolsVersion rootProject.ext.android.buildToolsVersion
+    defaultConfig {
+        minSdkVersion rootProject.ext.android.minSdkVersion
+        targetSdkVersion rootProject.ext.android.targetSdkVersion
+        versionCode rootProject.ext.android.versionCode
+        versionName rootProject.ext.android.versionName
+    }
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+        }
+    }
+}
+
+dependencies {
+    compile fileTree(include: ['*.jar'], dir: 'libs')
+    compile project(':common')
+}

+ 25 - 0
app_modular/appmusic/proguard-rules.pro

@@ -0,0 +1,25 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in C:\Android\sdk/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile

+ 26 - 0
app_modular/appmusic/src/androidTest/java/com/usoftchina/music/ExampleInstrumentedTest.java

@@ -0,0 +1,26 @@
+package com.usoftchina.music;
+
+import android.content.Context;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumentation test, which will execute on an Android device.
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+    @Test
+    public void useAppContext() throws Exception {
+        // Context of the app under test.
+        Context appContext = InstrumentationRegistry.getTargetContext();
+
+        assertEquals("com.usoftchina.music.test", appContext.getPackageName());
+    }
+}

+ 18 - 0
app_modular/appmusic/src/main/AndroidManifest.xml

@@ -0,0 +1,18 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.usoftchina.music">
+
+    <application
+        android:allowBackup="true"
+        android:label="@string/app_name"
+        android:supportsRtl="true">
+        <activity android:name="com.usoftchina.pay.MainMusicActivity"
+            android:theme="@style/AppTheme.NoActionBar"
+            android:label="智慧英唐">
+            <intent-filter>
+                <action android:name="com.usoftchina.pay.MainMusicActivity" />
+
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+    </application>
+</manifest>

+ 67 - 0
app_modular/appmusic/src/main/java/com/lg/lrcview_master/DefaultLrcParser.java

@@ -0,0 +1,67 @@
+package com.lg.lrcview_master;
+
+import android.text.TextUtils;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * 默认的歌词解析器
+ * @author Ligang  2014/8/19
+ *
+ */
+public class DefaultLrcParser implements ILrcParser {
+	private static final DefaultLrcParser istance = new DefaultLrcParser();
+	
+	public static final DefaultLrcParser getIstance(){
+		return istance;
+	}
+	private DefaultLrcParser() {
+	}
+	/***
+	 * 将歌词文件里面的字符串 解析成一个List<LrcRow>
+	 */
+	@Override
+	public List<LrcRow> getLrcRows(String str) {
+		
+		if(TextUtils.isEmpty(str)){
+			return null;
+		}
+		BufferedReader br = new BufferedReader(new StringReader(str));
+		
+		List<LrcRow> lrcRows = new ArrayList<LrcRow>();
+		String lrcLine;
+		try {
+			while((lrcLine = br.readLine()) != null){
+				List<LrcRow> rows = LrcRow.createRows(lrcLine);
+				if(rows != null && rows.size() > 0){
+					lrcRows.addAll(rows);
+				}
+			}
+			Collections.sort(lrcRows);
+			
+			for (int i = 0; i < lrcRows.size()-1; i++) {
+				lrcRows.get(i).setTotalTime(lrcRows.get(i+1).getTime() - lrcRows.get(i).getTime());
+			}
+			lrcRows.get(lrcRows.size()-1).setTotalTime(5000);
+		} catch (IOException e) {
+			e.printStackTrace();
+			return null;
+		}finally{
+			if(br != null){
+				try {
+					br.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+		
+		return lrcRows;
+	}
+
+}

+ 13 - 0
app_modular/appmusic/src/main/java/com/lg/lrcview_master/ILrcParser.java

@@ -0,0 +1,13 @@
+package com.lg.lrcview_master;
+
+import java.util.List;
+
+/**
+ * 歌词解析器
+ * @author Ligang  2014/8/19
+ *
+ */
+public interface ILrcParser {
+
+	List<LrcRow> getLrcRows(String str);
+}

+ 35 - 0
app_modular/appmusic/src/main/java/com/lg/lrcview_master/ILrcView.java

@@ -0,0 +1,35 @@
+package com.lg.lrcview_master;
+
+import java.util.List;
+
+
+public interface ILrcView {
+	/**
+	 * 初始化画笔,颜色,字体大小等设置
+	 */
+	void init();
+	
+	/***
+	 * 设置数据源
+	 * @param lrcRows
+	 */
+	void setLrcRows(List<LrcRow> lrcRows);
+	
+	/**
+	 * 指定时间
+	 * @param progress  时间进度
+	 * @param fromSeekBarByUser 是否由用户触摸Seekbar触发
+	 */
+	void seekTo(int progress, boolean fromSeekBar, boolean fromSeekBarByUser);
+	
+	/***
+	 * 设置歌词文字的缩放比例
+	 * @param scalingFactor
+	 */
+	void setLrcScalingFactor(float scalingFactor);
+	
+	/**
+	 * 重置
+	 */
+	void reset();
+}

+ 118 - 0
app_modular/appmusic/src/main/java/com/lg/lrcview_master/LrcRow.java

@@ -0,0 +1,118 @@
+package com.lg.lrcview_master;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import android.text.TextUtils;
+import android.util.Log;
+
+/**
+ * 每行歌词的实体类,实现了Comparable接口,方便List<LrcRow>的sort排序
+ * @author Ligang  2014/8/19
+ *
+ */
+public class LrcRow implements Comparable<LrcRow>{
+
+	/**开始时间 为00:10:00***/
+	private String timeStr;
+	/**开始时间 毫米数  00:10:00  为10000**/
+	private int time;
+	/**歌词内容**/
+	private String content;
+	/**该行歌词显示的总时间**/
+	private int totalTime;
+	
+	public long getTotalTime() {
+		return totalTime;
+	}
+	public void setTotalTime(int totalTime) {
+		this.totalTime = totalTime;
+	}
+	public String getTimeStr() {
+		return timeStr;
+	}
+	public void setTimeStr(String timeStr) {
+		this.timeStr = timeStr;
+	}
+	public int getTime() {
+		return time;
+	}
+	public void setTime(int time) {
+		this.time = time;
+	}
+	public String getContent() {
+		return content;
+	}
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public LrcRow() {
+		super();
+	}
+	public LrcRow(String timeStr, int time, String content) {
+		super();
+		this.timeStr = timeStr;
+		this.time = time;
+		this.content = content;
+	}
+	/**
+	 * 将歌词文件中的某一行 解析成一个List<LrcRow> 
+	 * 因为一行中可能包含了多个LrcRow对象
+	 * 比如  [03:33.02][00:36.37]当鸽子不再象征和平  ,就包含了2个对象
+	 * @param lrcLine
+	 * @return
+	 */
+	public static final List<LrcRow> createRows(String lrcLine){
+		if(!lrcLine.startsWith("[") || lrcLine.indexOf("]") != 9){
+			return null;
+		}
+		//最后一个"]" 
+		int lastIndexOfRightBracket = lrcLine.lastIndexOf("]");
+		//歌词内容
+		String content = lrcLine.substring(lastIndexOfRightBracket+1, lrcLine.length());
+		//截取出歌词时间,并将"[" 和"]" 替换为"-"   [offset:0]
+		System.out.println("lrcLine="+lrcLine);
+		// -03:33.02--00:36.37-
+		String times = lrcLine.substring(0, lastIndexOfRightBracket+1).replace("[", "-").replace("]", "-");
+		String[] timesArray = times.split("-");
+		List<LrcRow> lrcRows = new ArrayList<LrcRow>();
+		for (String tem : timesArray) {
+			if(TextUtils.isEmpty(tem.trim())){
+				continue;
+			}
+			//
+			try{
+				LrcRow lrcRow = new LrcRow(tem, formatTime(tem), content);
+				lrcRows.add(lrcRow);
+			}catch(Exception e){
+				Log.w("LrcRow", e.getMessage());
+			}
+		}
+		return lrcRows;
+	}
+	/****
+	 * 把歌词时间转换为毫秒值  如 将00:10.00  转为10000
+	 * @param tem
+	 * @return
+	 */
+	private static int formatTime(String timeStr) {
+		timeStr = timeStr.replace('.', ':');
+		String[] times = timeStr.split(":");
+
+		return Integer.parseInt(times[0])*60*1000
+				+ Integer.parseInt(times[1])*1000 
+				+ Integer.parseInt(times[2]);
+	}
+	@Override
+	public int compareTo(LrcRow anotherLrcRow) {
+		return (int) (this.time - anotherLrcRow.time);
+	}
+	@Override
+	public String toString() {
+		return "LrcRow [timeStr=" + timeStr + ", time=" + time + ", content="
+				+ content + "]";
+	} 
+
+
+}

+ 466 - 0
app_modular/appmusic/src/main/java/com/lg/lrcview_master/LrcView.java

@@ -0,0 +1,466 @@
+package com.lg.lrcview_master;
+
+import android.animation.ValueAnimator;
+import android.animation.ValueAnimator.AnimatorUpdateListener;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewConfiguration;
+import android.widget.Scroller;
+
+import java.util.List;
+
+/***
+ * 
+ * 须知:
+ * 在ViewGroup里面 scrollTo,scrollBy方法移动的是子View
+ * 在View里面scrollTo,scrollBy方法移动的是View里面绘制的内容
+ * 要点:
+ * 1:歌词的上下平移用什么实现?
+ *    用Scroller实现,Scroller只是一个工具而已,
+ *    真正实现滚动效果的还是View的scrollTo方法
+ * 2:歌词的水平滚动怎么实现?
+ *    通过属性动画ValueAnimator控制高亮歌词绘制的x轴起始坐标
+ * 
+ * @author Ligang  2014/8/19
+ *
+ */
+public class LrcView extends View implements ILrcView {
+	/**所有的歌词***/
+	private List<LrcRow> mLrcRows;
+	/**无歌词数据的时候 显示的默认文字**/
+	private static final String DEFAULT_TEXT = "智慧英唐,全球共享";
+	/**默认文字的字体大小**/
+	private static final float SIZE_FOR_DEFAULT_TEXT = 60;
+
+	/**画高亮歌词的画笔***/
+	private Paint mPaintForHighLightLrc;
+	/**高亮歌词的默认字体大小***/
+	private static final float DEFAULT_SIZE_FOR_HIGHT_LIGHT_LRC = 37;
+	/**高亮歌词当前的字体大小***/
+	private float mCurSizeForHightLightLrc = DEFAULT_SIZE_FOR_HIGHT_LIGHT_LRC;
+	/**高亮歌词的默认字体颜色**/
+	private static final int DEFAULT_COLOR_FOR_HIGHT_LIGHT_LRC = 0xff2FABCF;
+	/**高亮歌词当前的字体颜色**/
+	private int mCurColorForHightLightLrc = DEFAULT_COLOR_FOR_HIGHT_LIGHT_LRC;
+
+	/**画其他歌词的画笔***/
+	private Paint mPaintForOtherLrc;
+	/**其他歌词的默认字体大小***/
+	private static final float DEFAULT_SIZE_FOR_OTHER_LRC = 32;
+	/**其他歌词当前的字体大小***/
+	private float mCurSizeForOtherLrc = DEFAULT_SIZE_FOR_OTHER_LRC;
+	/**高亮歌词的默认字体颜色**/
+	private static final int DEFAULT_COLOR_FOR_OTHER_LRC =  0xff666666;
+	/**高亮歌词当前的字体颜色**/
+	private int mCurColorForOtherLrc = DEFAULT_COLOR_FOR_OTHER_LRC;
+
+
+	/**画时间线的画笔***/
+	private Paint mPaintForTimeLine;
+	/***时间线的颜色**/
+	private static final int COLOR_FOR_TIME_LINE = 0xffD02090;
+	/**时间文字大小**/
+	private static final int SIZE_FOR_TIME = 18;
+	/**是否画时间线**/
+	private boolean mIsDrawTimeLine = false;
+
+	/**歌词间默认的行距**/
+	private static final float DEFAULT_PADDING = 50;
+	/**歌词当前的行距**/
+	private float mCurPadding = DEFAULT_PADDING;
+
+	/**歌词的最大缩放比例**/
+	public static final float MAX_SCALING_FACTOR = 2.5f;
+	/**歌词的最小缩放比例**/
+	public static final float MIN_SCALING_FACTOR = 1.5f;
+	/**默认缩放比例**/
+	private static final float DEFAULT_SCALING_FACTOR = 1.8f;
+	/**歌词的当前缩放比例**/
+	private float mCurScalingFactor = DEFAULT_SCALING_FACTOR;
+
+	/**实现歌词竖直方向平滑滚动的辅助对象**/
+	private Scroller mScroller;
+	/***移动一句歌词的持续时间**/
+	private static final int DURATION_FOR_LRC_SCROLL = 1500;
+	/***停止触摸时 如果View需要滚动 时的持续时间**/
+	private static final int DURATION_FOR_ACTION_UP = 400;
+
+	/**控制文字缩放的因子**/
+	private float mCurFraction = 0;
+	private int mTouchSlop;
+
+	public LrcView(Context context) {
+		super(context);
+		init();
+	}
+	public LrcView(Context context, AttributeSet attrs) {
+		super(context, attrs);
+		init();
+	}
+
+
+	/**
+	 * 初始化画笔等
+	 */
+	@Override
+	public void init() {
+		mScroller = new Scroller(getContext());
+		mPaintForHighLightLrc = new Paint();
+		mPaintForHighLightLrc.setColor(mCurColorForHightLightLrc);
+		mPaintForHighLightLrc.setTextSize(mCurSizeForHightLightLrc);
+
+		mPaintForOtherLrc = new Paint();
+		mPaintForOtherLrc.setColor(mCurColorForOtherLrc);
+		mPaintForOtherLrc.setTextSize(mCurSizeForOtherLrc);
+
+		mPaintForTimeLine = new Paint();
+		mPaintForTimeLine.setColor(COLOR_FOR_TIME_LINE);
+		mPaintForTimeLine.setTextSize(SIZE_FOR_TIME);
+
+		mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
+	}
+
+	private int mTotleDrawRow;
+	@Override
+	protected void onDraw(Canvas canvas) {
+		super.onDraw(canvas);
+		if(mLrcRows == null || mLrcRows.size() == 0){
+			//画默认的显示文字
+			mPaintForOtherLrc.setTextSize(SIZE_FOR_DEFAULT_TEXT);
+			float textWidth = mPaintForOtherLrc.measureText(DEFAULT_TEXT);
+			float textX = (getWidth()-textWidth)/2;
+			canvas.drawText(DEFAULT_TEXT, textX, getHeight()/2, mPaintForOtherLrc);
+			return;
+		}
+		if(mTotleDrawRow == 0){
+			//初始化将要绘制的歌词行数
+			mTotleDrawRow = (int) (getHeight()/(mCurSizeForOtherLrc+mCurPadding))+4;
+		}
+		//因为不需要将所有歌词画出来
+		int minRaw = mCurRow - (mTotleDrawRow-1)/2;
+		int maxRaw = mCurRow + (mTotleDrawRow-1)/2;
+		minRaw = Math.max(minRaw, 0); //处理上边界
+		maxRaw = Math.min(maxRaw, mLrcRows.size()-1); //处理下边界
+		//实现渐变的最大歌词行数
+		int count = Math.max(maxRaw-mCurRow, mCurRow-minRaw);
+		//两行歌词间字体颜色变化的透明度
+		int alpha = (0xFF-0x11)/count;
+		//画出来的第一行歌词的y坐标
+		float rowY = getHeight()/2 + minRaw*(mCurSizeForOtherLrc + mCurPadding);
+		for (int i = minRaw; i <= maxRaw; i++) {
+
+			if(i == mCurRow){//画高亮歌词
+				//因为有缩放效果,所有需要动态设置歌词的字体大小
+				float textSize = mCurSizeForOtherLrc + (mCurSizeForHightLightLrc - mCurSizeForOtherLrc)*mCurFraction;
+				mPaintForHighLightLrc.setTextSize(textSize);
+
+				String text = mLrcRows.get(i).getContent();//获取到高亮歌词
+				float textWidth = mPaintForHighLightLrc.measureText(text);//用画笔测量歌词的宽度
+				if(textWidth > getWidth()){
+					//如果歌词宽度大于view的宽,则需要动态设置歌词的起始x坐标,以实现水平滚动
+					canvas.drawText(text, mCurTextXForHighLightLrc, rowY, mPaintForHighLightLrc);
+				}else{
+					//如果歌词宽度小于view的宽,则让歌词居中显示
+					float textX =  (getWidth()-textWidth)/2;
+					canvas.drawText(text, textX, rowY, mPaintForHighLightLrc);
+				}
+			}else{
+				if(i == mLastRow){//画高亮歌词的上一句
+					//因为有缩放效果,所有需要动态设置歌词的字体大小
+					float textSize = mCurSizeForHightLightLrc - (mCurSizeForHightLightLrc - mCurSizeForOtherLrc)*mCurFraction;
+					mPaintForOtherLrc.setTextSize(textSize);
+				}else{//画其他的歌词
+					mPaintForOtherLrc.setTextSize(mCurSizeForOtherLrc);
+				}
+				String text = mLrcRows.get(i).getContent();
+				float textWidth = mPaintForOtherLrc.measureText(text);
+				float textX = (getWidth()-textWidth)/2;
+				//如果计算出的textX为负数,将textX置为0(实现:如果歌词宽大于view宽,则居左显示,否则居中显示)
+				textX = Math.max(textX, 0);
+				//实现颜色渐变  从0xFFFFFFFF 逐渐变为 0x11FFFFFF(颜色还是白色,只是透明度变化)
+				int curAlpha = 255-(Math.abs(i-mCurRow)-1)*alpha; //求出当前歌词颜色的透明度
+				mPaintForOtherLrc.setColor(0x1000000*curAlpha+0xff666666);
+				canvas.drawText(text, textX, rowY, mPaintForOtherLrc);
+			}
+			//计算出下一行歌词绘制的y坐标
+			rowY += mCurSizeForOtherLrc + mCurPadding;
+		}
+
+		//画时间线和时间
+		if(mIsDrawTimeLine){
+			float y = getHeight()/2 + getScrollY();
+			canvas.drawText(mLrcRows.get(mCurRow).getTimeStr(), 0, y-5, mPaintForTimeLine);
+			canvas.drawLine(0, y, getWidth(), y, mPaintForTimeLine);
+		}
+
+	}
+	
+	/**是否可拖动歌词**/
+	private boolean canDrag = false;
+	/**事件的第一次的y坐标**/
+	private float firstY;
+	/**事件的上一次的y坐标**/
+	private float lastY;
+	private float lastX;
+	@Override
+	public boolean onTouchEvent(MotionEvent event) {
+		if(mLrcRows == null || mLrcRows.size() == 0){
+			return false;
+		}
+		switch (event.getAction()) {
+		case MotionEvent.ACTION_DOWN:
+			firstY = event.getRawY();
+			lastX = event.getRawX();
+			break;
+		case MotionEvent.ACTION_MOVE:
+			if(!canDrag){
+				if(Math.abs(event.getRawY() - firstY) > mTouchSlop && Math.abs(event.getRawY()-firstY) > Math.abs(event.getRawX()-lastX)){
+					canDrag = true;
+					mIsDrawTimeLine = true;
+					mScroller.forceFinished(true);
+					stopScrollLrc();
+					mCurFraction = 1;
+				}
+				lastY = event.getRawY();
+			}
+
+			if(canDrag){
+				float offset = event.getRawY() - lastY;//偏移量
+				if( getScrollY() - offset < 0){ 
+					if(offset > 0){
+						offset = offset/3;
+					}
+				}else if(getScrollY() - offset >mLrcRows.size()*(mCurSizeForOtherLrc+mCurPadding)-mCurPadding){
+					if(offset < 0 ){
+						offset = offset/3;
+					}
+				}
+				scrollBy(getScrollX(), -(int) offset);
+				lastY = event.getRawY();
+				int currentRow = (int) (getScrollY()/(mCurSizeForOtherLrc+mCurPadding));
+				currentRow = Math.min(currentRow, mLrcRows.size()-1);
+				currentRow = Math.max(currentRow, 0);
+				seekTo(mLrcRows.get(currentRow).getTime(), false,false);
+				return true;
+			}
+			lastY = event.getRawY();
+			break;
+		case MotionEvent.ACTION_UP:
+		case MotionEvent.ACTION_CANCEL:
+			if(!canDrag){
+				if(onLrcClickListener != null){
+					onLrcClickListener.onClick();
+				}
+			}else{
+				if(onSeekToListener!= null && mCurRow != -1){
+					onSeekToListener.onSeekTo(mLrcRows.get(mCurRow).getTime());
+				}
+				if(getScrollY() < 0){
+					smoothScrollTo(0,DURATION_FOR_ACTION_UP);
+				}else if(getScrollY() >mLrcRows.size()*(mCurSizeForOtherLrc+mCurPadding)-mCurPadding){
+					smoothScrollTo((int) (mLrcRows.size()*(mCurSizeForOtherLrc+mCurPadding)-mCurPadding),DURATION_FOR_ACTION_UP);
+				}
+
+				canDrag = false;
+				mIsDrawTimeLine = false;
+				invalidate();
+			}
+			break;
+		}
+		return true;
+	}
+	/**
+	 * 为LrcView设置歌词List集合数据
+	 */
+	@Override
+	public void setLrcRows(List<LrcRow> lrcRows) {
+		reset();
+		this.mLrcRows = lrcRows;
+		invalidate();
+	}
+
+	public List<LrcRow> getmLrcRows() {
+		return mLrcRows;
+	}
+	
+	/**当前高亮歌词的行号**/
+	private int mCurRow =-1;
+	/**上一次的高亮歌词的行号**/
+	private int mLastRow = -1;
+	
+	@Override
+	public void seekTo(int progress,boolean fromSeekBar,boolean fromSeekBarByUser) {
+		if(mLrcRows == null || mLrcRows.size() == 0){
+			return;
+		} 
+		//如果是由seekbar的进度改变触发 并且这时候处于拖动状态,则返回
+		if(fromSeekBar && canDrag){
+			return;
+		}
+		for (int i = mLrcRows.size()-1; i >= 0; i--) {
+
+			if(progress >= mLrcRows.get(i).getTime()){
+				if(mCurRow != i){
+					mLastRow = mCurRow;
+					mCurRow = i;
+					log("mCurRow=i="+mCurRow);
+					if(fromSeekBarByUser){
+						if(!mScroller.isFinished()){
+							mScroller.forceFinished(true);
+						}
+						scrollTo(getScrollX(), (int) (mCurRow * (mCurSizeForOtherLrc+mCurPadding)));
+					}else{
+						smoothScrollTo( (int) (mCurRow * (mCurSizeForOtherLrc+mCurPadding)), DURATION_FOR_LRC_SCROLL);
+					}
+					//如果高亮歌词的宽度大于View的宽,就需要开启属性动画,让它水平滚动
+					float textWidth = mPaintForHighLightLrc.measureText(mLrcRows.get(mCurRow).getContent());
+					log("textWidth="+textWidth+"getWidth()="+getWidth());
+					if(textWidth > getWidth()){
+						if(fromSeekBarByUser){
+							mScroller.forceFinished(true);
+						}
+						log("开始水平滚动歌词:"+mLrcRows.get(mCurRow).getContent());
+						startScrollLrc(getWidth()-textWidth, (long) (mLrcRows.get(mCurRow).getTotalTime()*0.6));
+					}
+					invalidate();
+				}
+				break;
+			}
+		}
+
+	}
+
+	/**控制歌词水平滚动的属性动画***/
+	private ValueAnimator mAnimator;
+	/**
+	 * 开始水平滚动歌词
+	 * @param endX 歌词第一个字的最终的x坐标
+	 * @param duration 滚动的持续时间
+	 */
+	private void startScrollLrc(float endX,long duration){
+		if(mAnimator == null){
+			mAnimator = ValueAnimator.ofFloat(0,endX);
+			mAnimator.addUpdateListener(updateListener);
+		}else{
+			mCurTextXForHighLightLrc = 0;
+			mAnimator.cancel();
+			mAnimator.setFloatValues(0,endX);
+		}
+		mAnimator.setDuration(duration);
+		mAnimator.setStartDelay((long) (duration*0.3)); //延迟执行属性动画
+		mAnimator.start();
+	}
+
+	/**
+	 * 停止歌词的滚动
+	 */
+	private void stopScrollLrc(){
+		if(mAnimator != null){
+			mAnimator.cancel();
+		}
+		mCurTextXForHighLightLrc = 0;
+	}
+	/**高亮歌词当前的其实x轴绘制坐标**/
+	private float mCurTextXForHighLightLrc;
+	/***
+	 * 监听属性动画的数值值的改变
+	 */
+	AnimatorUpdateListener updateListener = new AnimatorUpdateListener() {
+
+		@Override
+		public void onAnimationUpdate(ValueAnimator animation) {
+			//TODO
+			mCurTextXForHighLightLrc = (Float) animation.getAnimatedValue();
+			log("mCurTextXForHighLightLrc="+mCurTextXForHighLightLrc);
+			invalidate();
+		}
+	};
+	/**
+	 * 设置歌词的缩放比例
+	 */
+	@Override
+	public void setLrcScalingFactor(float scalingFactor) {
+		mCurScalingFactor = scalingFactor;
+		mCurSizeForHightLightLrc = DEFAULT_SIZE_FOR_HIGHT_LIGHT_LRC * mCurScalingFactor;
+		mCurSizeForOtherLrc = DEFAULT_SIZE_FOR_OTHER_LRC * mCurScalingFactor;
+		mCurPadding = DEFAULT_PADDING * mCurScalingFactor;
+		mTotleDrawRow = (int) (getHeight()/(mCurSizeForOtherLrc+mCurPadding))+3;
+		log("mRowTotal="+mTotleDrawRow);
+		scrollTo(getScrollX(), (int) (mCurRow*(mCurSizeForOtherLrc+mCurPadding)));
+		invalidate();
+		mScroller.forceFinished(true);
+	}
+	/**
+	 * 重置
+	 */
+	@Override
+	public void reset() {
+		if(!mScroller.isFinished()){
+			mScroller.forceFinished(true);
+		}
+		mLrcRows = null;
+		scrollTo(getScrollX(), 0);
+		invalidate();
+	}
+
+
+	/**
+	 * 平滑的移动到某处
+	 * @param dstY
+	 */
+	private void smoothScrollTo(int dstY,int duration){
+		int oldScrollY = getScrollY();
+		int offset = dstY - oldScrollY;
+		mScroller.startScroll(getScrollX(), oldScrollY, getScrollX(), offset, duration);
+		invalidate();
+	}
+
+	@Override
+	public void computeScroll() {
+		if (!mScroller.isFinished()) {
+			if (mScroller.computeScrollOffset()) {
+				int oldY = getScrollY();
+				int y = mScroller.getCurrY();
+				if (oldY != y && !canDrag) {
+					scrollTo(getScrollX(), y);
+				}
+				mCurFraction = mScroller.timePassed()*3f/DURATION_FOR_LRC_SCROLL;
+				mCurFraction = Math.min(mCurFraction, 1F);
+				invalidate();
+			}
+		} 
+	}
+	/**
+	 * 返回当前的歌词缩放比例
+	 * @return
+	 */
+	public float getmCurScalingFactor() {
+		return mCurScalingFactor;
+	}
+	
+	private OnSeekToListener onSeekToListener;
+	public void setOnSeekToListener(OnSeekToListener onSeekToListener) {
+		this.onSeekToListener = onSeekToListener;
+	}
+
+	public interface OnSeekToListener{
+		void onSeekTo(int progress);
+	}
+
+	private OnLrcClickListener onLrcClickListener;
+	public void setOnLrcClickListener(OnLrcClickListener onLrcClickListener) {
+		this.onLrcClickListener = onLrcClickListener;
+	}
+
+	public interface OnLrcClickListener{
+		void onClick();
+	}
+	public void log(Object o){
+		Log.d("LrcView", o+"");
+	}
+}

+ 271 - 0
app_modular/appmusic/src/main/java/com/usoftchina/pay/MainMusicActivity.java

@@ -0,0 +1,271 @@
+package com.usoftchina.pay;
+
+import android.media.MediaPlayer;
+import android.media.MediaPlayer.OnCompletionListener;
+import android.os.Bundle;
+import android.os.Handler;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.core.utils.StatusBarUtil;
+import com.lg.lrcview_master.DefaultLrcParser;
+import com.lg.lrcview_master.LrcRow;
+import com.lg.lrcview_master.LrcView.OnLrcClickListener;
+import com.lg.lrcview_master.LrcView.OnSeekToListener;
+import com.usoftchina.music.R;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.List;
+
+public class MainMusicActivity extends AppCompatActivity {
+	private MediaPlayer mPlayer;
+	/**    控制播放的SeekBar***/
+	
+	private SeekBar mPlayerSeekBar;
+	/**控制歌词字体大小的SeekBar***/
+	private SeekBar mLrcSeekBar;
+	private Button mPlayBtn;
+	private com.lg.lrcview_master.LrcView mLrcView;
+	private	TextView tv_timeStart;
+	private	TextView tv_timeTotal;
+
+	private Toast mPlayerToast;
+	private Toast mLrcToast;
+	private Toolbar toolbar;
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.activity_main_music);
+         
+		
+		initViews();
+		initPlayer();
+		toolbar=findViewById(R.id.commonToolBar);
+		StatusBarUtil.immersive(this, 0x00000000, 0.0f);
+		setSupportActionBar(toolbar);
+		getSupportActionBar().setDisplayShowTitleEnabled(false);
+		StatusBarUtil.setPaddingSmart(this, toolbar);
+
+		toolbar.setNavigationIcon(R.drawable.back_black);
+		toolbar.setNavigationOnClickListener(new OnClickListener() {
+			@Override
+			public void onClick(View view) {
+				onBackPressed();
+			}
+		});
+	}
+	private void initViews() {
+		mLrcView = (com.lg.lrcview_master.LrcView) findViewById(R.id.lrcView);
+		mLrcView.setOnSeekToListener(onSeekToListener);
+		mLrcView.setOnLrcClickListener(onLrcClickListener);
+		tv_timeStart = findViewById(R.id.tv_timeStart);
+		tv_timeTotal=findViewById(R.id.tv_timeTotal);
+		mPlayerSeekBar = (SeekBar) findViewById(R.id.include_player_seekbar);
+		mLrcSeekBar = (SeekBar) findViewById(R.id.include_lrc_seekbar);
+		mLrcSeekBar.setMax(100);
+		//为seekbar设置当前的progress
+		mLrcSeekBar.setOnSeekBarChangeListener(onSeekBarChangeListener);
+		new Handler().postDelayed(new Runnable() {
+			@Override
+			public void run() {
+				float scalingFactor = com.lg.lrcview_master.LrcView.MIN_SCALING_FACTOR + 0*(com.lg.lrcview_master.LrcView.MAX_SCALING_FACTOR- com.lg.lrcview_master.LrcView.MIN_SCALING_FACTOR)/100;
+				mLrcView.setLrcScalingFactor(scalingFactor);
+			}
+		},1000);
+		mPlayBtn = (Button) findViewById(R.id.btnPlay);
+		mPlayerSeekBar.setOnSeekBarChangeListener(onSeekBarChangeListener);
+		mPlayBtn.setOnClickListener(onClickListener);
+		//getCommonToolBar().setBackgroundResource(R.color.transparent);
+		
+	}
+
+	@Override
+	protected void onResume() {
+		super.onResume();
+	    
+	}
+
+	private void initPlayer() {
+		mPlayer = MediaPlayer.create(this, R.raw.yingtang);
+		mPlayer.setOnCompletionListener(onCompletionListener);
+	}
+	OnCompletionListener onCompletionListener = new OnCompletionListener() {
+		
+		@Override
+		public void onCompletion(MediaPlayer mp) {
+			mPlayBtn.setText("play");
+			mPlayBtn.setSelected(false);
+			mLrcView.reset();
+			handler.removeMessages(0);
+			mPlayerSeekBar.setProgress(0);
+		}
+	};
+	OnLrcClickListener onLrcClickListener = new OnLrcClickListener() {
+
+		@Override
+		public void onClick() {
+			//Toast.makeText(getApplicationContext(), "歌词被点击啦", Toast.LENGTH_SHORT).show();
+		}
+	};
+	OnSeekToListener onSeekToListener = new OnSeekToListener() {
+
+		@Override
+		public void onSeekTo(int progress) {
+			mPlayer.seekTo(progress);
+			
+		}
+	};
+	Handler handler = new Handler(){
+		public void handleMessage(android.os.Message msg) {
+			mPlayerSeekBar.setMax(mPlayer.getDuration());
+			mPlayerSeekBar.setProgress(mPlayer.getCurrentPosition());
+			handler.sendEmptyMessageDelayed(0, 100);
+		};
+	};
+	OnClickListener onClickListener = new OnClickListener() {
+
+		@Override
+		public void onClick(View v) {
+			if(v == mPlayBtn){
+				if("play".equals(mPlayBtn.getText())){
+					mPlayer.start();
+					mLrcView.setLrcRows(getLrcRows());
+					handler.sendEmptyMessage(0);
+					mPlayBtn.setText("暂停");
+					mPlayBtn.setSelected(true);
+				}else{
+
+					if(mPlayer.isPlaying()){
+						mPlayer.pause();
+						mPlayBtn.setText("播放");
+						mPlayBtn.setSelected(false);
+					}else{
+						mPlayBtn.setSelected(true);
+						mPlayer.start();
+						mPlayBtn.setText("暂停");
+					}
+				}
+			}
+		}
+	};
+
+	OnSeekBarChangeListener onSeekBarChangeListener = new OnSeekBarChangeListener() {
+
+		@Override
+		public void onStopTrackingTouch(SeekBar seekBar) {
+			if(seekBar == mPlayerSeekBar){
+				mPlayer.seekTo(seekBar.getProgress());
+				handler.sendEmptyMessageDelayed(0, 100);
+			}
+		}
+
+		@Override
+		public void onStartTrackingTouch(SeekBar seekBar) {
+			if(seekBar == mPlayerSeekBar){
+				handler.removeMessages(0);
+			}
+		}
+
+		@Override
+		public void onProgressChanged(SeekBar seekBar, int progress,
+				boolean fromUser) {
+			if(seekBar == mPlayerSeekBar){
+				mLrcView.seekTo(progress, true,fromUser);
+//				Log.d("timeStr",mLrcView.getmLrcRows().get(0).getTime()+"");
+				Log.d("timeStrA",progress+"");
+				tv_timeStart.setText(formatTimeFromProgress(progress));
+				tv_timeTotal.setText(formatTimeFromProgress(mPlayer.getDuration()));
+				if(fromUser){
+					
+					showPlayerToast(formatTimeFromProgress(progress));
+				}
+			}else if(seekBar == mLrcSeekBar){
+				float scalingFactor = com.lg.lrcview_master.LrcView.MIN_SCALING_FACTOR + progress*(com.lg.lrcview_master.LrcView.MAX_SCALING_FACTOR- com.lg.lrcview_master.LrcView.MIN_SCALING_FACTOR)/100;
+				mLrcView.setLrcScalingFactor(scalingFactor);
+				showLrcToast((int)(scalingFactor*100)+"%");
+			}
+		}
+
+	};
+	/**
+	 * 将播放进度的毫米数转换成时间格式
+	 * 如 3000 --> 00:03 
+	 * @param progress
+	 * @return
+	 */
+	private String formatTimeFromProgress(int progress){
+		//总的秒数 
+		int msecTotal = progress/1000;
+		int min = msecTotal/60;
+		int msec = msecTotal%60;
+		String minStr = min < 10 ? "0"+min:""+min;
+		String msecStr = msec < 10 ? "0"+msec:""+msec;
+		return minStr+":"+msecStr;
+	}
+	/**
+	 * 获取歌词List集合
+	 * @return
+	 */
+	private List<LrcRow> getLrcRows(){
+		List<LrcRow> rows = null;
+		InputStream is = getResources().openRawResource(R.raw.yingtanglrc);
+		BufferedReader br = new BufferedReader(new InputStreamReader(is));
+		String line ;
+		StringBuffer sb = new StringBuffer();
+		try {
+			while((line = br.readLine()) != null){
+				sb.append(line+"\n");
+			}
+			System.out.println(sb.toString());
+			rows = DefaultLrcParser.getIstance().getLrcRows(sb.toString());
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return rows;
+	}
+
+	private TextView mPlayerToastTv;
+	private void showPlayerToast(String text){
+		if(mPlayerToast == null){
+			mPlayerToast = new Toast(this);
+			mPlayerToastTv = (TextView) LayoutInflater.from(this).inflate(R.layout.toast, null);
+			mPlayerToast.setView(mPlayerToastTv);
+			mPlayerToast.setDuration(Toast.LENGTH_SHORT);
+		}
+		mPlayerToastTv.setText(text);
+		mPlayerToast.show();
+	}
+	private TextView mLrcToastTv;
+	private void showLrcToast(String text){
+		if(mLrcToast == null){
+			mLrcToast = new Toast(this);
+			mLrcToastTv = (TextView) LayoutInflater.from(this).inflate(R.layout.toast, null);
+			mLrcToast.setView(mLrcToastTv);
+			mLrcToast.setDuration(Toast.LENGTH_SHORT);
+		}
+		mLrcToastTv.setText(text);
+		mLrcToast.show();
+	}
+	
+	@Override
+	protected void onDestroy() {
+		super.onDestroy();
+		handler.removeMessages(0);
+		mPlayer.stop();
+		mPlayer.release();
+		mPlayer = null;
+		mLrcView.reset();
+	}
+}

BIN
app_modular/appmusic/src/main/res/drawable-hdpi/back_black.png


BIN
app_modular/appmusic/src/main/res/drawable-hdpi/bg_music.jpg


BIN
app_modular/appmusic/src/main/res/drawable-hdpi/bg_yingtang_music.png


BIN
app_modular/appmusic/src/main/res/drawable-hdpi/ic_launcher.png


BIN
app_modular/appmusic/src/main/res/drawable-hdpi/ic_player_seeker.png


BIN
app_modular/appmusic/src/main/res/drawable-hdpi/icon_music_yingtang.png


BIN
app_modular/appmusic/src/main/res/drawable-hdpi/music_paying.png


BIN
app_modular/appmusic/src/main/res/drawable-hdpi/music_start.png


BIN
app_modular/appmusic/src/main/res/drawable-hdpi/music_top.png


BIN
app_modular/appmusic/src/main/res/drawable-xhdpi/back_black.png


BIN
app_modular/appmusic/src/main/res/drawable-xhdpi/ic_launcher.png


BIN
app_modular/appmusic/src/main/res/drawable-xhdpi/music_paying.png


BIN
app_modular/appmusic/src/main/res/drawable-xhdpi/music_start.png


BIN
app_modular/appmusic/src/main/res/drawable-xxhdpi/back_black.png


BIN
app_modular/appmusic/src/main/res/drawable-xxhdpi/ic_launcher.png


BIN
app_modular/appmusic/src/main/res/drawable-xxhdpi/music_paying.png


BIN
app_modular/appmusic/src/main/res/drawable-xxhdpi/music_start.png


+ 18 - 0
app_modular/appmusic/src/main/res/drawable/layer_list_progrssbar_play_bottom.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list
+  xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:id="@android:id/background">
+        <shape>
+            <solid android:color="#ffdcdcdc" />
+            <corners android:radius="1dip" />
+        </shape>
+    </item>
+    <item android:id="@android:id/progress">
+        <clip>
+            <shape>
+                <solid android:color="#99666666" />
+                <corners android:radius="1dp" />
+            </shape>
+        </clip>
+    </item>
+</layer-list>

+ 11 - 0
app_modular/appmusic/src/main/res/drawable/layer_list_thumb_playing_default.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list
+    xmlns:android="http://schemas.android.com/apk/res/android">
+    <item >
+        <shape android:shape="oval">
+            <solid
+                android:color="@android:color/holo_green_light" />
+        </shape>
+    </item>
+    <item  android:drawable="@drawable/ic_player_seeker" />
+</layer-list>

+ 10 - 0
app_modular/appmusic/src/main/res/drawable/layer_list_thumb_playing_press.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list
+  xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <shape android:shape="oval">
+            <solid android:color="#99249ef6" />
+        </shape>
+    </item>
+    <item android:drawable="@drawable/ic_player_seeker" />
+</layer-list>

+ 10 - 0
app_modular/appmusic/src/main/res/drawable/selector_btn.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android" >
+    <item android:state_pressed="true"
+        android:drawable="@drawable/music_paying"
+        ></item>
+    <item android:state_selected="true"
+        android:drawable="@drawable/music_paying"
+        ></item>
+    <item android:drawable="@drawable/music_start"></item>
+</selector>

+ 6 - 0
app_modular/appmusic/src/main/res/drawable/selector_progress_bar_playing.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item 
+        android:drawable="@drawable/layer_list_thumb_playing_press" android:state_pressed="true"/>
+    <item  android:drawable="@drawable/layer_list_thumb_playing_default"/>
+</selector>

+ 9 - 0
app_modular/appmusic/src/main/res/drawable/shape_btn_n.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android" 
+    android:shape="rectangle"
+    >
+    
+    <corners android:radius="2dp"/>
+
+    <solid android:color="#ffffff"/>
+</shape>

+ 9 - 0
app_modular/appmusic/src/main/res/drawable/shape_btn_p.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android" 
+    android:shape="rectangle"
+    >
+    
+    <corners android:radius="2dp"/>
+
+    <solid android:color="#EE4000"/>
+</shape>

+ 9 - 0
app_modular/appmusic/src/main/res/drawable/shape_btn_u.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android" 
+    android:shape="rectangle"
+    >
+    
+    <corners android:radius="2dp"/>
+
+    <solid android:color="#444444"/>
+</shape>

+ 10 - 0
app_modular/appmusic/src/main/res/drawable/shape_toast_bg.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle"
+     >
+    <solid android:color="#ffffff"/>
+    <corners android:radius="3dp"/>
+
+    <stroke android:width="2dp"
+        android:color="#88444444"/>
+</shape>

+ 101 - 0
app_modular/appmusic/src/main/res/layout/activity_main_music.xml

@@ -0,0 +1,101 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+ 
+    <ImageView
+        android:layout_width="fill_parent"
+        android:layout_height="match_parent"
+        android:alpha="1"
+        android:scaleType="centerCrop"
+        android:src="@drawable/bg_yingtang_music"
+        android:background="@color/transparent"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentStart="true" />
+
+    <RelativeLayout
+        android:id="@+id/bottom"
+        android:layout_width="match_parent"
+        android:layout_height="120dp"
+        android:layout_alignParentBottom="true"
+        android:orientation="vertical" >
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="90dp"
+            android:layout_alignParentBottom="true"
+            android:gravity="center"
+            android:orientation="horizontal"
+            android:paddingBottom="5dp"
+            android:paddingLeft="20dp" >
+
+            <Button
+                android:id="@+id/btnPlay"
+                android:layout_width="30dp"
+                android:layout_height="30dp"
+                android:textColor="@android:color/transparent"
+                android:background="@drawable/selector_btn"
+                android:text="play" />
+
+            <include
+                android:id="@+id/include_lrc_seekbar"
+                android:visibility="gone"
+                layout="@layout/seekbar" />
+        </LinearLayout>
+        <RelativeLayout 
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+        <TextView
+            android:id="@+id/tv_timeStart"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="10dp"
+            android:layout_centerVertical="true"
+            android:text="00:00" />
+        <include
+            android:id="@+id/include_player_seekbar"
+            android:layout_width="wrap_content"
+            android:layout_height="20dp"
+            android:layout_centerVertical="true"
+            android:layout_toEndOf="@+id/tv_timeStart"
+            android:layout_toRightOf="@+id/tv_timeStart"
+            layout="@layout/seekbar" />
+
+        <TextView
+            android:id="@+id/tv_timeTotal"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerVertical="true"
+            android:layout_marginRight="5dp"
+            android:layout_toRightOf="@+id/include_player_seekbar"
+            android:text="00:00" />
+        </RelativeLayout>
+    </RelativeLayout>
+
+    <android.support.v7.widget.Toolbar 
+        android:id="@+id/commonToolBar"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:minHeight="?attr/actionBarSize"
+        android:background="@color/transparent">
+        <TextView
+            android:id="@+id/commonTitleTv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="left|center_vertical"
+            android:text="智慧英唐"
+            android:textColor="#666666"
+            android:textSize="18sp" />
+    </android.support.v7.widget.Toolbar>
+    <com.lg.lrcview_master.LrcView
+        android:id="@+id/lrcView"
+       android:layout_below="@+id/commonToolBar"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_above="@id/bottom"
+        android:layout_marginLeft="30dp"
+        android:layout_marginRight="30dp"
+        android:layout_marginBottom="10dp"/>
+
+</RelativeLayout>

+ 18 - 0
app_modular/appmusic/src/main/res/layout/seekbar.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+
+
+
+    <SeekBar
+       xmlns:android="http://schemas.android.com/apk/res/android"
+        android:id="@+id/seekBar"
+        android:layout_width="wrap_content"
+        android:layout_height="20dp"
+        android:layout_alignParentTop="true"
+        android:layout_centerVertical="true"
+        android:maxHeight="1.5dp"
+        android:minHeight="1.5dp"
+        android:minWidth="230dp"
+        android:progressDrawable="@drawable/layer_list_progrssbar_play_bottom"
+        android:thumb="@drawable/selector_progress_bar_playing"
+        android:thumbOffset="10dp" />

+ 16 - 0
app_modular/appmusic/src/main/res/layout/toast.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:id="@+id/tv_toast_progress"
+    android:text="01:22"
+    android:background="@drawable/shape_toast_bg"
+    android:paddingLeft="20dp"
+    android:paddingRight="20dp"
+    android:paddingTop="10dp"
+    android:paddingBottom="10dp"
+    android:textColor="#000000"
+    >
+    
+
+</TextView>

BIN
app_modular/appmusic/src/main/res/raw/yingtang.mp3


+ 33 - 0
app_modular/appmusic/src/main/res/raw/yingtanglrc.lrc

@@ -0,0 +1,33 @@
+[00:00.01]歌曲:智慧英唐
+[00:20.35]
+[00:20.55]英唐英唐
+[00:24.72]迎着朝阳启航
+[00:28.56]意气风发斗志昂扬
+[00:32.55]豪情藏在胸膛
+[00:36.91]信念是我们的行囊...
+[00:45.00]泥泞中互为肩膀
+[00:49.16]彼此不再彷徨
+[00:52.98]只要心怀梦想
+[00:57.17]定能乘风破浪
+[01:01.31]自强不息坚定地追逐梦想
+[01:09.17]厚德载物诚信是我们的干粮
+[01:17.31]开拓创新英唐智慧要让全球共享
+[01:25.75]携手共进挥洒汗水铸就强大英唐
+[01:33.81]
+[01:42.48]英唐英唐
+[01:46.50]怀揣梦想启航
+[01:50.22]越过高山跨过海洋
+[01:54.62]来路不及回望
+[01:58.41]奉献是我们的信仰...
+[02:06.92]孤独时相互守望
+[02:10.90]风雨中一起成长
+[02:14.99]只要挑起责任
+[02:18.68]定能铸就辉煌
+[02:23.07]自强不息坚定地追逐梦想
+[02:31.22]厚德载物诚信是我们的干粮
+[02:39.13]开拓创新英唐智慧要让全球共享
+[02:47.35]携手共进挥洒汗水铸就强大英唐
+[02:55.27]
+[02:56.14]人人都贡献力量
+[03:00.18]让世界为我们的精彩鼓掌...
+[03:06.92]

+ 3 - 0
app_modular/appmusic/src/main/res/values/strings.xml

@@ -0,0 +1,3 @@
+<resources>
+    <string name="app_name">music</string>
+</resources>

+ 17 - 0
app_modular/appmusic/src/test/java/com/usoftchina/music/ExampleUnitTest.java

@@ -0,0 +1,17 @@
+package com.usoftchina.music;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+public class ExampleUnitTest {
+    @Test
+    public void addition_isCorrect() throws Exception {
+        assertEquals(4, 2 + 2);
+    }
+}

+ 25 - 14
app_modular/apputils/src/main/res/layout/item_select_alert_pop.xml

@@ -1,17 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
+    android:layout_height="wrap_content"
     android:gravity="center_horizontal"
     android:orientation="vertical"
-    android:paddingLeft="10dp"
-    android:paddingRight="10dp"
-    android:paddingTop="10dp">
+    android:paddingLeft="@dimen/dp_10"
+    android:paddingTop="@dimen/dp_10"
+    android:paddingRight="@dimen/dp_10"
+    android:paddingBottom="@dimen/dp_4">
 
     <TextView
         android:id="@+id/title_tv"
         android:layout_width="match_parent"
         android:layout_height="20dp"
+        android:textStyle="bold"
         android:gravity="center"
         android:text="@string/common_dialog_title"
         android:textColor="@color/text_main"
@@ -21,24 +23,29 @@
     <TextView
         android:id="@+id/message_tv"
         android:layout_width="match_parent"
-        android:layout_height="50dp"
+        android:layout_height="60dp"
         android:layout_marginTop="5dp"
+        android:paddingLeft="@dimen/dp_10"
+        android:paddingRight="@dimen/dp_10"
         android:ellipsize="end"
-        android:gravity="center"
+        android:gravity="left|center_vertical"
         android:maxLines="2"
         android:textColor="@color/text_hine"
         android:textSize="@dimen/text_main" />
 
-    <View
+ <!--   <View
         android:layout_width="match_parent"
         android:layout_height="2px"
         android:layout_marginTop="10dp"
         android:background="@color/item_line" />
-
+-->
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="40dp"
         android:orientation="horizontal"
+        android:paddingLeft="@dimen/dp_10"
+        android:paddingRight="@dimen/dp_10"
+        android:padding="@dimen/dp_4"
         android:textColor="@color/text_main"
         android:textSize="@dimen/text_main">
 
@@ -47,15 +54,17 @@
             android:layout_width="0dp"
             android:layout_height="match_parent"
             android:layout_weight="1"
+            android:textColor="@color/titleBlue"
+            android:background="@drawable/selector_cancel_bg"
             android:gravity="center"
             android:text="@string/common_cancel"
-            android:textColor="@color/text_main"
-            android:textSize="@dimen/text_main" />
+            android:layout_marginRight="20dp"
+            android:textSize="@dimen/text_hine" />
 
-        <View
+ <!--       <View
             android:layout_width="2px"
             android:layout_height="match_parent"
-            android:background="@color/item_line" />
+            android:background="@color/item_line" />-->
 
         <TextView
             android:id="@+id/sure_tv"
@@ -63,8 +72,10 @@
             android:layout_height="match_parent"
             android:layout_weight="1"
             android:gravity="center"
+            android:layout_marginLeft="20dp"
+            android:background="@drawable/selector_confirm_bg"
             android:text="@string/common_sure"
-            android:textColor="@color/text_main"
-            android:textSize="@dimen/text_main" />
+            android:textColor="@color/white"
+            android:textSize="@dimen/text_hine" />
     </LinearLayout>
 </LinearLayout>

+ 2 - 2
settings.gradle

@@ -17,7 +17,7 @@ include ':appworks'
 include ':appmoments'
 include ':apptasks'
 include ':apputils'
-
+include  ':appmusic'
 //第三库模块
 
 include ':lib-zxing'
@@ -49,7 +49,7 @@ project(':appbooking').projectDir = new File('app_modular/appbooking')
 project(':appmoments').projectDir = new File('app_modular/appmoments')
 project(':apptasks').projectDir = new File('app_modular/apptasks')
 project(':apputils').projectDir = new File('app_modular/apputils')
-
+project(':appmusic').projectDir = new File('app_modular/appmusic')
 //第三库模块
 
 project(':lib-zxing').projectDir = new File('app_third/lib-zxing')