list) {
+ contentText8.setVisibility(VISIBLE);
+ contentText8.setText(list.get(7));
+ contentText8.setOnClickListener(this);
+ }
+
+ /**
+ * 显示内容区域第一行
+ */
+ private void showLineOne() {
+ contentLayout1.setVisibility(VISIBLE);
+ contentLayout2.setVisibility(GONE);
+ }
+ /**
+ * 显示内容区域第二行
+ */
+ private void showLineTwo() {
+ contentLayout1.setVisibility(VISIBLE);
+ contentLayout2.setVisibility(VISIBLE);
+ }
+
+ public OnContentTextClickListener getListener() {
+ return listener;
+ }
+
+ public void setListener(OnContentTextClickListener listener) {
+ this.listener = listener;
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.textview1:
+ listener.onContentTextClick(contentText1.getText());
+ break;
+ case R.id.textview2:
+ listener.onContentTextClick(contentText2.getText());
+ break;
+ case R.id.textview3:
+ listener.onContentTextClick(contentText3.getText());
+ break;
+ case R.id.textview4:
+ listener.onContentTextClick(contentText4.getText());
+ break;
+ case R.id.textview5:
+ listener.onContentTextClick(contentText5.getText());
+ break;
+ case R.id.textview6:
+ listener.onContentTextClick(contentText6.getText());
+ break;
+ case R.id.textview7:
+ listener.onContentTextClick(contentText7.getText());
+ break;
+ case R.id.textview8:
+ listener.onContentTextClick(contentText8.getText());
+ break;
+ }
+ }
+}
diff --git a/app/src/main/java/com/coder/guoy/recyclerview/view/classification/OnContentTextClickListener.java b/app/src/main/java/com/coder/guoy/recyclerview/view/classification/OnContentTextClickListener.java
new file mode 100644
index 0000000..7ada05e
--- /dev/null
+++ b/app/src/main/java/com/coder/guoy/recyclerview/view/classification/OnContentTextClickListener.java
@@ -0,0 +1,11 @@
+package com.coder.guoy.recyclerview.view.classification;
+
+/**
+ * @Version:
+ * @Author:Guoy
+ * @CreateTime:2017/5/27
+ * @Descrpiton:
+ */
+public interface OnContentTextClickListener {
+ void onContentTextClick(CharSequence content);
+}
diff --git a/app/src/main/java/com/coder/guoy/recyclerview/view/statusbar/StatusBarUtil.java b/app/src/main/java/com/coder/guoy/recyclerview/view/statusbar/StatusBarUtil.java
new file mode 100644
index 0000000..f80fb3c
--- /dev/null
+++ b/app/src/main/java/com/coder/guoy/recyclerview/view/statusbar/StatusBarUtil.java
@@ -0,0 +1,576 @@
+package com.coder.guoy.recyclerview.view.statusbar;
+
+import android.annotation.TargetApi;
+import android.app.Activity;
+import android.app.TabActivity;
+import android.content.Context;
+import android.graphics.Color;
+import android.os.Build;
+import android.support.annotation.ColorInt;
+import android.support.v4.widget.DrawerLayout;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+import android.widget.LinearLayout;
+
+/**
+ * Created by Jaeger on 16/2/14.
+ *
+ * Email: chjie.jaeger@gmail.com
+ * GitHub: https://github.com/laobie
+ */
+public class StatusBarUtil {
+
+ public static final int DEFAULT_STATUS_BAR_ALPHA = 112;
+
+ /**
+ * 设置状态栏颜色
+ *
+ * @param activity 需要设置的 activity
+ * @param color 状态栏颜色值
+ */
+ public static void setColor(Activity activity, @ColorInt int color) {
+ setColor(activity, color, DEFAULT_STATUS_BAR_ALPHA);
+ }
+
+ /**
+ * 设置状态栏颜色
+ *
+ * @param activity 需要设置的activity
+ * @param color 状态栏颜色值
+ * @param statusBarAlpha 状态栏透明度
+ */
+
+ public static void setColor(Activity activity, @ColorInt int color, int statusBarAlpha) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ activity.getWindow().setStatusBarColor(calculateStatusColor(color, statusBarAlpha));
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
+ int count = decorView.getChildCount();
+ if (count > 0 && decorView.getChildAt(count - 1) instanceof StatusBarView) {
+ decorView.getChildAt(count - 1).setBackgroundColor(calculateStatusColor(color, statusBarAlpha));
+ } else {
+ StatusBarView statusView = createStatusBarView(activity, color, statusBarAlpha);
+ decorView.addView(statusView);
+ }
+ setRootView(activity);
+ }
+ }
+
+ /**
+ * 设置状态栏纯色 不加半透明效果
+ *
+ * @param activity 需要设置的 activity
+ * @param color 状态栏颜色值
+ */
+ public static void setColorNoTranslucent(Activity activity, @ColorInt int color) {
+ setColor(activity, color, 0);
+ }
+
+ /**
+ * 设置状态栏颜色(5.0以下无半透明效果,不建议使用)
+ *
+ * @param activity 需要设置的 activity
+ * @param color 状态栏颜色值
+ */
+ @Deprecated
+ public static void setColorDiff(Activity activity, @ColorInt int color) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
+ return;
+ }
+ activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ // 生成一个状态栏大小的矩形
+ ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
+ int count = decorView.getChildCount();
+ if (count > 0 && decorView.getChildAt(count - 1) instanceof StatusBarView) {
+ decorView.getChildAt(count - 1).setBackgroundColor(color);
+ } else {
+ StatusBarView statusView = createStatusBarView(activity, color);
+ decorView.addView(statusView);
+ }
+ setRootView(activity);
+ }
+
+ /**
+ * 使状态栏半透明
+ *
+ * 适用于图片作为背景的界面,此时需要图片填充到状态栏
+ *
+ * @param activity 需要设置的activity
+ */
+ public static void setTranslucent(Activity activity) {
+ setTranslucent(activity, DEFAULT_STATUS_BAR_ALPHA);
+ }
+
+ /**
+ * 使状态栏半透明
+ *
+ * 适用于图片作为背景的界面,此时需要图片填充到状态栏
+ *
+ * @param activity 需要设置的activity
+ * @param statusBarAlpha 状态栏透明度
+ */
+ public static void setTranslucent(Activity activity, int statusBarAlpha) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
+ return;
+ }
+ setTransparent(activity);
+ addTranslucentView(activity, statusBarAlpha);
+ }
+
+ /**
+ * 针对根布局是 CoordinatorLayout, 使状态栏半透明
+ *
+ * 适用于图片作为背景的界面,此时需要图片填充到状态栏
+ *
+ * @param activity 需要设置的activity
+ * @param statusBarAlpha 状态栏透明度
+ */
+ public static void setTranslucentForCoordinatorLayout(Activity activity, int statusBarAlpha) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
+ return;
+ }
+ transparentStatusBar(activity);
+ addTranslucentView(activity, statusBarAlpha);
+ }
+
+ /**
+ * 设置状态栏全透明
+ *
+ * @param activity 需要设置的activity
+ */
+ public static void setTransparent(Activity activity) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
+ return;
+ }
+ transparentStatusBar(activity);
+ setRootView(activity);
+ }
+
+ /**
+ * 使状态栏透明(5.0以上半透明效果,不建议使用)
+ *
+ * 适用于图片作为背景的界面,此时需要图片填充到状态栏
+ *
+ * @param activity 需要设置的activity
+ */
+ @Deprecated
+ public static void setTranslucentDiff(Activity activity) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ // 设置状态栏透明
+ activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ setRootView(activity);
+ }
+ }
+
+ /**
+ * 为DrawerLayout 布局设置状态栏变色
+ *
+ * @param activity 需要设置的activity
+ * @param drawerLayout DrawerLayout
+ * @param color 状态栏颜色值
+ */
+ public static void setColorForDrawerLayout(Activity activity, DrawerLayout drawerLayout, @ColorInt int color) {
+ setColorForDrawerLayout(activity, drawerLayout, color, DEFAULT_STATUS_BAR_ALPHA);
+ }
+
+ /**
+ * 为DrawerLayout 布局设置状态栏颜色,纯色
+ *
+ * @param activity 需要设置的activity
+ * @param drawerLayout DrawerLayout
+ * @param color 状态栏颜色值
+ */
+ public static void setColorNoTranslucentForDrawerLayout(Activity activity, DrawerLayout drawerLayout, @ColorInt int color) {
+ setColorForDrawerLayout(activity, drawerLayout, color, 0);
+ }
+
+ /**
+ * 为DrawerLayout 布局设置状态栏变色
+ *
+ * @param activity 需要设置的activity
+ * @param drawerLayout DrawerLayout
+ * @param color 状态栏颜色值
+ * @param statusBarAlpha 状态栏透明度
+ */
+ public static void setColorForDrawerLayout(Activity activity, DrawerLayout drawerLayout, @ColorInt int color,
+ int statusBarAlpha) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
+ return;
+ }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
+ } else {
+ activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ }
+ // 生成一个状态栏大小的矩形
+ // 添加 statusBarView 到布局中
+ ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0);
+ if (contentLayout.getChildCount() > 0 && contentLayout.getChildAt(0) instanceof StatusBarView) {
+ contentLayout.getChildAt(0).setBackgroundColor(calculateStatusColor(color, statusBarAlpha));
+ } else {
+ StatusBarView statusBarView = createStatusBarView(activity, color);
+ contentLayout.addView(statusBarView, 0);
+ }
+ // 内容布局不是 LinearLayout 时,设置padding top
+ if (!(contentLayout instanceof LinearLayout) && contentLayout.getChildAt(1) != null) {
+ contentLayout.getChildAt(1)
+ .setPadding(contentLayout.getPaddingLeft(), getStatusBarHeight(activity) + contentLayout.getPaddingTop(),
+ contentLayout.getPaddingRight(), contentLayout.getPaddingBottom());
+ }
+ // 设置属性
+ ViewGroup drawer = (ViewGroup) drawerLayout.getChildAt(1);
+ drawerLayout.setFitsSystemWindows(false);
+ contentLayout.setFitsSystemWindows(false);
+ contentLayout.setClipToPadding(true);
+ drawer.setFitsSystemWindows(false);
+
+ addTranslucentView(activity, statusBarAlpha);
+ }
+
+ /**
+ * 为DrawerLayout 布局设置状态栏变色(5.0以下无半透明效果,不建议使用)
+ *
+ * @param activity 需要设置的activity
+ * @param drawerLayout DrawerLayout
+ * @param color 状态栏颜色值
+ */
+ @Deprecated
+ public static void setColorForDrawerLayoutDiff(Activity activity, DrawerLayout drawerLayout, @ColorInt int color) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ // 生成一个状态栏大小的矩形
+ ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0);
+ if (contentLayout.getChildCount() > 0 && contentLayout.getChildAt(0) instanceof StatusBarView) {
+ contentLayout.getChildAt(0).setBackgroundColor(calculateStatusColor(color, DEFAULT_STATUS_BAR_ALPHA));
+ } else {
+ // 添加 statusBarView 到布局中
+ StatusBarView statusBarView = createStatusBarView(activity, color);
+ contentLayout.addView(statusBarView, 0);
+ }
+ // 内容布局不是 LinearLayout 时,设置padding top
+ if (!(contentLayout instanceof LinearLayout) && contentLayout.getChildAt(1) != null) {
+ contentLayout.getChildAt(1).setPadding(0, getStatusBarHeight(activity), 0, 0);
+ }
+ // 设置属性
+ ViewGroup drawer = (ViewGroup) drawerLayout.getChildAt(1);
+ drawerLayout.setFitsSystemWindows(false);
+ contentLayout.setFitsSystemWindows(false);
+ contentLayout.setClipToPadding(true);
+ drawer.setFitsSystemWindows(false);
+ }
+ }
+
+ /**
+ * 为 DrawerLayout 布局设置状态栏透明
+ *
+ * @param activity 需要设置的activity
+ * @param drawerLayout DrawerLayout
+ */
+ public static void setTranslucentForDrawerLayout(Activity activity, DrawerLayout drawerLayout) {
+ setTranslucentForDrawerLayout(activity, drawerLayout, DEFAULT_STATUS_BAR_ALPHA);
+ }
+
+ /**
+ * 为 DrawerLayout 布局设置状态栏透明
+ *
+ * @param activity 需要设置的activity
+ * @param drawerLayout DrawerLayout
+ */
+ public static void setTranslucentForDrawerLayout(Activity activity, DrawerLayout drawerLayout, int statusBarAlpha) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
+ return;
+ }
+ setTransparentForDrawerLayout(activity, drawerLayout);
+ addTranslucentView(activity, statusBarAlpha);
+ }
+
+ /**
+ * 为 DrawerLayout 布局设置状态栏透明
+ *
+ * @param activity 需要设置的activity
+ * @param drawerLayout DrawerLayout
+ */
+ public static void setTransparentForDrawerLayout(Activity activity, DrawerLayout drawerLayout) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
+ return;
+ }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
+ } else {
+ activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ }
+
+ ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0);
+ // 内容布局不是 LinearLayout 时,设置padding top
+ if (!(contentLayout instanceof LinearLayout) && contentLayout.getChildAt(1) != null) {
+ contentLayout.getChildAt(1).setPadding(0, getStatusBarHeight(activity), 0, 0);
+ }
+
+ // 设置属性
+ ViewGroup drawer = (ViewGroup) drawerLayout.getChildAt(1);
+ drawerLayout.setFitsSystemWindows(false);
+ contentLayout.setFitsSystemWindows(false);
+ contentLayout.setClipToPadding(true);
+ drawer.setFitsSystemWindows(false);
+ }
+
+ /**
+ * 为 DrawerLayout 布局设置状态栏透明(5.0以上半透明效果,不建议使用)
+ *
+ * @param activity 需要设置的activity
+ * @param drawerLayout DrawerLayout
+ */
+ @Deprecated
+ public static void setTranslucentForDrawerLayoutDiff(Activity activity, DrawerLayout drawerLayout) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ // 设置状态栏透明
+ activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ // 设置内容布局属性
+ ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0);
+ contentLayout.setFitsSystemWindows(true);
+ contentLayout.setClipToPadding(true);
+ // 设置抽屉布局属性
+ ViewGroup vg = (ViewGroup) drawerLayout.getChildAt(1);
+ vg.setFitsSystemWindows(false);
+ // 设置 DrawerLayout 属性
+ drawerLayout.setFitsSystemWindows(false);
+ }
+ }
+
+ /**
+ * 为头部是 ImageView 的界面设置状态栏全透明
+ *
+ * @param activity 需要设置的activity
+ * @param needOffsetView 需要向下偏移的 View
+ */
+ public static void setTransparentForImageView(Activity activity, View needOffsetView) {
+ setTranslucentForImageView(activity, 0, needOffsetView);
+ }
+
+ /**
+ * 为头部是 ImageView 的界面设置状态栏透明(使用默认透明度)
+ *
+ * @param activity 需要设置的activity
+ * @param needOffsetView 需要向下偏移的 View
+ */
+ public static void setTranslucentForImageView(Activity activity, View needOffsetView) {
+ setTranslucentForImageView(activity, DEFAULT_STATUS_BAR_ALPHA, needOffsetView);
+ }
+
+ /**
+ * 为头部是 ImageView 的界面设置状态栏透明
+ *
+ * @param activity 需要设置的activity
+ * @param statusBarAlpha 状态栏透明度
+ * @param needOffsetView 需要向下偏移的 View
+ */
+ public static void setTranslucentForImageView(Activity activity, int statusBarAlpha, View needOffsetView) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
+ return;
+ }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
+ activity.getWindow()
+ .getDecorView()
+ .setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
+ if (activity instanceof TabActivity){
+ activity.getWindow()//兼容TabActivity
+ .setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ }
+ } else {
+ activity.getWindow()
+ .setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ }
+ addTranslucentView(activity, statusBarAlpha);
+ if (needOffsetView != null) {
+ ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) needOffsetView.getLayoutParams();
+ if (layoutParams != null) {
+ layoutParams.setMargins(0, getStatusBarHeight(activity), 0, 0);
+ }
+ }
+ }
+
+ public static void setMargin(Activity activity, View needOffsetView) {
+ if (needOffsetView != null) {
+ ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) needOffsetView.getLayoutParams();
+ if (layoutParams != null) {
+ layoutParams.setMargins(0, getStatusBarHeight(activity), 0, 0);
+ }
+ }
+ }
+
+
+ /**
+ * 为 fragment 头部是 ImageView 的设置状态栏透明
+ *
+ * @param activity fragment 对应的 activity
+ * @param needOffsetView 需要向下偏移的 View
+ */
+ public static void setTranslucentForImageViewInFragment(Activity activity, View needOffsetView) {
+ setTranslucentForImageViewInFragment(activity, DEFAULT_STATUS_BAR_ALPHA, needOffsetView);
+ }
+
+ /**
+ * 为 fragment 头部是 ImageView 的设置状态栏透明
+ *
+ * @param activity fragment 对应的 activity
+ * @param needOffsetView 需要向下偏移的 View
+ */
+ public static void setTransparentForImageViewInFragment(Activity activity, View needOffsetView) {
+ setTranslucentForImageViewInFragment(activity, 0, needOffsetView);
+ }
+
+ /**
+ * 为 fragment 头部是 ImageView 的设置状态栏透明
+ *
+ * @param activity fragment 对应的 activity
+ * @param statusBarAlpha 状态栏透明度
+ * @param needOffsetView 需要向下偏移的 View
+ */
+ public static void setTranslucentForImageViewInFragment(Activity activity, int statusBarAlpha, View needOffsetView) {
+ setTranslucentForImageView(activity, statusBarAlpha, needOffsetView);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
+ clearPreviousSetting(activity);
+ }
+ }
+
+ @TargetApi(Build.VERSION_CODES.KITKAT)
+ private static void clearPreviousSetting(Activity activity) {
+ ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
+ int count = decorView.getChildCount();
+ if (count > 0 && decorView.getChildAt(count - 1) instanceof StatusBarView) {
+ decorView.removeViewAt(count - 1);
+ ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
+ rootView.setPadding(0, 0, 0, 0);
+ }
+ }
+
+ /**
+ * 添加半透明矩形条
+ *
+ * @param activity 需要设置的 activity
+ * @param statusBarAlpha 透明值
+ */
+ private static void addTranslucentView(Activity activity, int statusBarAlpha) {
+ ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content);
+ if (contentView.getChildCount() > 1) {
+ contentView.getChildAt(1).setBackgroundColor(Color.argb(statusBarAlpha, 0, 0, 0));
+ } else {
+ contentView.addView(createTranslucentStatusBarView(activity, statusBarAlpha));
+ }
+ }
+
+ /**
+ * 生成一个和状态栏大小相同的彩色矩形条
+ *
+ * @param activity 需要设置的 activity
+ * @param color 状态栏颜色值
+ * @return 状态栏矩形条
+ */
+ private static StatusBarView createStatusBarView(Activity activity, @ColorInt int color) {
+ // 绘制一个和状态栏一样高的矩形
+ StatusBarView statusBarView = new StatusBarView(activity);
+ LinearLayout.LayoutParams params =
+ new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity));
+ statusBarView.setLayoutParams(params);
+ statusBarView.setBackgroundColor(color);
+ return statusBarView;
+ }
+
+ /**
+ * 生成一个和状态栏大小相同的半透明矩形条
+ *
+ * @param activity 需要设置的activity
+ * @param color 状态栏颜色值
+ * @param alpha 透明值
+ * @return 状态栏矩形条
+ */
+ private static StatusBarView createStatusBarView(Activity activity, @ColorInt int color, int alpha) {
+ // 绘制一个和状态栏一样高的矩形
+ StatusBarView statusBarView = new StatusBarView(activity);
+ LinearLayout.LayoutParams params =
+ new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity));
+ statusBarView.setLayoutParams(params);
+ statusBarView.setBackgroundColor(calculateStatusColor(color, alpha));
+ return statusBarView;
+ }
+
+ /**
+ * 设置根布局参数
+ */
+ private static void setRootView(Activity activity) {
+ ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
+ rootView.setFitsSystemWindows(true);
+ rootView.setClipToPadding(true);
+ }
+
+ /**
+ * 使状态栏透明
+ */
+ @TargetApi(Build.VERSION_CODES.KITKAT)
+ private static void transparentStatusBar(Activity activity) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
+ activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
+ } else {
+ activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ }
+ }
+
+ /**
+ * 创建半透明矩形 View
+ *
+ * @param alpha 透明值
+ * @return 半透明 View
+ */
+ private static StatusBarView createTranslucentStatusBarView(Activity activity, int alpha) {
+ // 绘制一个和状态栏一样高的矩形
+ StatusBarView statusBarView = new StatusBarView(activity);
+ LinearLayout.LayoutParams params =
+ new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity));
+ statusBarView.setLayoutParams(params);
+ statusBarView.setBackgroundColor(Color.argb(alpha, 0, 0, 0));
+ return statusBarView;
+ }
+
+ /**
+ * 获取状态栏高度
+ *
+ * @param context context
+ * @return 状态栏高度
+ */
+ public static int getStatusBarHeight(Context context) {
+ // 获得状态栏高度
+ int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
+ return context.getResources().getDimensionPixelSize(resourceId);
+ }
+
+ /**
+ * 计算状态栏颜色
+ *
+ * @param color color值
+ * @param alpha alpha值
+ * @return 最终的状态栏颜色
+ */
+ private static int calculateStatusColor(@ColorInt int color, int alpha) {
+ float a = 1 - alpha / 255f;
+ int red = color >> 16 & 0xff;
+ int green = color >> 8 & 0xff;
+ int blue = color & 0xff;
+ red = (int) (red * a + 0.5);
+ green = (int) (green * a + 0.5);
+ blue = (int) (blue * a + 0.5);
+ return 0xff << 24 | red << 16 | green << 8 | blue;
+ }
+
+}
diff --git a/app/src/main/java/com/coder/guoy/recyclerview/view/statusbar/StatusBarView.java b/app/src/main/java/com/coder/guoy/recyclerview/view/statusbar/StatusBarView.java
new file mode 100644
index 0000000..a9ee836
--- /dev/null
+++ b/app/src/main/java/com/coder/guoy/recyclerview/view/statusbar/StatusBarView.java
@@ -0,0 +1,21 @@
+package com.coder.guoy.recyclerview.view.statusbar;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.View;
+
+/**
+ * Created by Jaeger on 16/6/8.
+ *
+ * Email: chjie.jaeger@gmail.com
+ * GitHub: https://github.com/laobie
+ */
+public class StatusBarView extends View {
+ public StatusBarView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public StatusBarView(Context context) {
+ super(context);
+ }
+}
diff --git a/app/src/main/java/com/coder/guoy/recyclerview/view/tagcloud/Tag.java b/app/src/main/java/com/coder/guoy/recyclerview/view/tagcloud/Tag.java
new file mode 100644
index 0000000..2164839
--- /dev/null
+++ b/app/src/main/java/com/coder/guoy/recyclerview/view/tagcloud/Tag.java
@@ -0,0 +1,141 @@
+package com.coder.guoy.recyclerview.view.tagcloud;
+
+import android.graphics.Color;
+
+/**
+ * Copyright © 2016 moxun
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the “Software”),
+ * to deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
+ * OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+public class Tag {
+
+ private int popularity; //this is the importance/popularity of the Tag
+ private float locX, locY, locZ; //the center of the 3D Tag
+ private float loc2DX, loc2DY;
+ private float scale;
+ private float[] argb;
+ private static final int DEFAULT_POPULARITY = 5;
+
+ public Tag() {
+ this(0f, 0f, 0f, 1.0f, 0);
+ }
+
+ public Tag(int popularity) {
+ this(0f, 0f, 0f, 1.0f, popularity);
+ }
+
+ public Tag(float locX, float locY, float locZ) {
+ this(locX, locY, locZ, 1.0f, DEFAULT_POPULARITY);
+ }
+
+ public Tag(float locX, float locY, float locZ, float scale) {
+ this(locX, locY, locZ, scale, DEFAULT_POPULARITY);
+ }
+
+ public Tag(float locX, float locY, float locZ, float scale, int popularity) {
+ this.locX = locX;
+ this.locY = locY;
+ this.locZ = locZ;
+
+ this.loc2DX = 0;
+ this.loc2DY = 0;
+
+ this.argb = new float[]{1.0f, 0.5f, 0.5f, 0.5f};
+
+ this.scale = scale;
+ this.popularity = popularity;
+ }
+
+ public float getLocX() {
+ return locX;
+ }
+
+ public void setLocX(float locX) {
+ this.locX = locX;
+ }
+
+ public float getLocY() {
+ return locY;
+ }
+
+ public void setLocY(float locY) {
+ this.locY = locY;
+ }
+
+ public float getLocZ() {
+ return locZ;
+ }
+
+ public void setLocZ(float locZ) {
+ this.locZ = locZ;
+ }
+
+ public float getScale() {
+ return scale;
+ }
+
+ public void setScale(float scale) {
+ this.scale = scale;
+ }
+
+ public void setAlpha(float alpha) {
+ this.argb[0] = alpha;
+ }
+
+ public int getPopularity() {
+ return popularity;
+ }
+
+ public void setPopularity(int popularity) {
+ this.popularity = popularity;
+ }
+
+ public float getLoc2DX() {
+ return loc2DX;
+ }
+
+ public void setLoc2DX(float loc2dx) {
+ loc2DX = loc2dx;
+ }
+
+ public float getLoc2DY() {
+ return loc2DY;
+ }
+
+ public void setLoc2DY(float loc2dy) {
+ loc2DY = loc2dy;
+ }
+
+ public void setColorByArray(float[] rgb) {
+ if (rgb != null) {
+ System.arraycopy(rgb, 0, this.argb, this.argb.length - rgb.length , rgb.length);
+ }
+ }
+
+ public int getColor() {
+ int[] result = new int[4];
+ for (int i = 0; i < 4; i++) {
+ result[i] = (int) (this.argb[i] * 0xff);
+ }
+ int color = Color.argb(result[0], result[1], result[2], result[3]);
+ //Log.e("TAG","#" + Integer.toHexString(color));
+ return color;
+ }
+}
diff --git a/app/src/main/java/com/coder/guoy/recyclerview/view/tagcloud/TagCloud.java b/app/src/main/java/com/coder/guoy/recyclerview/view/tagcloud/TagCloud.java
new file mode 100644
index 0000000..015d7dc
--- /dev/null
+++ b/app/src/main/java/com/coder/guoy/recyclerview/view/tagcloud/TagCloud.java
@@ -0,0 +1,268 @@
+package com.coder.guoy.recyclerview.view.tagcloud;
+
+/**
+ * Copyright © 2016 moxun
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the “Software”),
+ * to deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
+ * OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TagCloud {
+
+ private List tagCloud;
+ private int radius;
+ private static final int DEFAULT_RADIUS = 3;
+ private static final float[] DEFAULT_COLOR_DARK = {0.886f, 0.725f, 0.188f, 1f};
+ private static final float[] DEFAULT_COLOR_LIGHT = {0.3f, 0.3f, 0.3f, 1f};
+ private float[] tagColorLight; //text color 1(rgb Alpha)
+ private float[] tagColorDark; //text color 2 (rgb Alpha)
+ private float sin_mAngleX, cos_mAngleX, sin_mAngleY, cos_mAngleY, sin_mAngleZ, cos_mAngleZ;
+ private float mAngleZ = 0;
+ private float mAngleX = 0;
+ private float mAngleY = 0;
+ //private int size = 0;
+ private int smallest, largest; //used to find spectrum for tag colors
+ private boolean distrEven = true; //default is to distribute tags evenly on the Cloud
+
+ public TagCloud() {
+ this(DEFAULT_RADIUS);
+ }
+
+ public TagCloud(int radius) {
+ this(new ArrayList(), radius);
+ }
+
+ public TagCloud(List tags) {
+ this(tags, DEFAULT_RADIUS);
+ }
+
+ //Constructor just copies the existing tags in its List
+ public TagCloud(List tags, int radius) {
+ this(tags, radius, DEFAULT_COLOR_DARK, DEFAULT_COLOR_LIGHT);
+ }
+
+ public TagCloud(List tags, int radius, float[] tagColor1, float[] tagColor2) {
+ this.tagCloud = tags; //Java does the initialization and deep copying
+ this.radius = radius;
+ this.tagColorLight = tagColor1;
+ this.tagColorDark = tagColor2;
+ }
+
+ //create method calculates the correct initial location of each tag
+ public void create(boolean distrEven) {
+ this.distrEven = distrEven;
+ //calculate and set the location of each Tag
+ positionAll(distrEven);
+ sineCosine(mAngleX, mAngleY, mAngleZ);
+ updateAll();
+ //Now, let's calculate and set the color for each tag:
+ //first loop through all tags to find the smallest and largest populariteies
+ //largest popularity gets tcolor2, smallest gets tcolor1, the rest in between
+ smallest = 9999;
+ largest = 0;
+ for (int i = 0; i < tagCloud.size(); i++) {
+ int j = tagCloud.get(i).getPopularity();
+ largest = Math.max(largest, j);
+ smallest = Math.min(smallest, j);
+ }
+ //figuring out and assigning the colors/ textsize
+ Tag tempTag;
+ for (int i = 0; i < tagCloud.size(); i++) {
+ tempTag = tagCloud.get(i);
+
+ initTag(tempTag);
+ }
+ }
+
+ public void clear() {
+ tagCloud.clear();
+ }
+
+ public List getTagList() {
+ return tagCloud;
+ }
+
+ public void setTagList(List list) {
+ tagCloud = list;
+ }
+
+ public Tag get(int position) {
+ return tagCloud.get(position);
+ }
+
+ public Tag getTop() {
+ int i = tagCloud.size() - 1;
+ return get(i);
+ }
+
+ public int indexOf(Tag tag) {
+ return tagCloud.indexOf(tag);
+ }
+
+ public void reset() {
+ create(distrEven);
+ }
+
+ //updates the transparency/scale of all elements
+ public void update() {
+ // if mAngleX and mAngleY under threshold, skip motion calculations for performance
+ if (Math.abs(mAngleX) > .1 || Math.abs(mAngleY) > .1) {
+ sineCosine(mAngleX, mAngleY, mAngleZ);
+ updateAll();
+ }
+ }
+
+ private void initTag(Tag tag) {
+ float percentage = getPercentage(tag);
+ float[] argb = getColorFromGradient(percentage);
+ tag.setColorByArray(argb);
+ }
+
+ private float getPercentage(Tag tag) {
+ int p = tag.getPopularity();
+ return (smallest == largest) ? 1.0f : ((float) p - smallest) / ((float) largest - smallest);
+ }
+
+ //if a single tag needed to be added
+ public void add(Tag newTag) {
+
+ initTag(newTag);
+
+ position(distrEven, newTag);
+ //now add the new tag to the tagCloud
+ tagCloud.add(newTag);
+ updateAll();
+ }
+
+ private void position(boolean distrEven, Tag newTag) {
+ double phi = 0;
+ double theta = 0;
+ int max = tagCloud.size();
+ //when adding a new tag, just place it at some random location
+ //this is in fact why adding too many elements make TagCloud ugly
+ //after many add, do one reset to rearrange all tags
+ phi = Math.random() * (Math.PI);
+ theta = Math.random() * (2 * Math.PI);
+ //coordinate conversion:
+ newTag.setLocX((int) (radius * Math.cos(theta) * Math.sin(phi)));
+ newTag.setLocY((int) (radius * Math.sin(theta) * Math.sin(phi)));
+ newTag.setLocZ((int) (radius * Math.cos(phi)));
+ }
+
+ private void positionAll(boolean distrEven) {
+ double phi = 0;
+ double theta = 0;
+ int max = tagCloud.size();
+ //distribute: (disrtEven is used to specify whether distribute random or even
+ for (int i = 1; i < max + 1; i++) {
+ if (distrEven) {
+ phi = Math.acos(-1.0 + (2.0 * i - 1.0) / max);
+ theta = Math.sqrt(max * Math.PI) * phi;
+ } else {
+ phi = Math.random() * (Math.PI);
+ theta = Math.random() * (2 * Math.PI);
+ }
+
+ //coordinate conversion:
+ tagCloud.get(i - 1).setLocX((int) ((radius * Math.cos(theta) * Math.sin(phi))
+ ));
+ tagCloud.get(i - 1).setLocY((int) (radius * Math.sin(theta) * Math.sin(phi)));
+ tagCloud.get(i - 1).setLocZ((int) (radius * Math.cos(phi)));
+ }
+ }
+
+ private void updateAll() {
+
+ //update transparency/scale for all tags:
+ int max = tagCloud.size();
+ for (int j = 0; j < max; j++) {
+ //There exists two options for this part:
+ // multiply positions by a x-rotation matrix
+ float rx1 = (tagCloud.get(j).getLocX());
+ float ry1 = (tagCloud.get(j).getLocY()) * cos_mAngleX +
+ tagCloud.get(j).getLocZ() * -sin_mAngleX;
+ float rz1 = (tagCloud.get(j).getLocY()) * sin_mAngleX +
+ tagCloud.get(j).getLocZ() * cos_mAngleX;
+ // multiply new positions by a y-rotation matrix
+ float rx2 = rx1 * cos_mAngleY + rz1 * sin_mAngleY;
+ float ry2 = ry1;
+ float rz2 = rx1 * -sin_mAngleY + rz1 * cos_mAngleY;
+ // multiply new positions by a z-rotation matrix
+ float rx3 = rx2 * cos_mAngleZ + ry2 * -sin_mAngleZ;
+ float ry3 = rx2 * sin_mAngleZ + ry2 * cos_mAngleZ;
+ float rz3 = rz2;
+ // set arrays to new positions
+ tagCloud.get(j).setLocX(rx3);
+ tagCloud.get(j).setLocY(ry3);
+ tagCloud.get(j).setLocZ(rz3);
+
+ // add perspective
+ int diameter = 2 * radius;
+ float per = diameter / 1.0f / (diameter + rz3);
+ // let's set position, scale, alpha for the tag;
+ tagCloud.get(j).setLoc2DX((int) (rx3 * per));
+ tagCloud.get(j).setLoc2DY((int) (ry3 * per));
+ tagCloud.get(j).setScale(per);
+ tagCloud.get(j).setAlpha(per / 2);
+ }
+ }
+
+ private float[] getColorFromGradient(float percentage) {
+ //perc: 1.0 full dark; 0.0 full light
+ float[] rgba = new float[4];
+ rgba[0] = 1f; //Alpha is 1.0 when init.
+ rgba[1] = (percentage * (tagColorDark[0])) + ((1f - percentage) * (tagColorLight[0]));
+ rgba[2] = (percentage * (tagColorDark[1])) + ((1f - percentage) * (tagColorLight[1]));
+ rgba[3] = (percentage * (tagColorDark[2])) + ((1f - percentage) * (tagColorLight[2]));
+ return rgba;
+ }
+
+ private void sineCosine(float mAngleX, float mAngleY, float mAngleZ) {
+ double degToRad = (Math.PI / 180);
+ sin_mAngleX = (float) Math.sin(mAngleX * degToRad);
+ cos_mAngleX = (float) Math.cos(mAngleX * degToRad);
+ sin_mAngleY = (float) Math.sin(mAngleY * degToRad);
+ cos_mAngleY = (float) Math.cos(mAngleY * degToRad);
+ sin_mAngleZ = (float) Math.sin(mAngleZ * degToRad);
+ cos_mAngleZ = (float) Math.cos(mAngleZ * degToRad);
+ }
+
+ public void setRadius(int radius) {
+ this.radius = radius;
+ }
+
+ public void setTagColorLight(float[] tagColor) {
+ this.tagColorLight = tagColor;
+ }
+
+ public void setTagColorDark(float[] tagColorDark) {
+ this.tagColorDark = tagColorDark;
+ }
+
+ public void setAngleX(float mAngleX) {
+ this.mAngleX = mAngleX;
+ }
+
+ public void setAngleY(float mAngleY) {
+ this.mAngleY = mAngleY;
+ }
+
+}
diff --git a/app/src/main/java/com/coder/guoy/recyclerview/view/tagcloud/TagCloudView.java b/app/src/main/java/com/coder/guoy/recyclerview/view/tagcloud/TagCloudView.java
new file mode 100644
index 0000000..952d124
--- /dev/null
+++ b/app/src/main/java/com/coder/guoy/recyclerview/view/tagcloud/TagCloudView.java
@@ -0,0 +1,340 @@
+package com.coder.guoy.recyclerview.view.tagcloud;
+
+/**
+ * Copyright © 2016 moxun
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the “Software”),
+ * to deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
+ * OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Color;
+import android.graphics.Point;
+import android.os.Build;
+import android.os.Handler;
+import android.os.Looper;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+
+import com.coder.guoy.recyclerview.R;
+
+
+public class TagCloudView extends ViewGroup implements Runnable, TagsAdapter.OnDataSetChangeListener {
+ private final float TOUCH_SCALE_FACTOR = .8f;
+ private final float TRACKBALL_SCALE_FACTOR = 10;
+ private float tspeed = 2f;
+ private TagCloud mTagCloud;
+ private float mAngleX = 0.5f;
+ private float mAngleY = 0.5f;
+ private float centerX, centerY;
+ private float radius;
+ private float radiusPercent = 0.9f;
+
+ private float[] darkColor = new float[]{1f, 0f, 0f, 1f};//rgba
+ private float[] lightColor = new float[]{0.9412f, 0.7686f, 0.2f, 1f};//rgba
+
+ public static final int MODE_DISABLE = 0;
+ public static final int MODE_DECELERATE = 1;
+ public static final int MODE_UNIFORM = 2;
+ public int mode;
+ private int left, right, top, bottom;
+
+ private MarginLayoutParams layoutParams;
+ private int minSize;
+
+ private boolean isOnTouch = false;
+ private Handler handler = new Handler(Looper.getMainLooper());
+
+ private TagsAdapter tagsAdapter;
+
+ public TagCloudView(Context context) {
+ super(context);
+ init(context,null);
+ }
+
+ public TagCloudView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init(context,attrs);
+ }
+
+ public TagCloudView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ init(context,attrs);
+ }
+
+ private void init(Context context, AttributeSet attrs) {
+ setFocusableInTouchMode(true);
+ mTagCloud = new TagCloud();
+ if (attrs != null) {
+ TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.TagCloudView);
+
+ String m = typedArray.getString(R.styleable.TagCloudView_autoScrollMode);
+ mode = Integer.valueOf(m);
+
+ int light = typedArray.getColor(R.styleable.TagCloudView_lightColor,Color.WHITE);
+ setLightColor(light);
+
+ int dark = typedArray.getColor(R.styleable.TagCloudView_darkColor,Color.BLACK);
+ setDarkColor(dark);
+
+ float p = typedArray.getFloat(R.styleable.TagCloudView_radiusPercent,radiusPercent);
+ setRadiusPercent(p);
+
+ float s = typedArray.getFloat(R.styleable.TagCloudView_scrollSpeed,2f);
+ setScrollSpeed(s);
+
+ typedArray.recycle();
+ }
+
+ WindowManager wm = (WindowManager) getContext() .getSystemService(Context.WINDOW_SERVICE);
+ Point point = new Point();
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
+ wm.getDefaultDisplay().getSize(point);
+ } else {
+ point.x = wm.getDefaultDisplay().getWidth();
+ point.y = wm.getDefaultDisplay().getHeight();
+ }
+ int screenWidth = point.x;
+ int screenHeight = point.y;
+ minSize = screenHeight < screenWidth ? screenHeight : screenWidth;
+ }
+
+ public void setAutoScrollMode(int mode) {
+ this.mode = mode;
+ }
+
+ public final void setAdapter(TagsAdapter adapter) {
+ tagsAdapter = adapter;
+ tagsAdapter.setOnDataSetChangeListener(this);
+ onChange();
+ }
+
+ public void setLightColor(int color) {
+ float[] argb = new float[4];
+ argb[3] = Color.alpha(color) /1.0f / 0xff;
+ argb[0] = Color.red(color) /1.0f / 0xff;
+ argb[1] = Color.green(color) /1.0f / 0xff;
+ argb[2] = Color.blue(color) /1.0f / 0xff;
+
+ lightColor = argb.clone();
+ onChange();
+ }
+
+ public void setDarkColor(int color) {
+ float[] argb = new float[4];
+ argb[3] = Color.alpha(color) /1.0f / 0xff;
+ argb[0] = Color.red(color) /1.0f / 0xff;
+ argb[1] = Color.green(color) /1.0f / 0xff;
+ argb[2] = Color.blue(color) /1.0f / 0xff;
+
+ darkColor = argb.clone();
+ onChange();
+ }
+
+ public void setRadiusPercent(float percent) {
+ if (percent > 1f || percent < 0f) {
+ throw new IllegalArgumentException("percent value not in range 0 to 1");
+ } else {
+ radiusPercent = percent;
+ onChange();
+ }
+ }
+
+ private void initFromAdapter() {
+ this.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ centerX = (getRight() - getLeft()) / 2;
+ centerY = (getBottom() - getTop()) / 2;
+ radius = Math.min(centerX * radiusPercent, centerY * radiusPercent);
+ mTagCloud.setRadius((int) radius);
+
+ mTagCloud.setTagColorLight(lightColor);//higher color
+ mTagCloud.setTagColorDark(darkColor);//lower color
+
+ mTagCloud.clear();
+ removeAllViews();
+ for (int i = 0; i < tagsAdapter.getCount(); i++) {
+ TagCloudView.this.mTagCloud.add(new Tag(tagsAdapter.getPopularity(i)));
+ addView(tagsAdapter.getView(getContext(), i, TagCloudView.this));
+ }
+
+ mTagCloud.create(true);
+
+ mTagCloud.setAngleX(mAngleX);
+ mTagCloud.setAngleY(mAngleY);
+ mTagCloud.update();
+ }
+ }, 0);
+ }
+
+ public void setScrollSpeed(float scrollSpeed) {
+ tspeed = scrollSpeed;
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+
+ int contentWidth = MeasureSpec.getSize(widthMeasureSpec);
+ int contentHeight = MeasureSpec.getSize(heightMeasureSpec);
+ int widthMode = MeasureSpec.getMode(widthMeasureSpec);
+ int heightMode = MeasureSpec.getMode(heightMeasureSpec);
+
+ measureChildren(widthMode, heightMode);
+
+ if(layoutParams == null) {
+ layoutParams = (MarginLayoutParams) getLayoutParams();
+ }
+
+ int dimensionX = widthMode == MeasureSpec.EXACTLY ? contentWidth : minSize - layoutParams.leftMargin - layoutParams.rightMargin;
+ int dimensionY = heightMode == MeasureSpec.EXACTLY ? contentHeight : minSize - layoutParams.leftMargin - layoutParams.rightMargin;
+ setMeasuredDimension(dimensionX, dimensionY);
+ }
+
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ handler.post(this);
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ handler.removeCallbacksAndMessages(null);
+ }
+
+ @SuppressLint("WrongCall")
+ private void updateChild() {
+ onLayout(false, left,top,right,bottom);
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int l, int t, int r, int b) {
+ left = l;
+ right = r;
+ top = t;
+ bottom = b;
+
+ for (int i = 0; i < getChildCount(); i++) {
+ View child = getChildAt(i);
+ if (child.getVisibility() != GONE) {
+ Tag tag = mTagCloud.get(i);
+ tagsAdapter.onThemeColorChanged(child,tag.getColor());
+ child.setScaleX(tag.getScale());
+ child.setScaleY(tag.getScale());
+ int left, top;
+ left = (int) (centerX + tag.getLoc2DX()) - child.getMeasuredWidth() / 2;
+ top = (int) (centerY + tag.getLoc2DY()) - child.getMeasuredHeight() / 2;
+
+ child.layout(left, top, left + child.getMeasuredWidth(), top + child.getMeasuredHeight());
+ }
+ }
+ }
+
+ public void reset() {
+ mTagCloud.reset();
+ updateChild();
+ }
+
+ @Override
+ public boolean onTrackballEvent(MotionEvent e) {
+ float x = e.getX();
+ float y = e.getY();
+
+ mAngleX = (y) * tspeed * TRACKBALL_SCALE_FACTOR;
+ mAngleY = (-x) * tspeed * TRACKBALL_SCALE_FACTOR;
+
+ mTagCloud.setAngleX(mAngleX);
+ mTagCloud.setAngleY(mAngleY);
+ mTagCloud.update();
+
+ updateChild();
+ return true;
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent e) {
+ float x = e.getX();
+ float y = e.getY();
+
+ switch (e.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ isOnTouch = true;
+ break;
+ case MotionEvent.ACTION_MOVE:
+ //rotate elements depending on how far the selection point is from center of cloud
+ float dx = x - centerX;
+ float dy = y - centerY;
+ mAngleX = (dy / radius) * tspeed * TOUCH_SCALE_FACTOR;
+ mAngleY = (-dx / radius) * tspeed * TOUCH_SCALE_FACTOR;
+
+ processTouch();
+
+ break;
+ case MotionEvent.ACTION_UP:
+ case MotionEvent.ACTION_CANCEL:
+ isOnTouch = false;
+ break;
+ }
+
+ return true;
+ }
+
+ private void processTouch() {
+ if (mTagCloud != null) {
+ mTagCloud.setAngleX(mAngleX);
+ mTagCloud.setAngleY(mAngleY);
+ mTagCloud.update();
+ }
+ updateChild();
+ }
+
+ @Override
+ public void onChange() {
+ initFromAdapter();
+ }
+
+ @Override
+ public void run() {
+ if (!isOnTouch && mode != MODE_DISABLE) {
+ if (mode == MODE_DECELERATE) {
+ if (mAngleX > 0.04f) {
+ mAngleX -= 0.02f;
+ }
+ if (mAngleY > 0.04f) {
+ mAngleY -= 0.02f;
+ }
+ if (mAngleX < -0.04f) {
+ mAngleX += 0.02f;
+ }
+ if (mAngleY < 0.04f) {
+ mAngleY += 0.02f;
+ }
+ }
+ processTouch();
+ }
+
+ handler.postDelayed(this, 50);
+ }
+}
diff --git a/app/src/main/java/com/coder/guoy/recyclerview/view/tagcloud/TagsAdapter.java b/app/src/main/java/com/coder/guoy/recyclerview/view/tagcloud/TagsAdapter.java
new file mode 100644
index 0000000..535b7df
--- /dev/null
+++ b/app/src/main/java/com/coder/guoy/recyclerview/view/tagcloud/TagsAdapter.java
@@ -0,0 +1,49 @@
+package com.coder.guoy.recyclerview.view.tagcloud;
+
+import android.content.Context;
+import android.view.View;
+import android.view.ViewGroup;
+
+/**
+ * Copyright © 2016 moxun
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the “Software”),
+ * to deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
+ * OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+public abstract class TagsAdapter {
+ private OnDataSetChangeListener onDataSetChangeListener;
+
+ public abstract int getCount();
+ public abstract View getView(Context context, int position, ViewGroup parent);
+ public abstract Object getItem(int position);
+ public abstract int getPopularity(int position);
+ public abstract void onThemeColorChanged(View view,int themeColor);
+
+ public final void notifyDataSetChanged() {
+ onDataSetChangeListener.onChange();
+ }
+
+ protected interface OnDataSetChangeListener{
+ void onChange();
+ }
+
+ protected void setOnDataSetChangeListener(OnDataSetChangeListener listener) {
+ onDataSetChangeListener = listener;
+ }
+}
diff --git a/app/src/main/java/com/coder/guoy/recyclerview/view/textview/RectTextView.java b/app/src/main/java/com/coder/guoy/recyclerview/view/textview/RectTextView.java
new file mode 100644
index 0000000..0366e06
--- /dev/null
+++ b/app/src/main/java/com/coder/guoy/recyclerview/view/textview/RectTextView.java
@@ -0,0 +1,51 @@
+package com.coder.guoy.recyclerview.view.textview;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.support.annotation.Nullable;
+import android.support.v7.widget.AppCompatTextView;
+import android.util.AttributeSet;
+
+import com.coder.guoy.recyclerview.R;
+
+/**
+ * @Version:
+ * @Author:Guoy
+ * @CreateTime:2017/6/2
+ * @Descrpiton:
+ */
+public class RectTextView extends AppCompatTextView {
+ public RectTextView(Context context) {
+ super(context);
+ }
+
+ public RectTextView(Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public RectTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ Paint mPaint1 = new Paint();
+ mPaint1.setColor(getResources().getColor(R.color.red));
+ mPaint1.setStyle(Paint.Style.FILL);
+ Paint mPaint2 = new Paint();
+ mPaint2.setColor(getResources().getColor(R.color.yello));
+ mPaint2.setStyle(Paint.Style.FILL);
+
+ //外层矩形
+ canvas.drawRect(0,0,getMeasuredWidth(),getMeasuredHeight(),mPaint1);
+ //内层矩形
+ canvas.drawRect(10,10,getMeasuredWidth()-10,getMeasuredHeight()-10,mPaint2);
+ canvas.save();
+ //绘制文字前平移10像素
+ canvas.translate(10,0);
+ //父类完成的方法,绘制文本
+ super.onDraw(canvas);
+ canvas.restore();
+ }
+}
diff --git a/app/src/main/java/com/coder/guoy/recyclerview/view/textview/ShaderTextView.java b/app/src/main/java/com/coder/guoy/recyclerview/view/textview/ShaderTextView.java
new file mode 100644
index 0000000..202a320
--- /dev/null
+++ b/app/src/main/java/com/coder/guoy/recyclerview/view/textview/ShaderTextView.java
@@ -0,0 +1,70 @@
+package com.coder.guoy.recyclerview.view.textview;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.LinearGradient;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.Shader;
+import android.support.v7.widget.AppCompatTextView;
+import android.util.AttributeSet;
+
+/**
+ * @Version:
+ * @Author:Guoy
+ * @CreateTime:2017/6/2
+ * @Descrpiton:
+ */
+public class ShaderTextView extends AppCompatTextView {
+
+ private Matrix mGradientMatrix;
+ private LinearGradient mLinearGradient;//渐变渲染器
+ private int mViewWidth = 0;
+ private int mTranslate;
+
+ public ShaderTextView(Context context) {
+ super(context);
+ }
+
+ public ShaderTextView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public ShaderTextView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+ if (mGradientMatrix != null) {
+ mTranslate += mViewWidth / 5;
+ if (mTranslate > 2 * mViewWidth) {
+ mTranslate = -mViewWidth;
+ }
+ mGradientMatrix.setTranslate(mTranslate, 0);
+ mLinearGradient.setLocalMatrix(mGradientMatrix);
+ postInvalidateDelayed(100);
+ }
+ }
+
+ @Override
+ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+ super.onSizeChanged(w, h, oldw, oldh);
+ if (mViewWidth == 0) {
+ mViewWidth = getMeasuredWidth();
+ if (mViewWidth > 0) {
+ // 使用getPaint()方法获取当前绘制TextView的Paint对象,
+ // 并给这个paint对象设置原生TextView没有的LinearGradient属性
+ Paint mPaint = getPaint();
+ mLinearGradient = new LinearGradient(0, 0, getMeasuredWidth(), 0,
+ new int[]{Color.RED, Color.YELLOW, Color.BLUE, Color.GREEN},
+ null, Shader.TileMode.MIRROR);
+ mPaint.setShader(mLinearGradient);
+ mGradientMatrix = new Matrix();
+ }
+ }
+ }
+
+}
diff --git a/app/src/main/res/animator/animator_android.xml b/app/src/main/res/animator/animator_android.xml
new file mode 100644
index 0000000..d0338bb
--- /dev/null
+++ b/app/src/main/res/animator/animator_android.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/animator/animator_astronaut_buble.xml b/app/src/main/res/animator/animator_astronaut_buble.xml
new file mode 100644
index 0000000..e583570
--- /dev/null
+++ b/app/src/main/res/animator/animator_astronaut_buble.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/animator/animator_astronaut_buble2.xml b/app/src/main/res/animator/animator_astronaut_buble2.xml
new file mode 100644
index 0000000..dfcd387
--- /dev/null
+++ b/app/src/main/res/animator/animator_astronaut_buble2.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/animator/animator_astronaut_buble3.xml b/app/src/main/res/animator/animator_astronaut_buble3.xml
new file mode 100644
index 0000000..363c063
--- /dev/null
+++ b/app/src/main/res/animator/animator_astronaut_buble3.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/animator/animator_astronaut_fly.xml b/app/src/main/res/animator/animator_astronaut_fly.xml
new file mode 100644
index 0000000..559bb1a
--- /dev/null
+++ b/app/src/main/res/animator/animator_astronaut_fly.xml
@@ -0,0 +1,11 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/animator/animator_astronaut_shower.xml b/app/src/main/res/animator/animator_astronaut_shower.xml
new file mode 100644
index 0000000..1891baa
--- /dev/null
+++ b/app/src/main/res/animator/animator_astronaut_shower.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/animator/animator_astronaut_shower1.xml b/app/src/main/res/animator/animator_astronaut_shower1.xml
new file mode 100644
index 0000000..7f3f1ef
--- /dev/null
+++ b/app/src/main/res/animator/animator_astronaut_shower1.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/animator/animator_astronaut_shower2.xml b/app/src/main/res/animator/animator_astronaut_shower2.xml
new file mode 100644
index 0000000..656f18f
--- /dev/null
+++ b/app/src/main/res/animator/animator_astronaut_shower2.xml
@@ -0,0 +1,13 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/animator/animator_eye_left_to_happy.xml b/app/src/main/res/animator/animator_eye_left_to_happy.xml
new file mode 100644
index 0000000..05ebafc
--- /dev/null
+++ b/app/src/main/res/animator/animator_eye_left_to_happy.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/animator/animator_eye_left_to_sad.xml b/app/src/main/res/animator/animator_eye_left_to_sad.xml
new file mode 100644
index 0000000..950d8c9
--- /dev/null
+++ b/app/src/main/res/animator/animator_eye_left_to_sad.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
diff --git a/app/src/main/res/animator/animator_eye_right_to_happy.xml b/app/src/main/res/animator/animator_eye_right_to_happy.xml
new file mode 100644
index 0000000..fe153ec
--- /dev/null
+++ b/app/src/main/res/animator/animator_eye_right_to_happy.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
diff --git a/app/src/main/res/animator/animator_eye_right_to_sad.xml b/app/src/main/res/animator/animator_eye_right_to_sad.xml
new file mode 100644
index 0000000..128e0fd
--- /dev/null
+++ b/app/src/main/res/animator/animator_eye_right_to_sad.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
diff --git a/app/src/main/res/animator/animator_fingerprint.xml b/app/src/main/res/animator/animator_fingerprint.xml
new file mode 100644
index 0000000..7d89745
--- /dev/null
+++ b/app/src/main/res/animator/animator_fingerprint.xml
@@ -0,0 +1,11 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/animator/animator_line_heart.xml b/app/src/main/res/animator/animator_line_heart.xml
new file mode 100644
index 0000000..f31ac89
--- /dev/null
+++ b/app/src/main/res/animator/animator_line_heart.xml
@@ -0,0 +1,10 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/animator/animator_motorcycle_show.xml b/app/src/main/res/animator/animator_motorcycle_show.xml
new file mode 100644
index 0000000..e2dfe5e
--- /dev/null
+++ b/app/src/main/res/animator/animator_motorcycle_show.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/animator/animator_mouth_smile_to_happy.xml b/app/src/main/res/animator/animator_mouth_smile_to_happy.xml
new file mode 100644
index 0000000..e7866bd
--- /dev/null
+++ b/app/src/main/res/animator/animator_mouth_smile_to_happy.xml
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/app/src/main/res/animator/animator_mouth_smile_to_sad.xml b/app/src/main/res/animator/animator_mouth_smile_to_sad.xml
new file mode 100644
index 0000000..fdbf03c
--- /dev/null
+++ b/app/src/main/res/animator/animator_mouth_smile_to_sad.xml
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/app/src/main/res/animator/animator_red_heart_colorempty.xml b/app/src/main/res/animator/animator_red_heart_colorempty.xml
new file mode 100644
index 0000000..6e3e082
--- /dev/null
+++ b/app/src/main/res/animator/animator_red_heart_colorempty.xml
@@ -0,0 +1,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/animator/animator_red_heart_colorfull.xml b/app/src/main/res/animator/animator_red_heart_colorfull.xml
new file mode 100644
index 0000000..c09475f
--- /dev/null
+++ b/app/src/main/res/animator/animator_red_heart_colorfull.xml
@@ -0,0 +1,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/animator/animator_windmill.xml b/app/src/main/res/animator/animator_windmill.xml
new file mode 100644
index 0000000..94000ce
--- /dev/null
+++ b/app/src/main/res/animator/animator_windmill.xml
@@ -0,0 +1,11 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/color/btn_selector.xml b/app/src/main/res/color/btn_selector.xml
new file mode 100644
index 0000000..b683b24
--- /dev/null
+++ b/app/src/main/res/color/btn_selector.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable-xxhdpi/android.png b/app/src/main/res/drawable-xxhdpi/android.png
new file mode 100644
index 0000000..76fd681
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/android.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/balloon.png b/app/src/main/res/drawable-xxhdpi/balloon.png
new file mode 100644
index 0000000..c8df3b3
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/balloon.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/classcsjz.png b/app/src/main/res/drawable-xxhdpi/classcsjz.png
new file mode 100644
index 0000000..cb25f51
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/classcsjz.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/classcyzs.png b/app/src/main/res/drawable-xxhdpi/classcyzs.png
new file mode 100644
index 0000000..076e961
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/classcyzs.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/classjdbs.png b/app/src/main/res/drawable-xxhdpi/classjdbs.png
new file mode 100644
index 0000000..31b82ed
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/classjdbs.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/classjtcx.png b/app/src/main/res/drawable-xxhdpi/classjtcx.png
new file mode 100644
index 0000000..3e2144c
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/classjtcx.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/classjy.png b/app/src/main/res/drawable-xxhdpi/classjy.png
new file mode 100644
index 0000000..30f02ab
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/classjy.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/classmzzj.png b/app/src/main/res/drawable-xxhdpi/classmzzj.png
new file mode 100644
index 0000000..ff50989
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/classmzzj.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/classsbjy.png b/app/src/main/res/drawable-xxhdpi/classsbjy.png
new file mode 100644
index 0000000..e0d235f
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/classsbjy.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/classwtyl.png b/app/src/main/res/drawable-xxhdpi/classwtyl.png
new file mode 100644
index 0000000..5f34754
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/classwtyl.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/classylws.png b/app/src/main/res/drawable-xxhdpi/classylws.png
new file mode 100644
index 0000000..543b5f8
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/classylws.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/gank.jpg b/app/src/main/res/drawable-xxhdpi/gank.jpg
new file mode 100644
index 0000000..5c2d7fd
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/gank.jpg differ
diff --git a/app/src/main/res/drawable-xxhdpi/hdelete.png b/app/src/main/res/drawable-xxhdpi/hdelete.png
new file mode 100644
index 0000000..87fb744
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/hdelete.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/head.png b/app/src/main/res/drawable-xxhdpi/head.png
new file mode 100644
index 0000000..e99291b
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/head.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/home_11.png b/app/src/main/res/drawable-xxhdpi/home_11.png
new file mode 100644
index 0000000..d142e67
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/home_11.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/image_banner.png b/app/src/main/res/drawable-xxhdpi/image_banner.png
new file mode 100644
index 0000000..f2b8e2a
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/image_banner.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/loading.png b/app/src/main/res/drawable-xxhdpi/loading.png
index e8ca483..13705f4 100644
Binary files a/app/src/main/res/drawable-xxhdpi/loading.png and b/app/src/main/res/drawable-xxhdpi/loading.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/loading_kunfu01.png b/app/src/main/res/drawable-xxhdpi/loading_kunfu01.png
new file mode 100644
index 0000000..6f6f698
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/loading_kunfu01.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/loading_kunfu02.png b/app/src/main/res/drawable-xxhdpi/loading_kunfu02.png
new file mode 100644
index 0000000..e7ef7f3
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/loading_kunfu02.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/loading_kunfu03.png b/app/src/main/res/drawable-xxhdpi/loading_kunfu03.png
new file mode 100644
index 0000000..209b810
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/loading_kunfu03.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/loading_kunfu04.png b/app/src/main/res/drawable-xxhdpi/loading_kunfu04.png
new file mode 100644
index 0000000..e003323
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/loading_kunfu04.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/loading_kunfu05.png b/app/src/main/res/drawable-xxhdpi/loading_kunfu05.png
new file mode 100644
index 0000000..5f94abd
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/loading_kunfu05.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/loading_kunfu06.png b/app/src/main/res/drawable-xxhdpi/loading_kunfu06.png
new file mode 100644
index 0000000..87c7d4f
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/loading_kunfu06.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/loading_kunfu07.png b/app/src/main/res/drawable-xxhdpi/loading_kunfu07.png
new file mode 100644
index 0000000..f3d809d
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/loading_kunfu07.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/logo.png b/app/src/main/res/drawable-xxhdpi/logo.png
deleted file mode 100644
index 226d800..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/logo.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/model01.jpg b/app/src/main/res/drawable-xxhdpi/model01.jpg
new file mode 100644
index 0000000..74f556d
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/model01.jpg differ
diff --git a/app/src/main/res/drawable-xxhdpi/model02.jpg b/app/src/main/res/drawable-xxhdpi/model02.jpg
new file mode 100644
index 0000000..f8c3f39
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/model02.jpg differ
diff --git a/app/src/main/res/drawable-xxhdpi/model03.jpg b/app/src/main/res/drawable-xxhdpi/model03.jpg
new file mode 100644
index 0000000..281a67a
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/model03.jpg differ
diff --git a/app/src/main/res/drawable-xxhdpi/motorcycle.png b/app/src/main/res/drawable-xxhdpi/motorcycle.png
new file mode 100644
index 0000000..ef33988
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/motorcycle.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/titlebar_menu.png b/app/src/main/res/drawable-xxhdpi/titlebar_menu.png
new file mode 100644
index 0000000..eda8f10
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/titlebar_menu.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/classcsjz.png b/app/src/main/res/drawable-xxxhdpi/classcsjz.png
new file mode 100644
index 0000000..f588529
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/classcsjz.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/classcyzs.png b/app/src/main/res/drawable-xxxhdpi/classcyzs.png
new file mode 100644
index 0000000..d78bc34
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/classcyzs.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/classjdbs.png b/app/src/main/res/drawable-xxxhdpi/classjdbs.png
new file mode 100644
index 0000000..dfd2dd9
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/classjdbs.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/classjtcx.png b/app/src/main/res/drawable-xxxhdpi/classjtcx.png
new file mode 100644
index 0000000..7d667a3
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/classjtcx.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/classjy.png b/app/src/main/res/drawable-xxxhdpi/classjy.png
new file mode 100644
index 0000000..4937314
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/classjy.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/classmzzj.png b/app/src/main/res/drawable-xxxhdpi/classmzzj.png
new file mode 100644
index 0000000..8842252
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/classmzzj.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/classsbjy.png b/app/src/main/res/drawable-xxxhdpi/classsbjy.png
new file mode 100644
index 0000000..5555033
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/classsbjy.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/classwtyl.png b/app/src/main/res/drawable-xxxhdpi/classwtyl.png
new file mode 100644
index 0000000..46f37a9
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/classwtyl.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/classylws.png b/app/src/main/res/drawable-xxxhdpi/classylws.png
new file mode 100644
index 0000000..64b2cd3
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/classylws.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/gank.jpg b/app/src/main/res/drawable-xxxhdpi/gank.jpg
new file mode 100644
index 0000000..5c2d7fd
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/gank.jpg differ
diff --git a/app/src/main/res/drawable-xxxhdpi/image_banner.png b/app/src/main/res/drawable-xxxhdpi/image_banner.png
new file mode 100644
index 0000000..f2b8e2a
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/image_banner.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/man.png b/app/src/main/res/drawable-xxxhdpi/man.png
new file mode 100644
index 0000000..21a0188
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/man.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/women.png b/app/src/main/res/drawable-xxxhdpi/women.png
new file mode 100644
index 0000000..0950017
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/women.png differ
diff --git a/app/src/main/res/drawable/animated_android.xml b/app/src/main/res/drawable/animated_android.xml
new file mode 100644
index 0000000..79e7fd3
--- /dev/null
+++ b/app/src/main/res/drawable/animated_android.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/animated_astronaut.xml b/app/src/main/res/drawable/animated_astronaut.xml
new file mode 100644
index 0000000..c269f0f
--- /dev/null
+++ b/app/src/main/res/drawable/animated_astronaut.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/animated_bonc.xml b/app/src/main/res/drawable/animated_bonc.xml
new file mode 100644
index 0000000..b7ca47d
--- /dev/null
+++ b/app/src/main/res/drawable/animated_bonc.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/animated_face_to_happy.xml b/app/src/main/res/drawable/animated_face_to_happy.xml
new file mode 100644
index 0000000..b436300
--- /dev/null
+++ b/app/src/main/res/drawable/animated_face_to_happy.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/animated_face_to_sad.xml b/app/src/main/res/drawable/animated_face_to_sad.xml
new file mode 100644
index 0000000..a2d2bc7
--- /dev/null
+++ b/app/src/main/res/drawable/animated_face_to_sad.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/animated_fingerprint.xml b/app/src/main/res/drawable/animated_fingerprint.xml
new file mode 100644
index 0000000..32dceff
--- /dev/null
+++ b/app/src/main/res/drawable/animated_fingerprint.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/animated_line_heart.xml b/app/src/main/res/drawable/animated_line_heart.xml
new file mode 100644
index 0000000..2e82a15
--- /dev/null
+++ b/app/src/main/res/drawable/animated_line_heart.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/animated_motorcycle_show.xml b/app/src/main/res/drawable/animated_motorcycle_show.xml
new file mode 100644
index 0000000..1a58b51
--- /dev/null
+++ b/app/src/main/res/drawable/animated_motorcycle_show.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/animated_red_heart_empty.xml b/app/src/main/res/drawable/animated_red_heart_empty.xml
new file mode 100644
index 0000000..d6daa17
--- /dev/null
+++ b/app/src/main/res/drawable/animated_red_heart_empty.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/animated_red_heart_full.xml b/app/src/main/res/drawable/animated_red_heart_full.xml
new file mode 100644
index 0000000..b828947
--- /dev/null
+++ b/app/src/main/res/drawable/animated_red_heart_full.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/animated_windmill.xml b/app/src/main/res/drawable/animated_windmill.xml
new file mode 100644
index 0000000..c7d45a8
--- /dev/null
+++ b/app/src/main/res/drawable/animated_windmill.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/btn_selector.xml b/app/src/main/res/drawable/btn_selector.xml
new file mode 100644
index 0000000..bad98b9
--- /dev/null
+++ b/app/src/main/res/drawable/btn_selector.xml
@@ -0,0 +1,22 @@
+
+
+
+ -
+
+
+
+ -
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/kungfu_loading.xml b/app/src/main/res/drawable/kungfu_loading.xml
new file mode 100644
index 0000000..90ba704
--- /dev/null
+++ b/app/src/main/res/drawable/kungfu_loading.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/lift_on_touch.xml b/app/src/main/res/drawable/lift_on_touch.xml
new file mode 100644
index 0000000..0cca544
--- /dev/null
+++ b/app/src/main/res/drawable/lift_on_touch.xml
@@ -0,0 +1,17 @@
+
+
+ -
+
+
+ -
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ripple_one_item_bg.xml b/app/src/main/res/drawable/ripple_one_item_bg.xml
new file mode 100644
index 0000000..fe5fad1
--- /dev/null
+++ b/app/src/main/res/drawable/ripple_one_item_bg.xml
@@ -0,0 +1,20 @@
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ripple_touch.xml b/app/src/main/res/drawable/ripple_touch.xml
new file mode 100644
index 0000000..facdc29
--- /dev/null
+++ b/app/src/main/res/drawable/ripple_touch.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ripple_touchborderless.xml b/app/src/main/res/drawable/ripple_touchborderless.xml
new file mode 100644
index 0000000..893495c
--- /dev/null
+++ b/app/src/main/res/drawable/ripple_touchborderless.xml
@@ -0,0 +1,4 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_viewstate1.xml b/app/src/main/res/drawable/selector_viewstate1.xml
new file mode 100644
index 0000000..1cd5502
--- /dev/null
+++ b/app/src/main/res/drawable/selector_viewstate1.xml
@@ -0,0 +1,27 @@
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_viewstate2.xml b/app/src/main/res/drawable/selector_viewstate2.xml
new file mode 100644
index 0000000..1adafe6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_viewstate2.xml
@@ -0,0 +1,27 @@
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_viewstate3.xml b/app/src/main/res/drawable/selector_viewstate3.xml
new file mode 100644
index 0000000..85e5bdf
--- /dev/null
+++ b/app/src/main/res/drawable/selector_viewstate3.xml
@@ -0,0 +1,27 @@
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_viewstate4.xml b/app/src/main/res/drawable/selector_viewstate4.xml
new file mode 100644
index 0000000..380ec5f
--- /dev/null
+++ b/app/src/main/res/drawable/selector_viewstate4.xml
@@ -0,0 +1,27 @@
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_viewstate5.xml b/app/src/main/res/drawable/selector_viewstate5.xml
new file mode 100644
index 0000000..1939c6a
--- /dev/null
+++ b/app/src/main/res/drawable/selector_viewstate5.xml
@@ -0,0 +1,19 @@
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_viewstate6.xml b/app/src/main/res/drawable/selector_viewstate6.xml
new file mode 100644
index 0000000..b742c69
--- /dev/null
+++ b/app/src/main/res/drawable/selector_viewstate6.xml
@@ -0,0 +1,19 @@
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_background.xml b/app/src/main/res/drawable/shape_background.xml
new file mode 100644
index 0000000..b5da9bd
--- /dev/null
+++ b/app/src/main/res/drawable/shape_background.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_line1.xml b/app/src/main/res/drawable/shape_line1.xml
new file mode 100644
index 0000000..4fd8cc2
--- /dev/null
+++ b/app/src/main/res/drawable/shape_line1.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_line2.xml b/app/src/main/res/drawable/shape_line2.xml
new file mode 100644
index 0000000..2a5c7af
--- /dev/null
+++ b/app/src/main/res/drawable/shape_line2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_oval1.xml b/app/src/main/res/drawable/shape_oval1.xml
new file mode 100644
index 0000000..027a58f
--- /dev/null
+++ b/app/src/main/res/drawable/shape_oval1.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_oval2.xml b/app/src/main/res/drawable/shape_oval2.xml
new file mode 100644
index 0000000..75a325a
--- /dev/null
+++ b/app/src/main/res/drawable/shape_oval2.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_oval3.xml b/app/src/main/res/drawable/shape_oval3.xml
new file mode 100644
index 0000000..69845e8
--- /dev/null
+++ b/app/src/main/res/drawable/shape_oval3.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_oval4.xml b/app/src/main/res/drawable/shape_oval4.xml
new file mode 100644
index 0000000..806681e
--- /dev/null
+++ b/app/src/main/res/drawable/shape_oval4.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_oval5.xml b/app/src/main/res/drawable/shape_oval5.xml
new file mode 100644
index 0000000..529463a
--- /dev/null
+++ b/app/src/main/res/drawable/shape_oval5.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_oval6.xml b/app/src/main/res/drawable/shape_oval6.xml
new file mode 100644
index 0000000..4966ecb
--- /dev/null
+++ b/app/src/main/res/drawable/shape_oval6.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_rectangle1.xml b/app/src/main/res/drawable/shape_rectangle1.xml
new file mode 100644
index 0000000..7054bec
--- /dev/null
+++ b/app/src/main/res/drawable/shape_rectangle1.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_rectangle2.xml b/app/src/main/res/drawable/shape_rectangle2.xml
new file mode 100644
index 0000000..34686d8
--- /dev/null
+++ b/app/src/main/res/drawable/shape_rectangle2.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_rectangle3.xml b/app/src/main/res/drawable/shape_rectangle3.xml
new file mode 100644
index 0000000..f5364ed
--- /dev/null
+++ b/app/src/main/res/drawable/shape_rectangle3.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_rectangle4.xml b/app/src/main/res/drawable/shape_rectangle4.xml
new file mode 100644
index 0000000..144148d
--- /dev/null
+++ b/app/src/main/res/drawable/shape_rectangle4.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_rectangle5.xml b/app/src/main/res/drawable/shape_rectangle5.xml
new file mode 100644
index 0000000..01cc742
--- /dev/null
+++ b/app/src/main/res/drawable/shape_rectangle5.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_rectangle6.xml b/app/src/main/res/drawable/shape_rectangle6.xml
new file mode 100644
index 0000000..e5392f2
--- /dev/null
+++ b/app/src/main/res/drawable/shape_rectangle6.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_rectangle7.xml b/app/src/main/res/drawable/shape_rectangle7.xml
new file mode 100644
index 0000000..7d9bd45
--- /dev/null
+++ b/app/src/main/res/drawable/shape_rectangle7.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_rectangle8.xml b/app/src/main/res/drawable/shape_rectangle8.xml
new file mode 100644
index 0000000..7fabc77
--- /dev/null
+++ b/app/src/main/res/drawable/shape_rectangle8.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_rectangle_selector_normal.xml b/app/src/main/res/drawable/shape_rectangle_selector_normal.xml
new file mode 100644
index 0000000..1a75f14
--- /dev/null
+++ b/app/src/main/res/drawable/shape_rectangle_selector_normal.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_rectangle_selector_press.xml b/app/src/main/res/drawable/shape_rectangle_selector_press.xml
new file mode 100644
index 0000000..bc2b28b
--- /dev/null
+++ b/app/src/main/res/drawable/shape_rectangle_selector_press.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_ring1.xml b/app/src/main/res/drawable/shape_ring1.xml
new file mode 100644
index 0000000..cc10226
--- /dev/null
+++ b/app/src/main/res/drawable/shape_ring1.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_ring2.xml b/app/src/main/res/drawable/shape_ring2.xml
new file mode 100644
index 0000000..6cf4ffe
--- /dev/null
+++ b/app/src/main/res/drawable/shape_ring2.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_ring3.xml b/app/src/main/res/drawable/shape_ring3.xml
new file mode 100644
index 0000000..bac3f16
--- /dev/null
+++ b/app/src/main/res/drawable/shape_ring3.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_ring4.xml b/app/src/main/res/drawable/shape_ring4.xml
new file mode 100644
index 0000000..a1d1f22
--- /dev/null
+++ b/app/src/main/res/drawable/shape_ring4.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/vector_android_blue_24dp.xml b/app/src/main/res/drawable/vector_android_blue_24dp.xml
new file mode 100644
index 0000000..6db4360
--- /dev/null
+++ b/app/src/main/res/drawable/vector_android_blue_24dp.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/vector_android_colortheme50_24dp.xml b/app/src/main/res/drawable/vector_android_colortheme50_24dp.xml
new file mode 100644
index 0000000..4306c91
--- /dev/null
+++ b/app/src/main/res/drawable/vector_android_colortheme50_24dp.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/vector_astronaut.xml b/app/src/main/res/drawable/vector_astronaut.xml
new file mode 100644
index 0000000..8ad9244
--- /dev/null
+++ b/app/src/main/res/drawable/vector_astronaut.xml
@@ -0,0 +1,330 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/vector_bonc.xml b/app/src/main/res/drawable/vector_bonc.xml
new file mode 100644
index 0000000..51c3326
--- /dev/null
+++ b/app/src/main/res/drawable/vector_bonc.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/vector_fingerprint_24dp.xml b/app/src/main/res/drawable/vector_fingerprint_24dp.xml
new file mode 100644
index 0000000..31a65d4
--- /dev/null
+++ b/app/src/main/res/drawable/vector_fingerprint_24dp.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/vector_heart.xml b/app/src/main/res/drawable/vector_heart.xml
new file mode 100644
index 0000000..bf33a33
--- /dev/null
+++ b/app/src/main/res/drawable/vector_heart.xml
@@ -0,0 +1,13 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/vector_motorcycle_24dp.xml b/app/src/main/res/drawable/vector_motorcycle_24dp.xml
new file mode 100644
index 0000000..ee27e14
--- /dev/null
+++ b/app/src/main/res/drawable/vector_motorcycle_24dp.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/vector_music_greed_24dp.xml b/app/src/main/res/drawable/vector_music_greed_24dp.xml
new file mode 100644
index 0000000..0564cd9
--- /dev/null
+++ b/app/src/main/res/drawable/vector_music_greed_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/vector_person_colortheme50_24dp.xml b/app/src/main/res/drawable/vector_person_colortheme50_24dp.xml
new file mode 100644
index 0000000..05e96aa
--- /dev/null
+++ b/app/src/main/res/drawable/vector_person_colortheme50_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/vector_red_heart.xml b/app/src/main/res/drawable/vector_red_heart.xml
new file mode 100644
index 0000000..2ac09c5
--- /dev/null
+++ b/app/src/main/res/drawable/vector_red_heart.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/vector_smile.xml b/app/src/main/res/drawable/vector_smile.xml
new file mode 100644
index 0000000..9026f5d
--- /dev/null
+++ b/app/src/main/res/drawable/vector_smile.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/vector_timer_colortheme50_24dp.xml b/app/src/main/res/drawable/vector_timer_colortheme50_24dp.xml
new file mode 100644
index 0000000..a91fb68
--- /dev/null
+++ b/app/src/main/res/drawable/vector_timer_colortheme50_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/vector_video_red_24dp.xml b/app/src/main/res/drawable/vector_video_red_24dp.xml
new file mode 100644
index 0000000..2546fc4
--- /dev/null
+++ b/app/src/main/res/drawable/vector_video_red_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/vector_windmill_24dp.xml b/app/src/main/res/drawable/vector_windmill_24dp.xml
new file mode 100644
index 0000000..58fc217
--- /dev/null
+++ b/app/src/main/res/drawable/vector_windmill_24dp.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_animation_holder.xml b/app/src/main/res/layout/activity_animation_holder.xml
new file mode 100644
index 0000000..73a70bf
--- /dev/null
+++ b/app/src/main/res/layout/activity_animation_holder.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_base_mvvm.xml b/app/src/main/res/layout/activity_base_mvvm.xml
index b932789..db34f6f 100644
--- a/app/src/main/res/layout/activity_base_mvvm.xml
+++ b/app/src/main/res/layout/activity_base_mvvm.xml
@@ -1,5 +1,6 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -60,7 +92,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
- android:text="努力加载中..."
+ android:text="@string/LOADING"
android:textColor="@color/colorTabText"
android:textSize="14sp"/>
diff --git a/app/src/main/res/layout/activity_basehead_mvvm.xml b/app/src/main/res/layout/activity_basehead_mvvm.xml
index 8d67d41..bdf0701 100644
--- a/app/src/main/res/layout/activity_basehead_mvvm.xml
+++ b/app/src/main/res/layout/activity_basehead_mvvm.xml
@@ -82,7 +82,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
- android:text="加载失败,点击重试"
+ android:text="@string/FAILE"
android:textSize="15sp"/>
@@ -104,7 +104,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
- android:text="努力加载中..."
+ android:text="@string/LOADING"
android:textColor="@color/colorTabText"
android:textSize="14sp"/>
diff --git a/app/src/main/res/layout/activity_cache.xml b/app/src/main/res/layout/activity_cache.xml
new file mode 100644
index 0000000..50a5377
--- /dev/null
+++ b/app/src/main/res/layout/activity_cache.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_classification.xml b/app/src/main/res/layout/activity_classification.xml
new file mode 100644
index 0000000..5cea254
--- /dev/null
+++ b/app/src/main/res/layout/activity_classification.xml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_customize_holder.xml b/app/src/main/res/layout/activity_customize_holder.xml
new file mode 100644
index 0000000..713216f
--- /dev/null
+++ b/app/src/main/res/layout/activity_customize_holder.xml
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_design_pattern_holder.xml b/app/src/main/res/layout/activity_design_pattern_holder.xml
new file mode 100644
index 0000000..c24cd85
--- /dev/null
+++ b/app/src/main/res/layout/activity_design_pattern_holder.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_drawable_animation.xml b/app/src/main/res/layout/activity_drawable_animation.xml
new file mode 100644
index 0000000..391c683
--- /dev/null
+++ b/app/src/main/res/layout/activity_drawable_animation.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_free_video.xml b/app/src/main/res/layout/activity_free_video.xml
new file mode 100644
index 0000000..14d707e
--- /dev/null
+++ b/app/src/main/res/layout/activity_free_video.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml
new file mode 100644
index 0000000..8377fb0
--- /dev/null
+++ b/app/src/main/res/layout/activity_home.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_hometest.xml b/app/src/main/res/layout/activity_hometest.xml
new file mode 100644
index 0000000..ec2be3c
--- /dev/null
+++ b/app/src/main/res/layout/activity_hometest.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_material_design_holder.xml b/app/src/main/res/layout/activity_material_design_holder.xml
new file mode 100644
index 0000000..6e35c62
--- /dev/null
+++ b/app/src/main/res/layout/activity_material_design_holder.xml
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_play_animate_vector_drawables.xml b/app/src/main/res/layout/activity_play_animate_vector_drawables.xml
new file mode 100644
index 0000000..7bd8837
--- /dev/null
+++ b/app/src/main/res/layout/activity_play_animate_vector_drawables.xml
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_play_bottom_sheet_dialog.xml b/app/src/main/res/layout/activity_play_bottom_sheet_dialog.xml
new file mode 100644
index 0000000..690ea63
--- /dev/null
+++ b/app/src/main/res/layout/activity_play_bottom_sheet_dialog.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_play_card_view.xml b/app/src/main/res/layout/activity_play_card_view.xml
new file mode 100644
index 0000000..3ad673f
--- /dev/null
+++ b/app/src/main/res/layout/activity_play_card_view.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_play_coordinator_behavior.xml b/app/src/main/res/layout/activity_play_coordinator_behavior.xml
new file mode 100644
index 0000000..ca14606
--- /dev/null
+++ b/app/src/main/res/layout/activity_play_coordinator_behavior.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_play_coordinator_layout.xml b/app/src/main/res/layout/activity_play_coordinator_layout.xml
new file mode 100644
index 0000000..b26e34d
--- /dev/null
+++ b/app/src/main/res/layout/activity_play_coordinator_layout.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_play_coordinator_toolbar.xml b/app/src/main/res/layout/activity_play_coordinator_toolbar.xml
new file mode 100644
index 0000000..6d1af44
--- /dev/null
+++ b/app/src/main/res/layout/activity_play_coordinator_toolbar.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_play_curved_motion.xml b/app/src/main/res/layout/activity_play_curved_motion.xml
new file mode 100644
index 0000000..c134550
--- /dev/null
+++ b/app/src/main/res/layout/activity_play_curved_motion.xml
@@ -0,0 +1,347 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_play_floating_action_button.xml b/app/src/main/res/layout/activity_play_floating_action_button.xml
new file mode 100644
index 0000000..f1d2703
--- /dev/null
+++ b/app/src/main/res/layout/activity_play_floating_action_button.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_play_music.xml b/app/src/main/res/layout/activity_play_music.xml
new file mode 100644
index 0000000..fc6bd39
--- /dev/null
+++ b/app/src/main/res/layout/activity_play_music.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_play_reveal_effect.xml b/app/src/main/res/layout/activity_play_reveal_effect.xml
new file mode 100644
index 0000000..952705d
--- /dev/null
+++ b/app/src/main/res/layout/activity_play_reveal_effect.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_play_shape.xml b/app/src/main/res/layout/activity_play_shape.xml
new file mode 100644
index 0000000..030e56d
--- /dev/null
+++ b/app/src/main/res/layout/activity_play_shape.xml
@@ -0,0 +1,317 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_play_status_bar.xml b/app/src/main/res/layout/activity_play_status_bar.xml
new file mode 100644
index 0000000..d60bc73
--- /dev/null
+++ b/app/src/main/res/layout/activity_play_status_bar.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_play_text_input_layout.xml b/app/src/main/res/layout/activity_play_text_input_layout.xml
new file mode 100644
index 0000000..5406634
--- /dev/null
+++ b/app/src/main/res/layout/activity_play_text_input_layout.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_play_text_view.xml b/app/src/main/res/layout/activity_play_text_view.xml
new file mode 100644
index 0000000..c6a632a
--- /dev/null
+++ b/app/src/main/res/layout/activity_play_text_view.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_play_touch_feedback.xml b/app/src/main/res/layout/activity_play_touch_feedback.xml
new file mode 100644
index 0000000..2756ad0
--- /dev/null
+++ b/app/src/main/res/layout/activity_play_touch_feedback.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_play_transitions.xml b/app/src/main/res/layout/activity_play_transitions.xml
new file mode 100644
index 0000000..9d31bb7
--- /dev/null
+++ b/app/src/main/res/layout/activity_play_transitions.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_play_view_state_change.xml b/app/src/main/res/layout/activity_play_view_state_change.xml
new file mode 100644
index 0000000..b0b05c2
--- /dev/null
+++ b/app/src/main/res/layout/activity_play_view_state_change.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_property_animation.xml b/app/src/main/res/layout/activity_property_animation.xml
new file mode 100644
index 0000000..be9dd12
--- /dev/null
+++ b/app/src/main/res/layout/activity_property_animation.xml
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_recycler_view_holder.xml b/app/src/main/res/layout/activity_recycler_view_holder.xml
new file mode 100644
index 0000000..f390f7b
--- /dev/null
+++ b/app/src/main/res/layout/activity_recycler_view_holder.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_sample.xml b/app/src/main/res/layout/activity_sample.xml
new file mode 100644
index 0000000..a852880
--- /dev/null
+++ b/app/src/main/res/layout/activity_sample.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_strategy_design.xml b/app/src/main/res/layout/activity_strategy_design.xml
new file mode 100644
index 0000000..e8c7699
--- /dev/null
+++ b/app/src/main/res/layout/activity_strategy_design.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_tab_layout.xml b/app/src/main/res/layout/activity_tab_layout.xml
new file mode 100644
index 0000000..bcf518b
--- /dev/null
+++ b/app/src/main/res/layout/activity_tab_layout.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_tag_cloud.xml b/app/src/main/res/layout/activity_tag_cloud.xml
new file mode 100644
index 0000000..74fac86
--- /dev/null
+++ b/app/src/main/res/layout/activity_tag_cloud.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_view_animation.xml b/app/src/main/res/layout/activity_view_animation.xml
new file mode 100644
index 0000000..fe5073f
--- /dev/null
+++ b/app/src/main/res/layout/activity_view_animation.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_welfare.xml
similarity index 97%
rename from app/src/main/res/layout/activity_main.xml
rename to app/src/main/res/layout/activity_welfare.xml
index 7092e05..3475aac 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_welfare.xml
@@ -11,6 +11,7 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/classification.xml b/app/src/main/res/layout/classification.xml
new file mode 100644
index 0000000..fb8b2c5
--- /dev/null
+++ b/app/src/main/res/layout/classification.xml
@@ -0,0 +1,159 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/classification_zfb.xml b/app/src/main/res/layout/classification_zfb.xml
new file mode 100644
index 0000000..7bca0f5
--- /dev/null
+++ b/app/src/main/res/layout/classification_zfb.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_page.xml b/app/src/main/res/layout/fragment_page.xml
new file mode 100644
index 0000000..74704e3
--- /dev/null
+++ b/app/src/main/res/layout/fragment_page.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_cache.xml b/app/src/main/res/layout/item_cache.xml
new file mode 100644
index 0000000..b92d03b
--- /dev/null
+++ b/app/src/main/res/layout/item_cache.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_classification.xml b/app/src/main/res/layout/item_classification.xml
new file mode 100644
index 0000000..4470f0e
--- /dev/null
+++ b/app/src/main/res/layout/item_classification.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_home.xml b/app/src/main/res/layout/item_home.xml
new file mode 100644
index 0000000..2212435
--- /dev/null
+++ b/app/src/main/res/layout/item_home.xml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/item_home_banner.xml b/app/src/main/res/layout/item_home_banner.xml
new file mode 100644
index 0000000..d13d4aa
--- /dev/null
+++ b/app/src/main/res/layout/item_home_banner.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_recycler.xml b/app/src/main/res/layout/item_recycler.xml
new file mode 100644
index 0000000..8288a8d
--- /dev/null
+++ b/app/src/main/res/layout/item_recycler.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_sample.xml b/app/src/main/res/layout/item_sample.xml
new file mode 100644
index 0000000..5413e4c
--- /dev/null
+++ b/app/src/main/res/layout/item_sample.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_recycler_test.xml b/app/src/main/res/layout/item_welfare.xml
similarity index 76%
rename from app/src/main/res/layout/item_recycler_test.xml
rename to app/src/main/res/layout/item_welfare.xml
index 8f3767a..f01416b 100644
--- a/app/src/main/res/layout/item_recycler_test.xml
+++ b/app/src/main/res/layout/item_welfare.xml
@@ -3,13 +3,12 @@
+ android:layout_height="240dp">
+ android:layout_height="match_parent">
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_recycler_test_footer.xml b/app/src/main/res/layout/item_welfare_footer.xml
similarity index 100%
rename from app/src/main/res/layout/item_recycler_test_footer.xml
rename to app/src/main/res/layout/item_welfare_footer.xml
diff --git a/app/src/main/res/layout/navigation_header.xml b/app/src/main/res/layout/navigation_header.xml
new file mode 100644
index 0000000..70f3fd8
--- /dev/null
+++ b/app/src/main/res/layout/navigation_header.xml
@@ -0,0 +1,184 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/project_item.xml b/app/src/main/res/layout/project_item.xml
new file mode 100644
index 0000000..4731fd1
--- /dev/null
+++ b/app/src/main/res/layout/project_item.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/toolbar.xml b/app/src/main/res/layout/toolbar.xml
new file mode 100644
index 0000000..1cb4d5e
--- /dev/null
+++ b/app/src/main/res/layout/toolbar.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
new file mode 100644
index 0000000..8bf3765
--- /dev/null
+++ b/app/src/main/res/values/attrs.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 879c33a..12d992e 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -1,14 +1,48 @@
- #3F51B5
- #303F9F
- #303F9F
+ #2c2d41
+ #2c2d41
+ #2c2d41
#dddfe0
#2c2d41
+ #802c2d41
#f2f4f5
#585858
+
+ #ff333333
+
+ #E0E0E0
+
+ #d9d9d9
+
+ #ffffff
+
+ #000000
+
+ #eeeeee
+
+
+ #4285f4
+ #804285f4
+ #34a853
+ #fbbc05
+ #ea4335
+
+
+ #7592A0
+ #292929
+ #CC583F
+ #ECB447
+ #5991AA
+ #75C095
+ #7D6AAD
+ #2D2D2D
+ #1D1D1D
+
+
+
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 378d033..179c3e9 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -13,6 +13,7 @@
3.34dp
5dp
6dp
+ 7dp
7.33dp
8.33dp
8.67dp
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b9d39f3..308035e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,3 +1,51 @@
- RecyclerView
+ Coder
+
+
+ 1. Toolbar和ActionBar基本一样,Toolbar是可移动的,ActionBar不可动\n
+2. AppBarLayout是继承自LinearLayout,垂直的,他为了给里面的子View实现动作效果的(子View不一定是Toolbar),
+ 一般在要实现动作效果的子View里面添加`app:layout_scrollFlags=""`属性就好了,里面的属性值按英文翻译
+ 很容易理解的\n
+3. CoordinatorLayout是为了协调子View之间的联动的,它的核心是Behavor,一般用系统定义好的Behavor就好了
+ (也可以自定义),举个例子,比如NestScrollView滑动时想让Toolbar也滑动就是这种联动,我们就在
+ CoordinatorLayout容器布局里面添加Toolbar与NestScrollView,而Toolbar想实现滑动就要用到AppBarLayout,
+ 所以在Toolbar外面再加一层AppBarLayout, 一般我们在NestScrollView里面添加属性
+`app:layout_behavior="@string/appbar_scrolling_view_behavior"`,如果不添加这个联动属性导致了Toolbar与
+ NestScrollView重叠。\n
+4. CollapsingToolbarLayout是对Toolbar再次包装的ViewGroup,用来实现折叠或拉伸效果的,他需要放到AppBarLayout里面,
+ 并且是直接子View,CollapsingToolbarLayout子View里面要设置属性`app:layout_collapseMode`里面的值
+ pin表示当上滑时该控件保留,其他控件不留\n
+ Android Material Design 风格控件的学习及遇到的问题;Tablayout | 横向布局标签,TextInputLayout | 文字输入布局 ,FloatingActionButton | 悬浮按钮, CoordinatorLayout APPBarLayout CollapsingTabLayout实现折叠头布局,BottomSheetDialog | 底部对话框,Touch Feedback| 触摸反馈,Reveal Effect| 揭示效果,Curved motion | 曲线运动,Animated Vector Drawables | 矢量图片动画
+ 刚则易折,柔则长存
+ 敬请期待
+ 折叠布局的嵌套
+ 加载失败,点击重试
+ 努力加载中...
+
+ M 50,50 m -48 ,0 a 48,48 0 1,0 96,0 a 48,48 0 1,0 -96,0
+ M 30,75 Q 50,55 70,75
+ M 30,65 Q 50,85 70,65
+ M 58,40 Q 66,50 73,40
+ M 28,40 Q 36,50 43,40
+ M 58,40 Q 66,30 73,40
+ M 28,40 Q 36,30 43,40
+
+ M 15,50
+ L 50,85 L 85,50 L 67.5,32.5
+ A 17.5,17.5 0,1,1,32.5,67.5
+ A 17.5,17.5 0,0,1,67.5,32.5
+ L 50,15 L 15,50
+ A 17.5,17.5 0,0,1,50,15
+ A 17.5,17.5 0,0,1,85,50
+
+
+
+ M 50,15
+ A 17.5,17.5,0,1,1,85,50
+ L 50,85 L 15,50
+ A 17.5,17.5,0,1,1,50,15
+
+
+ M 12,25 L 42,25 A 12.5,12.5,90,1,1,42,50 L 56,50 A 24,24,0,1,1,104,50 L 108,50 L 108,25 L 118,25 133,50 L 133,25 L 143,25 L 143,50 L 148,50 A 25,25 -90,0,1,178,25 L 178,35 A 15,15,-90,0,0,158,50 A 15,15,90,0,0,178,65 L 178,75 A 25,25,90,0,1,148,50 L 143,50 L 143,75 L 133,75,118,50 L 118,75 L 108 75 L 108,50 L 104,50 A 24,24,180,1,1,56,50 L 42,50 A 12.5,12.5,90,1,1,42,75 L 12,75 L 12 ,25
+
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 0eb88fe..969e7de 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -8,4 +8,26 @@
- @color/colorAccent
+
+
+
+
+
+
+
diff --git a/screenshots/3Dtagcloud.gif b/screenshots/3Dtagcloud.gif
new file mode 100644
index 0000000..1a2f29e
Binary files /dev/null and b/screenshots/3Dtagcloud.gif differ
diff --git a/screenshots/coderguoy01.gif b/screenshots/coderguoy01.gif
new file mode 100644
index 0000000..1c0e6ca
Binary files /dev/null and b/screenshots/coderguoy01.gif differ
diff --git a/screenshots/coderguoy03.gif b/screenshots/coderguoy03.gif
new file mode 100644
index 0000000..ef5f8a5
Binary files /dev/null and b/screenshots/coderguoy03.gif differ
diff --git a/screenshots/coderguoy05.gif b/screenshots/coderguoy05.gif
new file mode 100644
index 0000000..52da798
Binary files /dev/null and b/screenshots/coderguoy05.gif differ
diff --git a/screenshots/coordinator.gif b/screenshots/coordinator.gif
new file mode 100644
index 0000000..3a34137
Binary files /dev/null and b/screenshots/coordinator.gif differ
diff --git a/screenshots/recyclerview.gif b/screenshots/recyclerview.gif
deleted file mode 100644
index f763310..0000000
Binary files a/screenshots/recyclerview.gif and /dev/null differ