Forráskód Böngészése

添加游戏详情子界面--评论界面

zengjiebin 7 éve
szülő
commit
c6efe07fd1
35 módosított fájl, 1417 hozzáadás és 96 törlés
  1. 1 0
      WaterWaveProgress/.gitignore
  2. 28 0
      WaterWaveProgress/build.gradle
  3. 25 0
      WaterWaveProgress/proguard-rules.pro
  4. 26 0
      WaterWaveProgress/src/androidTest/java/com/bingfor/waterwaveprogress/ExampleInstrumentedTest.java
  5. 12 0
      WaterWaveProgress/src/main/AndroidManifest.xml
  6. 103 0
      WaterWaveProgress/src/main/java/cn/modificator/waterwave_progress/WaterWaveAttrInit.java
  7. 462 0
      WaterWaveProgress/src/main/java/cn/modificator/waterwave_progress/WaterWaveProgress.java
  8. 15 0
      WaterWaveProgress/src/main/java/cn/modificator/waterwave_progress/WidgetUtil.java
  9. 19 0
      WaterWaveProgress/src/main/res/values/attrs.xml
  10. 3 0
      WaterWaveProgress/src/main/res/values/strings.xml
  11. 17 0
      WaterWaveProgress/src/test/java/com/bingfor/waterwaveprogress/ExampleUnitTest.java
  12. 1 0
      app/build.gradle
  13. 1 4
      app/proguard-rules.pro
  14. 17 0
      app/src/main/java/com/sheep/gamegroup/model/entity/GameAppComment.java
  15. 1 1
      app/src/main/java/com/sheep/gamegroup/model/entity/FindAppScore.java
  16. 16 0
      app/src/main/java/com/sheep/gamegroup/util/CommonUtil.java
  17. 29 0
      app/src/main/java/com/sheep/gamegroup/util/TextViewUtil.java
  18. 8 0
      app/src/main/java/com/sheep/gamegroup/util/ViewUtil.java
  19. 5 5
      app/src/main/java/com/sheep/gamegroup/view/activity/ActFindGame.java
  20. 11 5
      app/src/main/java/com/sheep/gamegroup/view/activity/ActGcGameAppDetail.java
  21. 47 0
      app/src/main/java/com/sheep/gamegroup/view/adapter/AdpGcGameAppComment.java
  22. 46 47
      app/src/main/java/com/sheep/gamegroup/view/fragment/BaseListFragment3.java
  23. 194 0
      app/src/main/java/com/sheep/gamegroup/view/fragment/FgtGcGameAppComment.java
  24. 5 28
      app/src/main/java/com/sheep/gamegroup/view/fragment/FgtGcGameAppDetail.java
  25. 41 0
      app/src/main/java/com/sheep/gamegroup/view/fragment/FgtGcGameAppWelfare.java
  26. 0 0
      app/src/main/res/drawable-xhdpi/bulletwindow.webp
  27. 0 0
      app/src/main/res/drawable-xxhdpi/bulletwindow.webp
  28. 0 0
      app/src/main/res/drawable-xxxhdpi/bulletwindow.webp
  29. 41 0
      app/src/main/res/drawable/lay_list_progress_yellow.xml
  30. 84 0
      app/src/main/res/layout/header_gc_game_app_comment.xml
  31. 119 0
      app/src/main/res/layout/item_gc_game_app_comment.xml
  32. 4 4
      app/src/main/res/layout/item_gc_game_app_intro.xml
  33. 34 0
      app/src/main/res/layout/item_xin_progress.xml
  34. 1 1
      app/src/main/res/values/dd_styles.xml
  35. 1 1
      settings.gradle

+ 1 - 0
WaterWaveProgress/.gitignore

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

+ 28 - 0
WaterWaveProgress/build.gradle

@@ -0,0 +1,28 @@
+apply plugin: 'com.android.library'
+
+android {
+    compileSdkVersion ANDROID_COMPILE_SDK_VERSION as int
+    buildToolsVersion ANDROID_BUILD_TOOLS_VERSION
+
+    defaultConfig {
+        minSdkVersion ANDROID_MIN_SDK_VERSION as int
+        targetSdkVersion ANDORID_TARGET_SDK_VERSION as int
+        versionCode VERSION_CODE as int
+        versionName VERSION_NAME
+
+    }
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+        }
+    }
+}
+
+dependencies {
+    implementation fileTree(dir: 'libs', include: ['*.jar'])
+    androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
+        exclude group: 'com.android.support', module: 'support-annotations'
+    })
+    implementation "com.android.support:appcompat-v7:$supportLibVersion"
+}

+ 25 - 0
WaterWaveProgress/proguard-rules.pro

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

+ 26 - 0
WaterWaveProgress/src/androidTest/java/com/bingfor/waterwaveprogress/ExampleInstrumentedTest.java

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

+ 12 - 0
WaterWaveProgress/src/main/AndroidManifest.xml

@@ -0,0 +1,12 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+
+    package="cn.modificator.waterwave_progress">
+
+    <application
+        android:allowBackup="true"
+        android:label="@string/app_name"
+        android:supportsRtl="true">
+
+    </application>
+
+</manifest>

+ 103 - 0
WaterWaveProgress/src/main/java/cn/modificator/waterwave_progress/WaterWaveAttrInit.java

@@ -0,0 +1,103 @@
+package cn.modificator.waterwave_progress;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+import cn.modificator.waterwave_progress.R;
+
+public class WaterWaveAttrInit {
+
+	private int progressWidth; // 进度条宽度
+	private int progressColor;
+	private int progressBgColor;
+	private int waterWaveColor;
+	private int waterWaveBgColor;
+	private int progress2WaterWidth; // 进度条和水波之间的间距
+	private boolean showProgress; // 是否显示进度条
+	private boolean showNumerical; // 是否显示百分比
+	private int fontSize;
+	private int textColor;
+	private int progress;
+	private int maxProgress;
+
+	@SuppressLint("Recycle")
+	public WaterWaveAttrInit(Context context, AttributeSet attrs, int defStyle) {
+		TypedArray typedArray = context.obtainStyledAttributes(attrs,
+				R.styleable.WaterWaveProgress, defStyle, 0);
+		progressWidth = typedArray.getDimensionPixelOffset(
+				R.styleable.WaterWaveProgress_progressWidth, 0);
+		progressColor = typedArray.getColor(
+				R.styleable.WaterWaveProgress_progressColor, 0xFF33B5E5);
+		progressBgColor = typedArray.getColor(
+				R.styleable.WaterWaveProgress_progressBgColor, 0xFFBEBEBE);
+		waterWaveColor = typedArray.getColor(
+				R.styleable.WaterWaveProgress_waterWaveColor, 0XFF4BBDFE);
+		waterWaveBgColor = typedArray.getColor(
+				R.styleable.WaterWaveProgress_waterWaveBgColor, 0xFFDDDDDD);
+		progress2WaterWidth = typedArray.getDimensionPixelOffset(
+				R.styleable.WaterWaveProgress_progress2WaterWidth, 0);
+		showProgress = typedArray.getBoolean(
+				R.styleable.WaterWaveProgress_showProgress, true);
+		showNumerical = typedArray.getBoolean(
+				R.styleable.WaterWaveProgress_showNumerical, true);
+		fontSize = typedArray.getDimensionPixelOffset(
+				R.styleable.WaterWaveProgress_fontSize, 0);
+		textColor = typedArray.getColor(
+				R.styleable.WaterWaveProgress_textColor, 0xFFFFFFFF);
+		progress = typedArray.getInteger(
+				R.styleable.WaterWaveProgress_progress, 15);
+		maxProgress = typedArray.getInteger(
+				R.styleable.WaterWaveProgress_maxProgress, 100);
+		typedArray.recycle();
+	}
+
+	public int getProgressWidth() {
+		return progressWidth;
+	}
+
+	public int getProgressColor() {
+		return progressColor;
+	}
+
+	public int getProgressBgColor() {
+		return progressBgColor;
+	}
+
+	public int getWaterWaveColor() {
+		return waterWaveColor;
+	}
+
+	public int getWaterWaveBgColor() {
+		return waterWaveBgColor;
+	}
+
+	public int getProgress2WaterWidth() {
+		return progress2WaterWidth;
+	}
+
+	public boolean isShowProgress() {
+		return showProgress;
+	}
+
+	public boolean isShowNumerical() {
+		return showNumerical;
+	}
+
+	public int getFontSize() {
+		return fontSize;
+	}
+
+	public int getTextColor() {
+		return textColor;
+	}
+
+	public int getProgress() {
+		return progress;
+	}
+
+	public int getMaxProgress() {
+		return maxProgress;
+	}
+
+}

+ 462 - 0
WaterWaveProgress/src/main/java/cn/modificator/waterwave_progress/WaterWaveProgress.java

@@ -0,0 +1,462 @@
+package cn.modificator.waterwave_progress;
+
+import java.lang.ref.WeakReference;
+import java.text.DecimalFormat;
+import java.util.Locale;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.Point;
+import android.graphics.RectF;
+import android.graphics.Region;
+import android.graphics.Path.Direction;
+import android.graphics.Region.Op;
+import android.os.Handler;
+import android.os.Message;
+import android.os.Build.VERSION;
+import android.os.Build.VERSION_CODES;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.View;
+import android.widget.ProgressBar;
+
+/**
+ * @author Administrator
+ */
+public class WaterWaveProgress extends View {
+    // 水的画笔 // 画圆环的画笔// 进度百分比的画笔
+    private Paint mPaintWater = null, mRingPaint = null, mTextPaint = null;
+
+    // 圆环颜色 // 圆环背景颜色 // 当前进度 //水波颜色 // 水波背景色 //进度条和水波之间的距离 //进度百分比字体大小
+    // //进度百分比字体颜色
+    private int mRingColor, mRingBgColor, mWaterColor, mWaterBgColor,
+            mFontSize, mTextColor;
+    // 进度 //浪峰个数
+    float crestCount = 1.5f;
+
+    int mProgress = 10, mMaxProgress = 100;
+
+    // 画布中心点
+    private Point mCenterPoint;
+    // 圆环宽度
+    private float mRingWidth, mProgress2WaterWidth;
+    // 是否显示进度条 //是否显示进度百分比
+    private boolean mShowProgress = false, mShowNumerical = true;
+
+    /**
+     * 产生波浪效果的因子
+     */
+    private long mWaveFactor = 0L;
+    /**
+     * 正在执行波浪动画
+     */
+    private boolean isWaving = false;
+    /**
+     * 振幅
+     */
+    private float mAmplitude = 30.0F; // 20F
+    /**
+     * 波浪的速度
+     */
+    private float mWaveSpeed = 0.070F; // 0.020F
+    /**
+     * 水的透明度
+     */
+    private int mWaterAlpha = 255; // 255
+    WaterWaveAttrInit attrInit;
+
+    private MyHandler mHandler = null;
+
+    private static class MyHandler extends Handler {
+        private WeakReference<WaterWaveProgress> mWeakRef = null;
+
+        private int refreshPeriod = 100;
+
+        public MyHandler(WaterWaveProgress host) {
+            mWeakRef = new WeakReference<WaterWaveProgress>(host);
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            super.handleMessage(msg);
+            if (mWeakRef.get() != null) {
+                mWeakRef.get().invalidate();
+                sendEmptyMessageDelayed(0, refreshPeriod);
+            }
+        }
+    }
+
+    public WaterWaveProgress(Context paramContext) {
+        super(paramContext);
+    }
+
+    public WaterWaveProgress(Context context, AttributeSet attributeSet) {
+        this(context, attributeSet, 0);
+    }
+
+    public WaterWaveProgress(Context context, AttributeSet attrs,
+                             int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        attrInit = new WaterWaveAttrInit(context, attrs, defStyleAttr);
+        init(context);
+    }
+
+    @SuppressLint("NewApi")
+    private void init(Context context) {
+        mCenterPoint = new Point();
+        mRingColor = attrInit.getProgressColor();
+        mRingBgColor = attrInit.getProgressBgColor();
+        mWaterColor = attrInit.getWaterWaveColor();
+        mWaterBgColor = attrInit.getWaterWaveBgColor();
+        mRingWidth = attrInit.getProgressWidth();
+        mProgress2WaterWidth = attrInit.getProgress2WaterWidth();
+        mShowProgress = attrInit.isShowProgress();
+        mShowNumerical = attrInit.isShowNumerical();
+        mFontSize = attrInit.getFontSize();
+        mTextColor = attrInit.getTextColor();
+        mProgress = attrInit.getProgress();
+        mMaxProgress = attrInit.getMaxProgress();
+
+        // 如果手机版本在4.0以上,则开启硬件加速
+        if (VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH) {
+            setLayerType(View.LAYER_TYPE_HARDWARE, null);
+            // setLayerType(View.LAYER_TYPE_SOFTWARE, null);
+        }
+        mRingPaint = new Paint();
+        mRingPaint.setAntiAlias(true);
+        mRingPaint.setColor(mRingColor); // 圆环颜色
+        mRingPaint.setStyle(Paint.Style.STROKE);
+        mRingPaint.setStrokeWidth(mRingWidth); // 圆环宽度
+
+        mPaintWater = new Paint();
+        mPaintWater.setStrokeWidth(1.0F);
+        mPaintWater.setColor(mWaterColor);
+        // mPaintWater.setColor(getResources().getColor(mWaterColor));
+        mPaintWater.setAlpha(mWaterAlpha);
+
+        mTextPaint = new Paint();
+        mTextPaint.setAntiAlias(true);
+        mTextPaint.setColor(mTextColor);
+        mTextPaint.setStyle(Paint.Style.FILL);
+        mTextPaint.setTextSize(mFontSize);
+
+        mHandler = new MyHandler(this);
+
+    }
+
+    public void animateWave() {
+        if (!isWaving) {
+            mWaveFactor = 0L;
+            isWaving = true;
+            mHandler.sendEmptyMessage(0);
+        }
+    }
+
+    @SuppressLint({"DrawAllocation", "NewApi"})
+    protected void onDraw(Canvas canvas) {
+        super.onDraw(canvas);
+        // 获取整个View(容器)的宽、高
+        int width = getWidth();
+        int height = getHeight();
+        width = height = (width < height) ? width : height;
+        mAmplitude = width / 20f;
+
+        mCenterPoint.x = width / 2;
+        mCenterPoint.y = height / 2;
+        { // 重新设置进度条的宽度和水波与进度条的距离,,至于为什么写在这,我脑袋抽了可以不
+            mRingWidth = mRingWidth == 0 ? width / 20 : mRingWidth;
+            mProgress2WaterWidth = mProgress2WaterWidth == 0 ? mRingWidth * 0.6f
+                    : mProgress2WaterWidth;
+            mRingPaint.setStrokeWidth(mRingWidth);
+            mTextPaint.setTextSize(mFontSize == 0 ? width / 5 : mFontSize);
+            if (VERSION.SDK_INT == VERSION_CODES.JELLY_BEAN) {
+                setLayerType(View.LAYER_TYPE_SOFTWARE, null);
+            } else {
+                setLayerType(View.LAYER_TYPE_HARDWARE, null);
+            }
+        }
+
+        RectF oval = new RectF();
+        oval.left = mRingWidth / 2;
+        oval.top = mRingWidth / 2;
+        oval.right = width - mRingWidth / 2;
+        oval.bottom = height - mRingWidth / 2;
+
+        if (isInEditMode()) {
+            mRingPaint.setColor(mRingBgColor);
+            canvas.drawArc(oval, -90, 360, false, mRingPaint);
+            mRingPaint.setColor(mRingColor);
+            canvas.drawArc(oval, -90, 90, false, mRingPaint);
+            canvas.drawCircle(mCenterPoint.x, mCenterPoint.y, mCenterPoint.x
+                    - mRingWidth - mProgress2WaterWidth, mPaintWater);
+            return;
+        }
+
+        // 如果没有执行波浪动画,或者也没有指定容器宽高,就画个简单的矩形
+        if ((width == 0) || (height == 0) || isInEditMode()) {
+            canvas.drawCircle(mCenterPoint.x, mCenterPoint.y, width / 2
+                    - mProgress2WaterWidth - mRingWidth, mPaintWater);
+            return;
+        }
+
+        // 水与边框的距离
+        float waterPadding = mShowProgress ? mRingWidth + mProgress2WaterWidth
+                : 0;
+        // 水最高处
+        int waterHeightCount = mShowProgress ? (int) (height - waterPadding * 2)
+                : height;
+
+        // 重新生成波浪的形状
+        mWaveFactor++;
+        if (mWaveFactor >= Integer.MAX_VALUE) {
+            mWaveFactor = 0L;
+        }
+
+        // 画进度条背景
+        mRingPaint.setColor(mRingBgColor);
+        // canvas.drawArc(oval, -90, 360, false, mRingPaint);
+        // //和下面效果一样,只不过这个是画个360度的弧,下面是画圆环
+        canvas.drawCircle(width / 2, width / 2, waterHeightCount / 2
+                + waterPadding - mRingWidth / 2, mRingPaint);
+        mRingPaint.setColor(mRingColor);
+        // 100为 总进度
+        canvas.drawArc(oval, -90, (mProgress * 1f) / mMaxProgress * 360f, false,
+                mRingPaint);
+
+        // 计算出水的高度
+        float waterHeight = waterHeightCount * (1 - (mProgress * 1f) / mMaxProgress)
+                + waterPadding;
+        int staticHeight = (int) (waterHeight + mAmplitude);
+        Path mPath = new Path();
+        mPath.reset();
+        if (mShowProgress) {
+            mPath.addCircle(width / 2, width / 2, waterHeightCount / 2,
+                    Direction.CCW);
+        } else {
+            mPath.addCircle(width / 2, width / 2, waterHeightCount / 2,
+                    Direction.CCW);
+        }
+        // canvas添加限制,让接下来的绘制都在园内
+        canvas.clipPath(mPath, Op.INTERSECT);
+//		canvas.clipPath(mPath, Op.REPLACE);
+        Paint bgPaint = new Paint();
+        bgPaint.setColor(mWaterBgColor);
+        // 绘制背景
+        canvas.drawRect(waterPadding, waterPadding, waterHeightCount
+                + waterPadding, waterHeightCount + waterPadding, bgPaint);
+        // 绘制静止的水
+        canvas.drawRect(waterPadding, staticHeight, waterHeightCount
+                + waterPadding, waterHeightCount + waterPadding, mPaintWater);
+
+        // 待绘制的波浪线的x坐标
+        int xToBeDrawed = (int) waterPadding;
+        int waveHeight = (int) (waterHeight - mAmplitude
+                * Math.sin(Math.PI
+                * (2.0F * (xToBeDrawed + (mWaveFactor * width)
+                * mWaveSpeed)) / width));
+        // 波浪线新的高度
+        int newWaveHeight = waveHeight;
+        while (true) {
+            if (xToBeDrawed >= waterHeightCount + waterPadding) {
+                break;
+            }
+            // 根据当前x值计算波浪线新的高度
+            newWaveHeight = (int) (waterHeight - mAmplitude
+                    * Math.sin(Math.PI
+                    * (crestCount * (xToBeDrawed + (mWaveFactor * waterHeightCount)
+                    * mWaveSpeed)) / waterHeightCount));
+
+            // 先画出梯形的顶边
+            canvas.drawLine(xToBeDrawed, waveHeight, xToBeDrawed + 1,
+                    newWaveHeight, mPaintWater);
+
+            // 画出动态变化的柱子部分
+            canvas.drawLine(xToBeDrawed, newWaveHeight, xToBeDrawed + 1,
+                    staticHeight, mPaintWater);
+            xToBeDrawed++;
+            waveHeight = newWaveHeight;
+        }
+        if (mShowNumerical) {
+//            String progressTxt = String.format(Locale.CHINA, "%.0f.%%", (mProgress * 1f) / mMaxProgress * 100f);//%进度
+            String progressTxt = text != null ? text : new DecimalFormat("0.0").format((mProgress * 10f) / mMaxProgress);//10分满分制
+            float mTxtWidth = mTextPaint.measureText(progressTxt, 0, progressTxt.length());
+            canvas.drawText(progressTxt, mCenterPoint.x - mTxtWidth / 2,
+                    mCenterPoint.x * 1.5f - mFontSize / 2, mTextPaint);
+        }
+    }
+    //要显示的文本
+    private String text;
+
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        int width = widthMeasureSpec;
+        int height = heightMeasureSpec;
+        width = height = (width < height) ? width : height;
+        setMeasuredDimension(width, height);
+    }
+
+    /**
+     * 设置波浪的振幅
+     */
+    public void setAmplitude(float amplitude) {
+        mAmplitude = amplitude;
+    }
+
+    /**
+     * 设置水的透明度
+     *
+     * @param alpha 透明的百分比,值为0到1之间的小数,越接近0越透明
+     */
+    public void setWaterAlpha(float alpha) {
+        mWaterAlpha = (int) (255.0F * alpha);
+        mPaintWater.setAlpha(mWaterAlpha);
+    }
+
+    /**
+     * 设置水的颜色
+     */
+    public void setWaterColor(int color) {
+        mWaterColor = color;
+    }
+
+    /**
+     * 设置当前进度
+     */
+    public void setProgress(int progress) {
+        progress = progress > 100 ? 100 : progress < 0 ? 0 : progress;
+        mProgress = progress;
+        invalidate();
+    }
+
+    /**
+     * 获取进度 动画时会用到
+     */
+    public int getProgress() {
+        return mProgress;
+    }
+
+    /**
+     * 设置波浪速度
+     */
+    public void setWaveSpeed(float speed) {
+        mWaveSpeed = speed;
+    }
+
+    /**
+     * 是否显示进度条
+     *
+     * @param b
+     */
+    public void setShowProgress(boolean b) {
+        mShowProgress = b;
+    }
+
+    /**
+     * 是否显示进度值
+     *
+     * @param b
+     */
+    public void setShowNumerical(boolean b) {
+        mShowNumerical = b;
+    }
+
+    /**
+     * 设置进度条前景色
+     *
+     * @param mRingColor
+     */
+    public void setmRingColor(int mRingColor) {
+        this.mRingColor = mRingColor;
+    }
+
+    /**
+     * 设置进度条背景色
+     *
+     * @param mRingBgColor
+     */
+    public void setmRingBgColor(int mRingBgColor) {
+        this.mRingBgColor = mRingBgColor;
+    }
+
+    /**
+     * 设置水波颜色
+     *
+     * @param mWaterColor
+     */
+    public void setmWaterColor(int mWaterColor) {
+        this.mWaterColor = mWaterColor;
+    }
+
+    /**
+     * 设置水波背景色
+     *
+     * @param mWaterBgColor
+     */
+    public void setWaterBgColor(int mWaterBgColor) {
+        this.mWaterBgColor = mWaterBgColor;
+    }
+
+    /**
+     * 设置进度值显示字体大小
+     *
+     * @param mFontSize
+     */
+    public void setFontSize(int mFontSize) {
+        this.mFontSize = mFontSize;
+    }
+
+    /**
+     * 设置进度值显示字体颜色
+     *
+     * @param mTextColor
+     */
+    public void setTextColor(int mTextColor) {
+        this.mTextColor = mTextColor;
+    }
+
+    /**
+     * 设置进度条最大值
+     *
+     * @param mMaxProgress
+     */
+    public void setMaxProgress(int mMaxProgress) {
+        this.mMaxProgress = mMaxProgress;
+    }
+
+    /**
+     * 设置浪峰个数
+     *
+     * @param crestCount
+     */
+    public void setCrestCount(float crestCount) {
+        this.crestCount = crestCount;
+    }
+
+    /**
+     * 设置进度条宽度
+     *
+     * @param mRingWidth
+     */
+    public void setRingWidth(float mRingWidth) {
+        this.mRingWidth = mRingWidth;
+    }
+
+    /**
+     * 设置水波到进度条之间的距离
+     *
+     * @param mProgress2WaterWidth
+     */
+    public void setProgress2WaterWidth(float mProgress2WaterWidth) {
+        this.mProgress2WaterWidth = mProgress2WaterWidth;
+    }
+
+}

+ 15 - 0
WaterWaveProgress/src/main/java/cn/modificator/waterwave_progress/WidgetUtil.java

@@ -0,0 +1,15 @@
+package cn.modificator.waterwave_progress;
+
+import android.content.Context;
+
+public class WidgetUtil {
+	public static int Dp2Px(Context context, float dp) {
+		final float scale = context.getResources().getDisplayMetrics().density;
+		return (int) (dp * scale + 0.5f);
+	}
+
+	public static int Px2Dp(Context context, float px) {
+		final float scale = context.getResources().getDisplayMetrics().density;
+		return (int) (px / scale + 0.5f);
+	}
+}

+ 19 - 0
WaterWaveProgress/src/main/res/values/attrs.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <declare-styleable name="WaterWaveProgress">
+        <attr name="progressWidth" format="dimension" />
+        <attr name="fontSize" format="dimension" />
+        <attr name="progressColor" format="color" />
+        <attr name="progressBgColor" format="color" />
+        <attr name="waterWaveColor" format="color" />
+        <attr name="waterWaveBgColor" format="color" />
+        <attr name="progress2WaterWidth" format="dimension" />
+        <attr name="showProgress" format="boolean" />
+        <attr name="showNumerical" format="boolean" />
+        <attr name="textColor" format="color" />
+        <attr name="progress" format="integer" />
+        <attr name="maxProgress" format="integer" />
+    </declare-styleable>
+
+</resources>

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

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

+ 17 - 0
WaterWaveProgress/src/test/java/com/bingfor/waterwaveprogress/ExampleUnitTest.java

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

+ 1 - 0
app/build.gradle

@@ -290,6 +290,7 @@ dependencies {
     implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30'
     //有米科技
     implementation(name: 'YoumiSdk_v8.3.0_2018-09-20', ext: 'aar')
+    implementation project(':WaterWaveProgress')
 }
 
 static def releaseTime() {

+ 1 - 4
app/proguard-rules.pro

@@ -460,7 +460,4 @@
 #==================compile 'com.haibin:calendarview:3.4.4'==========================
  -keepclasseswithmembers class * {
      public <init>(android.content.Context);
- }
-#==================com.github.lsjwzh.RecyclerViewPager==========================
- -keep class com.lsjwzh.widget.recyclerviewpager.**
- -dontwarn com.lsjwzh.widget.recyclerviewpager.**
+ }

+ 17 - 0
app/src/main/java/com/sheep/gamegroup/model/entity/GameAppComment.java

@@ -0,0 +1,17 @@
+package com.sheep.gamegroup.model.entity;
+
+import com.sheep.gamegroup.util.ViewUtil;
+
+/**
+ * Created by realicing on 2018/11/1.
+ * realicing@sina.com
+ */
+public class GameAppComment {
+    public String getContent() {
+        return "dsafasdkl;fnjasdkfjas'dfka;lsdfkasdfasd";
+    }
+
+    public String getAvatar() {
+        return ViewUtil.getNetImgByName("icon_phone");
+    }
+}

+ 1 - 1
app/src/main/java/com/sheep/gamegroup/model/entity/FindAppScore.java

@@ -4,7 +4,7 @@ package com.sheep.gamegroup.model.entity;
  * Created by realicing on 2018/6/29.
  * realicing@sina.com
  */
-public class FindAppScore {
+public class GameAppScore {
     private int star;
     private int num;
 

+ 16 - 0
app/src/main/java/com/sheep/gamegroup/util/CommonUtil.java

@@ -18,11 +18,13 @@ import android.text.Html;
 import android.text.TextUtils;
 import android.util.TypedValue;
 import android.view.View;
+import android.view.ViewGroup;
 import android.view.ViewTreeObserver;
 import android.webkit.DownloadListener;
 import android.webkit.WebView;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
 import android.widget.TextView;
 
 import com.alibaba.fastjson.JSONObject;
@@ -1908,6 +1910,20 @@ public class CommonUtil {
         }
     }
 
+    //设置无数据距离上面的距离
+    public void setEmptyViewMargin(View empty_view, int topMargin, int bottomMargin) {
+        if(empty_view != null) {
+            ViewGroup.LayoutParams layoutParams = empty_view.getLayoutParams();
+            if(layoutParams instanceof RelativeLayout.LayoutParams) {
+                ((RelativeLayout.LayoutParams) layoutParams).topMargin = topMargin;
+                ((RelativeLayout.LayoutParams) layoutParams).bottomMargin = bottomMargin;
+            } else if(layoutParams instanceof LinearLayout.LayoutParams) {
+                ((LinearLayout.LayoutParams) layoutParams).topMargin = topMargin;
+                ((LinearLayout.LayoutParams) layoutParams).bottomMargin = bottomMargin;
+            }
+            empty_view.setLayoutParams(layoutParams);
+        }
+    }
     //设置无数据显示
     public void updateEmptyView(View empty_view, boolean showEmpty) {
         updateEmptyView(empty_view, showEmpty, false);

+ 29 - 0
app/src/main/java/com/sheep/gamegroup/util/TextViewUtil.java

@@ -1,9 +1,13 @@
 package com.sheep.gamegroup.util;
 
 import android.text.Layout;
+import android.text.TextUtils;
+import android.view.View;
 import android.view.ViewTreeObserver;
 import android.widget.TextView;
 
+import com.sheep.jiuyan.samllsheep.R;
+
 import rx.functions.Action1;
 
 /**
@@ -26,4 +30,29 @@ public class TextViewUtil {
         });
 
     }
+    //初始化文本介绍,必须有 intro_content 和 intro_show_all
+    public static void initIntroView(View itemView, String text) {
+        final TextView intro_content = itemView.findViewById(R.id.intro_content);
+        final TextView intro_show_all = itemView.findViewById(R.id.intro_show_all);
+        final View intro_show_all_no = itemView.findViewById(R.id.intro_show_all_no);
+        TextViewUtil.listenEllipsizeChange(intro_content, new Action1<Integer>() {
+            @Override
+            public void call(Integer integer) {
+                if (integer > 0) {
+                    ViewUtil.setVisibility(intro_show_all, true);
+                    ViewUtil.setVisibility(intro_show_all_no, false);
+                }
+            }
+        });
+        intro_show_all.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                boolean canShowAll = intro_content.getMaxLines() == 3;
+                intro_content.setMaxLines(canShowAll ? Integer.MAX_VALUE : 3);
+                intro_content.setEllipsize(canShowAll ? null : TextUtils.TruncateAt.END);
+                intro_show_all.setText(canShowAll ? "显示全部" : "收起");
+            }
+        });
+        ViewUtil.setText(intro_content, text);
+    }
 }

+ 8 - 0
app/src/main/java/com/sheep/gamegroup/util/ViewUtil.java

@@ -1414,6 +1414,14 @@ public class ViewUtil {
         }
     }
 
+    public static void setAvatar(ImageView imageView, String pictures) {
+        if (imageView != null && !TextUtils.isEmpty(pictures)) {
+            if (pictures.contains(";")) {
+                pictures = pictures.split(";")[0];
+            }
+            GlideImageLoader.setAvatar(imageView, pictures);
+        }
+    }
     public static void setImage(ImageView imageView, String pictures) {
         if (imageView != null && !TextUtils.isEmpty(pictures)) {
             if (pictures.contains(";")) {

+ 5 - 5
app/src/main/java/com/sheep/gamegroup/view/activity/ActFindGame.java

@@ -23,7 +23,7 @@ import com.sheep.gamegroup.greendao.download.DownLoadInfo;
 import com.sheep.gamegroup.helper.ImageListHelper;
 import com.sheep.gamegroup.model.entity.BaseMessage;
 import com.sheep.gamegroup.model.entity.GameApp;
-import com.sheep.gamegroup.model.entity.FindAppScore;
+import com.sheep.gamegroup.model.entity.GameAppScore;
 import com.sheep.gamegroup.model.entity.MyFindAppCore;
 import com.sheep.gamegroup.model.entity.UserEntity;
 import com.sheep.gamegroup.model.util.SheepSubscriber;
@@ -254,7 +254,7 @@ public class ActFindGame extends BaseActivity {
     }
 
     private void initAppScoreNum() {
-        List<FindAppScore> findAppScoreList = DataUtil.getInstance().getCacheList(ApiKey.score_num(id), FindAppScore.class);
+        List<GameAppScore> findAppScoreList = DataUtil.getInstance().getCacheList(ApiKey.score_num(id), GameAppScore.class);
         if (!findAppScoreList.isEmpty()) {
             loadAppScoreNum(findAppScoreList);
         }
@@ -264,7 +264,7 @@ public class ActFindGame extends BaseActivity {
                 .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
                     @Override
                     public void onNext(BaseMessage baseMessage) {
-                        List<FindAppScore> findAppScoreList = baseMessage.getDataList(FindAppScore.class);
+                        List<GameAppScore> findAppScoreList = baseMessage.getDataList(GameAppScore.class);
                         if (ListUtil.isEmpty(findAppScoreList))
                             resetAppScoreNum();
                         else
@@ -413,8 +413,8 @@ public class ActFindGame extends BaseActivity {
     @BindView(R.id.find_game_score)
     TextView find_game_score;
 
-    private void loadAppScoreNum(List<FindAppScore> findAppScoreList) {
-        for (FindAppScore findAppScore : findAppScoreList) {
+    private void loadAppScoreNum(List<GameAppScore> findAppScoreList) {
+        for (GameAppScore findAppScore : findAppScoreList) {
             switch (findAppScore.getStar()) {
                 case 1:
                     find_game_progress_1.setProgress(findAppScore.getNum());

+ 11 - 5
app/src/main/java/com/sheep/gamegroup/view/activity/ActGcGameAppDetail.java

@@ -29,8 +29,9 @@ import com.sheep.gamegroup.util.RefreshUtil;
 import com.sheep.gamegroup.util.TagListUtil;
 import com.sheep.gamegroup.util.ViewUtil;
 import com.sheep.gamegroup.view.adapter.TitleFragmentListAdapter;
+import com.sheep.gamegroup.view.fragment.FgtGcGameAppComment;
 import com.sheep.gamegroup.view.fragment.FgtGcGameAppDetail;
-import com.sheep.gamegroup.view.fragment.FgtNull;
+import com.sheep.gamegroup.view.fragment.FgtGcGameAppWelfare;
 import com.sheep.jiuyan.samllsheep.R;
 import com.sheep.jiuyan.samllsheep.SheepApp;
 import com.sheep.jiuyan.samllsheep.ui.base.BaseActivity;
@@ -84,6 +85,8 @@ public class ActGcGameAppDetail extends BaseActivity {
 
     private TitleFragmentListAdapter mAdapter;
     private FgtGcGameAppDetail fgtGcPlayGameDetail;
+    private FgtGcGameAppComment fgtGcGameAppComment;
+    private FgtGcGameAppWelfare fgtGcGameAppWelfare;
 
     @Override
     protected void onView() {
@@ -92,11 +95,12 @@ public class ActGcGameAppDetail extends BaseActivity {
         TagListUtil.setTagList(recyclerView, tagList);
         //viewPager
         mAdapter = new TitleFragmentListAdapter(getSupportFragmentManager());
-        fgtGcPlayGameDetail = FgtGcGameAppDetail.newInstance();
-        fgtGcPlayGameDetail.setAppId(id);
+        fgtGcPlayGameDetail = FgtGcGameAppDetail.newInstance(id);
+        fgtGcGameAppComment = FgtGcGameAppComment.newInstance(id);
+        fgtGcGameAppWelfare = FgtGcGameAppWelfare.newInstance(id);
         mAdapter.add(fgtGcPlayGameDetail, "详情");
-        mAdapter.add(new FgtNull(), "评价");
-        mAdapter.add(new FgtNull(), "福利");
+        mAdapter.add(fgtGcGameAppComment, "评价");
+        mAdapter.add(fgtGcGameAppWelfare, "福利");
         viewPager.setOffscreenPageLimit(3);
         viewPager.setAdapter(mAdapter);
         tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager));
@@ -158,6 +162,8 @@ public class ActGcGameAppDetail extends BaseActivity {
         CommonUtil.getInstance().palyGameDetailBtnValue(this, gameEntity, gc_game_app_detail_bt2, 0);
         //初始化详情界面
         fgtGcPlayGameDetail.loadData(gameEntity);
+        fgtGcGameAppComment.loadData(gameEntity);
+        fgtGcGameAppWelfare.loadData(gameEntity);
     }
 
     //通过网络获取游戏数据并尝试加载

+ 47 - 0
app/src/main/java/com/sheep/gamegroup/view/adapter/AdpGcGameAppComment.java

@@ -0,0 +1,47 @@
+package com.sheep.gamegroup.view.adapter;
+
+import android.content.Context;
+import android.support.v7.widget.AppCompatRatingBar;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.BaseViewHolder;
+import com.sheep.gamegroup.model.entity.GameAppComment;
+import com.sheep.gamegroup.util.TextViewUtil;
+import com.sheep.gamegroup.util.ViewUtil;
+import com.sheep.jiuyan.samllsheep.R;
+
+import java.util.List;
+import java.util.Locale;
+
+/**
+ * Created by realicing on 2018/11/1.
+ * realicing@sina.com
+ * 游戏评论adapter
+ */
+public class AdpGcGameAppComment extends BaseQuickAdapter<GameAppComment, BaseViewHolder> {
+    public AdpGcGameAppComment(List<GameAppComment> list) {
+        super(R.layout.item_gc_game_app_comment, list);
+    }
+
+    @Override
+    protected void convert(BaseViewHolder helper, GameAppComment item) {
+        int position = helper.getAdapterPosition() - getHeaderLayoutCount();
+        ImageView game_app_comment_user_avatar = helper.itemView.findViewById(R.id.game_app_comment_user_avatar);
+        TextView game_app_comment_user_name = helper.itemView.findViewById(R.id.game_app_comment_user_name);
+        AppCompatRatingBar game_app_comment_score = helper.itemView.findViewById(R.id.game_app_comment_score);
+        TextView game_app_comment_num1 = helper.itemView.findViewById(R.id.game_app_comment_num1);
+        TextView game_app_comment_num2 = helper.itemView.findViewById(R.id.game_app_comment_num2);
+        TextView game_app_comment_num3 = helper.itemView.findViewById(R.id.game_app_comment_num3);
+        View game_app_comment_line_top = helper.itemView.findViewById(R.id.game_app_comment_line_top);
+        ViewUtil.setVisibility(game_app_comment_line_top, position != 0);
+        if(item == null){
+            return;
+        }
+        ViewUtil.setAvatar(game_app_comment_user_avatar, item.getAvatar());
+        ViewUtil.setText(game_app_comment_user_name, String.format(Locale.CHINA, "%d %d %d %d", position, helper.getAdapterPosition(), helper.getLayoutPosition(), helper.getOldPosition()));
+        TextViewUtil.initIntroView(helper.itemView, item.getContent());
+    }
+}

+ 46 - 47
app/src/main/java/com/sheep/gamegroup/view/fragment/BaseListFragment3.java

@@ -1,16 +1,14 @@
 package com.sheep.gamegroup.view.fragment;
 
 import android.app.Activity;
-import android.support.v4.view.ViewPager;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.view.View;
-import android.view.ViewGroup;
 
 import com.scwang.smartrefresh.layout.SmartRefreshLayout;
-import com.sheep.gamegroup.model.api.ApiService;
 import com.sheep.gamegroup.absBase.ILoadMore;
 import com.sheep.gamegroup.absBase.IRefresh;
+import com.sheep.gamegroup.model.api.ApiService;
 import com.sheep.gamegroup.model.entity.BaseMessage;
 import com.sheep.gamegroup.model.util.SheepSubscriber;
 import com.sheep.gamegroup.util.CommonUtil;
@@ -20,7 +18,6 @@ import com.sheep.gamegroup.util.SysAppUtil;
 import com.sheep.jiuyan.samllsheep.R;
 import com.sheep.jiuyan.samllsheep.SheepApp;
 import com.sheep.jiuyan.samllsheep.base.BaseFragment;
-import com.sheep.jiuyan.samllsheep.utils.G;
 
 import java.util.List;
 
@@ -29,6 +26,7 @@ import rx.Observable;
 import rx.android.schedulers.AndroidSchedulers;
 import rx.functions.Action1;
 import rx.schedulers.Schedulers;
+
 /**
  * Created by realicing on 2018/10/9.
  * realicing@sina.com
@@ -41,6 +39,7 @@ public abstract class BaseListFragment3<T> extends BaseFragment implements IRefr
     }
 
     protected Activity activity;
+
     @Override
     public void onViewCreated() {
         activity = getActivity();
@@ -58,6 +57,7 @@ public abstract class BaseListFragment3<T> extends BaseFragment implements IRefr
                 break;
         }
     }
+
     @BindView(R.id.title)
     protected View title;
     @BindView(R.id.empty_view)
@@ -74,16 +74,20 @@ public abstract class BaseListFragment3<T> extends BaseFragment implements IRefr
     public void initView() {
         title.setVisibility(View.GONE);
     }
+
     public void initListener() {
         view_list.setLayoutManager(new LinearLayoutManager(SheepApp.getInstance()));
+        view_list.setHasFixedSize(true);
+        view_list.setNestedScrollingEnabled(false);
         view_list.setAdapter(getAdapter());
     }
+
     //加载更多数据
     public void loadMoreData() {
-        if(ListUtil.size(list) >= per_page*page){
+        if (ListUtil.size(list) >= per_page * page) {
             page += 1;
             initData();
-        }else {
+        } else {
             setNoMore(true);
         }
     }
@@ -91,13 +95,14 @@ public abstract class BaseListFragment3<T> extends BaseFragment implements IRefr
     //设置是否还有更多数据
     public void setNoMore(boolean noMore) {
         this.noMore = noMore;
-        if(smartRefreshLayout != null && getUserVisibleHint()) {
+        if (smartRefreshLayout != null && getUserVisibleHint()) {
             smartRefreshLayout.setNoMoreData(noMore);
         }
     }
+
     //加载完成时更新header或footer
     protected void refreshOrLoadMoreComplete() {
-        if(smartRefreshLayout != null && getUserVisibleHint()) {
+        if (smartRefreshLayout != null && getUserVisibleHint()) {
             if (page == 1) {
                 smartRefreshLayout.finishRefresh();
             } else {
@@ -105,16 +110,19 @@ public abstract class BaseListFragment3<T> extends BaseFragment implements IRefr
             }
         }
     }
+
     protected List<T> list = ListUtil.emptyList();
     protected List<T> lastCacheList = ListUtil.emptyList();
+
     //默认先获取缓存
-    protected boolean isFirstGetACache(){
+    protected boolean isFirstGetACache() {
         return true;
     }
+
     //加载数据
     public void initData() {
         final String urlKey = getKey(page, per_page);
-        if(isFirstGetACache()) {
+        if (isFirstGetACache()) {
             //先尝试获取缓存数据
             lastCacheList = DataUtil.getInstance().getCacheList(urlKey, getTClass());
             loadList(lastCacheList);
@@ -122,11 +130,11 @@ public abstract class BaseListFragment3<T> extends BaseFragment implements IRefr
         SysAppUtil.checkNet(new Action1<Integer>() {
             @Override
             public void call(Integer result) {
-                if(result != 0){//无网络
-                    if(check_net_ll != null)
+                if (result != 0) {//无网络
+                    if (check_net_ll != null)
                         check_net_ll.setVisibility(View.VISIBLE);
                 } else {
-                    if(check_net_ll != null)
+                    if (check_net_ll != null)
                         check_net_ll.setVisibility(View.GONE);
                 }
             }
@@ -139,12 +147,12 @@ public abstract class BaseListFragment3<T> extends BaseFragment implements IRefr
                     public void onNext(BaseMessage baseMessage) {
                         lastMessage = baseMessage;
                         boolean isNewData = DataUtil.getInstance().isNewData(urlKey);
-                        if(isNewData || !isFirstGetACache()) {
-                            if(isFirstGetACache())
+                        if (isNewData || !isFirstGetACache()) {
+                            if (isFirstGetACache())
                                 ListUtil.removeAll(list, lastCacheList);
                             List<T> newList = baseMessage.getDatas(getTClass());
                             loadList(newList);
-                        }else {
+                        } else {
                             notifyDataSetChanged();
                         }
                     }
@@ -160,98 +168,89 @@ public abstract class BaseListFragment3<T> extends BaseFragment implements IRefr
     @Override
     public void onResume() {
         super.onResume();
-        if(refreshDataType() == REFRESH_ON_RESUME){
+        if (refreshDataType() == REFRESH_ON_RESUME) {
             refreshData();
         }
     }
+
     public static final int REFRESH_ON_CREATE = 0;
     public static final int REFRESH_ON_RESUME = 1;
     public static final int REFRESH_ON_YOURSELF = -1;
+
     /**
      * 在哪里初始化数据:0 onViewCreated后, 1 onResume后, -1 不初始化
+     *
      * @return
      */
     public int refreshDataType() {
         return REFRESH_ON_CREATE;
     }
-    public void clear(){
+
+    public void clear() {
         lastMessage = null;
         setNoMore(false);
-        if(empty_view != null)
+        if (empty_view != null)
             empty_view.setVisibility(View.INVISIBLE);
         list.clear();
         page = 1;
     }
+
     //通过刷新来重新加载数据
-    public void refreshData(){
+    public void refreshData() {
         clear();
-        if(view_list != null)
+        if (view_list != null)
             view_list.getAdapter().notifyDataSetChanged();
         initData();
     }
+
     protected List<T> newList;
 
-    protected void loadList(List<T> addList){
+    protected void loadList(List<T> addList) {
         ListUtil.addAllItem(list, addList);
         newList = addList;
         notifyDataSetChanged();
     }
+
     //刷新数据
-    public void notifyDataSetChanged(){
-        if(view_list == null || empty_view == null){
+    public void notifyDataSetChanged() {
+        if (view_list == null || empty_view == null) {
             return;
         }
         updateEmptyView();
         view_list.getAdapter().notifyDataSetChanged();
         refreshOrLoadMoreComplete();
-        resetViewPagerHeight();
-    }
-    //重新设置ViewPager的高度
-    protected void resetViewPagerHeight() {
-        if(viewPager != null && getUserVisibleHint()){
-            int count = ListUtil.size(list);
-            ViewGroup.LayoutParams params = viewPager.getLayoutParams();
-            params.height = count == 0 ? G.HEIGHT / 2 : (count * getItemHeight());
-            viewPager.setLayoutParams(params);
-        }
     }
 
     @Override
     public void setUserVisibleHint(boolean isVisibleToUser) {
         super.setUserVisibleHint(isVisibleToUser);
-        resetViewPagerHeight();
-        if(smartRefreshLayout != null && getUserVisibleHint()) {
+        if (smartRefreshLayout != null && getUserVisibleHint()) {
             smartRefreshLayout.setNoMoreData(noMore);
         }
     }
-    protected abstract int getItemHeight();
 
     //是否显示无数据占位图
-    protected void updateEmptyView(){
+    protected void updateEmptyView() {
         CommonUtil.getInstance().updateEmptyView(empty_view, list.isEmpty());
     }
 
     protected boolean noMore = false;
+
     public boolean isNoMore() {
         return noMore;
     }
+
     protected abstract RecyclerView.Adapter getAdapter();
+
     protected abstract String getKey(int page, int per_page);
+
     protected abstract Observable<BaseMessage> getApi(ApiService apiService);
+
     protected abstract Class<T> getTClass();
 
 
-    protected ViewPager viewPager;
     protected SmartRefreshLayout smartRefreshLayout;
 
-    public ViewPager getViewPager() {
-        return viewPager;
-    }
-
-    public void setViewPager(ViewPager viewPager) {
-        this.viewPager = viewPager;
-    }
-
     public SmartRefreshLayout getSmartRefreshLayout() {
         return smartRefreshLayout;
     }

+ 194 - 0
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtGcGameAppComment.java

@@ -0,0 +1,194 @@
+package com.sheep.gamegroup.view.fragment;
+
+import android.support.annotation.NonNull;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ProgressBar;
+import android.widget.RatingBar;
+import android.widget.TextView;
+
+import com.kfzs.appstore.utils.adapter.recyclerview.RecyclerViewAdapter;
+import com.kfzs.appstore.utils.adapter.recyclerview.ViewHolder;
+import com.sheep.gamegroup.model.api.ApiService;
+import com.sheep.gamegroup.model.entity.BaseMessage;
+import com.sheep.gamegroup.model.entity.GameAppScore;
+import com.sheep.gamegroup.model.entity.GameApp;
+import com.sheep.gamegroup.model.entity.GameAppComment;
+import com.sheep.gamegroup.model.entity.GameEntity;
+import com.sheep.gamegroup.model.util.SheepSubscriber;
+import com.sheep.gamegroup.util.CommonUtil;
+import com.sheep.gamegroup.util.DataUtil;
+import com.sheep.gamegroup.util.ListUtil;
+import com.sheep.gamegroup.util.ViewUtil;
+import com.sheep.gamegroup.view.adapter.AdpGcGameAppComment;
+import com.sheep.jiuyan.samllsheep.R;
+import com.sheep.jiuyan.samllsheep.SheepApp;
+import com.sheep.jiuyan.samllsheep.utils.G;
+
+import org.afinal.simplecache.ApiKey;
+
+import java.text.DecimalFormat;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Locale;
+
+import cn.modificator.waterwave_progress.WaterWaveProgress;
+import rx.Observable;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.schedulers.Schedulers;
+
+/**
+ * Created by realicing on 2018/11/1.
+ * realicing@sina.com
+ * 玩转游戏 评价
+ */
+public class FgtGcGameAppComment extends BaseListFragment3<GameAppComment> {
+
+
+    public static FgtGcGameAppComment newInstance(int appId) {
+        FgtGcGameAppComment fgt = new FgtGcGameAppComment();
+        fgt.appId = appId;
+        return fgt;
+    }
+
+//    @Override
+//    public int refreshDataType() {
+//        return REFRESH_ON_YOURSELF;
+//    }
+
+    private int appId;
+
+    private List<GameAppScore> scoreList = ListUtil.emptyList();
+    //头部view
+    private View headerView;
+    private WaterWaveProgress circularProgressView;
+    private RatingBar header_gc_game_app_comment_score;
+    private RecyclerView header_gc_game_app_comment_xin_list;
+    @Override
+    protected RecyclerView.Adapter getAdapter() {
+        AdpGcGameAppComment adapter = new AdpGcGameAppComment(list);
+        headerView = LayoutInflater.from(SheepApp.getInstance()).inflate(R.layout.header_gc_game_app_comment, null);
+        circularProgressView = headerView.findViewById(R.id.header_gc_game_app_comment_score_progress);
+        header_gc_game_app_comment_score = headerView.findViewById(R.id.header_gc_game_app_comment_score);
+
+        //评分列表
+        resetGameAppScoreNum();
+        header_gc_game_app_comment_xin_list = headerView.findViewById(R.id.header_gc_game_app_comment_xin_list);
+        header_gc_game_app_comment_xin_list.setHasFixedSize(true);
+        header_gc_game_app_comment_xin_list.setNestedScrollingEnabled(false);
+        header_gc_game_app_comment_xin_list.setLayoutManager(new LinearLayoutManager(SheepApp.getInstance()));
+        header_gc_game_app_comment_xin_list.setAdapter(new RecyclerViewAdapter<GameAppScore>(SheepApp.getInstance(), R.layout.item_xin_progress, scoreList) {
+            @Override
+            public void convert(ViewHolder viewHolder, GameAppScore item, int position) {
+                TextView item_xin_progress_tv = viewHolder.itemView.findViewById(R.id.item_xin_progress_tv);
+                ProgressBar item_xin_progress = viewHolder.itemView.findViewById(R.id.item_xin_progress);
+                ViewUtil.setText(item_xin_progress_tv, item.getStar());
+                item_xin_progress.setProgress(item.getNum());
+            }
+        });
+        adapter.addHeaderView(headerView);
+        initAppScoreNum();
+        return adapter;
+    }
+
+    @Override
+    protected String getKey(int page, int per_page) {
+        return String.format(Locale.CHINA, "app/find?page=%d&per_page=%d&name=%s&type=%d", page, per_page, "", 0);
+    }
+
+    @Override
+    protected Observable<BaseMessage> getApi(ApiService apiService) {
+        return apiService.searchApp(page, per_page, "", 0);
+    }
+
+    @Override
+    protected Class<GameAppComment> getTClass() {
+        return GameAppComment.class;
+    }
+
+    public void loadData(GameEntity gameEntity) {
+        GameApp gameApp;
+        if((gameApp = gameEntity.getApp()) != null) {
+            int progress = (int) (gameApp.getScore() * 10);
+            //显示评分
+            if (circularProgressView != null) {
+                circularProgressView.setProgress(progress);
+                circularProgressView.setText(new DecimalFormat("0.0").format(gameApp.getScore()));
+            }
+            if (header_gc_game_app_comment_score != null) {
+                header_gc_game_app_comment_score.setProgress(progress);
+            }
+        }
+    }
+    //评分排序方法
+    private Comparator<GameAppScore> scoreComparable = new Comparator<GameAppScore>() {
+        @Override
+        public int compare(GameAppScore item1, GameAppScore item2) {
+            return item2.getStar() - item1.getStar();
+        }
+    };
+    //加载评分列表
+    private void initAppScoreNum() {
+        scoreList.clear();
+        List<GameAppScore> aCacheScoreList = DataUtil.getInstance().getCacheList(ApiKey.score_num(appId), GameAppScore.class);
+        if (!ListUtil.isEmpty(aCacheScoreList)) {
+            scoreList.addAll(aCacheScoreList);
+            Collections.sort(scoreList, scoreComparable);
+        }
+        notifyHeaderDataSetChanged();
+        SheepApp.getInstance().getNetComponent().getApiService().getAppScoreNum(appId)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
+                    @Override
+                    public void onNext(BaseMessage baseMessage) {
+                        scoreList.clear();
+                        List<GameAppScore> newScoreList = baseMessage.getDataList(GameAppScore.class);
+                        if (ListUtil.isEmpty(newScoreList))
+                            resetGameAppScoreNum();
+                        else {
+                            scoreList.addAll(newScoreList);
+                            Collections.sort(scoreList, scoreComparable);
+                        }
+                        notifyHeaderDataSetChanged();
+                    }
+
+                    @Override
+                    public void onError(BaseMessage baseMessage) {
+                        resetGameAppScoreNum();
+                        notifyHeaderDataSetChanged();
+                    }
+                });
+    }
+    //刷新头部view
+    private void notifyHeaderDataSetChanged() {
+        if(header_gc_game_app_comment_xin_list != null)
+            header_gc_game_app_comment_xin_list.getAdapter().notifyDataSetChanged();
+
+        if(empty_view != null) {
+            empty_view.postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    if (headerView != null) {
+                        int height = headerView.getHeight();
+                        CommonUtil.getInstance().setEmptyViewMargin(empty_view, (int) (height * 0.9), (int) (height * 0.3));
+                    }
+                }
+            }, 100L);
+        }
+    }
+
+    //重置评分列表
+    private void resetGameAppScoreNum() {
+        for (int i = 0; i < 5; i++) {//5星满分
+            GameAppScore item = new GameAppScore();
+            item.setNum(0);
+            item.setStar(5 - i);
+            scoreList.add(item);
+        }
+    }
+
+}

+ 5 - 28
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtGcGameAppDetail.java

@@ -49,8 +49,10 @@ public class FgtGcGameAppDetail extends BaseFragment {
 
     private Activity activity;
 
-    public static FgtGcGameAppDetail newInstance() {
-        return new FgtGcGameAppDetail();
+    public static FgtGcGameAppDetail newInstance(int appId) {
+        FgtGcGameAppDetail fgt = new FgtGcGameAppDetail();
+        fgt.appId = appId;
+        return fgt;
     }
 
     @Override
@@ -93,28 +95,7 @@ public class FgtGcGameAppDetail extends BaseFragment {
             gameInfoListArrayList.add(new GameInfoList("游戏介绍", new RecyclerViewAdapter<String>(SheepApp.getInstance(), R.layout.item_gc_game_app_intro, ListUtil.asList(intro)) {
                 @Override
                 public void convert(ViewHolder viewHolder, String text, int position) {
-                    final TextView item_gc_game_app_intro_tv = viewHolder.itemView.findViewById(R.id.item_gc_game_app_intro_tv);
-                    final TextView item_gc_game_app_intro_show_all = viewHolder.itemView.findViewById(R.id.item_gc_game_app_intro_show_all);
-                    final View item_gc_game_app_intro_show_all_no = viewHolder.itemView.findViewById(R.id.item_gc_game_app_intro_show_all_no);
-                    TextViewUtil.listenEllipsizeChange(item_gc_game_app_intro_tv, new Action1<Integer>() {
-                        @Override
-                        public void call(Integer integer) {
-                            if (integer > 0) {
-                                ViewUtil.setVisibility(item_gc_game_app_intro_show_all, true);
-                                ViewUtil.setVisibility(item_gc_game_app_intro_show_all_no, false);
-                            }
-                        }
-                    });
-                    item_gc_game_app_intro_show_all.setOnClickListener(new View.OnClickListener() {
-                        @Override
-                        public void onClick(View view) {
-                            boolean canShowAll = item_gc_game_app_intro_tv.getMaxLines() == 3;
-                            item_gc_game_app_intro_tv.setMaxLines(canShowAll ? Integer.MAX_VALUE : 3);
-                            item_gc_game_app_intro_tv.setEllipsize(canShowAll ? null : TextUtils.TruncateAt.END);
-                            item_gc_game_app_intro_show_all.setText(canShowAll ? "显示全部" : "收起");
-                        }
-                    });
-                    ViewUtil.setText(item_gc_game_app_intro_tv, text);
+                    TextViewUtil.initIntroView(viewHolder.itemView, text);
                 }
             }));
         }
@@ -201,9 +182,5 @@ public class FgtGcGameAppDetail extends BaseFragment {
 
     private int appId;
 
-    public void setAppId(int appId) {
-        this.appId = appId;
-    }
-
 
 }

+ 41 - 0
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtGcGameAppWelfare.java

@@ -0,0 +1,41 @@
+package com.sheep.gamegroup.view.fragment;
+
+import android.app.Activity;
+
+import com.sheep.gamegroup.model.entity.GameEntity;
+import com.sheep.jiuyan.samllsheep.R;
+import com.sheep.jiuyan.samllsheep.base.BaseFragment;
+
+/**
+ * Created by realicing on 2018/11/1.
+ * realicing@sina.com
+ * 玩转游戏 福利
+ */
+public class FgtGcGameAppWelfare extends BaseFragment {
+
+    private Activity activity;
+
+    public static FgtGcGameAppWelfare newInstance(int appId) {
+        FgtGcGameAppWelfare fgt = new FgtGcGameAppWelfare();
+        fgt.appId = appId;
+        return fgt;
+    }
+
+    @Override
+    public int getLayoutId() {
+        return R.layout.fgt_gc_game_app_detail;
+    }
+
+
+    @Override
+    public void onViewCreated() {
+        activity = getActivity();
+    }
+
+
+    private int appId;
+
+
+    public void loadData(GameEntity gameEntity) {
+    }
+}

app/src/main/res/drawable-xhdpi/Bulletwindow.webp → app/src/main/res/drawable-xhdpi/bulletwindow.webp


app/src/main/res/drawable-xxhdpi/Bulletwindow.webp → app/src/main/res/drawable-xxhdpi/bulletwindow.webp


app/src/main/res/drawable-xxxhdpi/Bulletwindow.webp → app/src/main/res/drawable-xxxhdpi/bulletwindow.webp


+ 41 - 0
app/src/main/res/drawable/lay_list_progress_yellow.xml

@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item android:id="@android:id/background">
+        <shape>
+            <corners android:radius="5dip" />
+            <stroke
+                android:width="1dp"
+                android:color="#F4F4F4"/>
+        </shape>
+    </item>
+
+    <item android:id="@android:id/secondaryProgress">
+        <clip>
+            <shape>
+                <corners android:radius="5dip" />
+                <gradient
+                    android:angle="270"
+                    android:centerColor="#8000ae7c"
+                    android:centerY="0.75"
+                    android:endColor="#a000be7c"
+                    android:startColor="#8000ce7c" />
+            </shape>
+        </clip>
+    </item>
+
+    <item android:id="@android:id/progress">
+        <clip>
+            <shape>
+                <corners android:radius="5dip" />
+                <gradient
+                    android:angle="270"
+                    android:centerColor="#FFCC33"
+                    android:centerY="0.75"
+                    android:endColor="#FDB811"
+                    android:startColor="#FCD586" />
+            </shape>
+        </clip>
+    </item>
+
+</layer-list>

+ 84 - 0
app/src/main/res/layout/header_gc_game_app_comment.xml

@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+
+    <TextView
+        android:id="@+id/header_gc_game_app_comment_title_score"
+        style="@style/style_wc_line_title"
+        android:layout_marginStart="15dp"
+        android:layout_marginTop="18dp"
+        android:text="游戏评分"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <android.support.v7.widget.RecyclerView
+        android:id="@+id/header_gc_game_app_comment_xin_list"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="4dp"
+        android:layout_marginEnd="27dp"
+        android:minHeight="70dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/header_gc_game_app_comment_title_score" />
+
+    <LinearLayout
+        android:id="@+id/header_gc_game_app_comment_score_progress_ll"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="33dp"
+        android:gravity="center_horizontal"
+        android:orientation="vertical"
+        app:layout_constraintBottom_toBottomOf="@id/header_gc_game_app_comment_xin_list"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="@id/header_gc_game_app_comment_xin_list">
+
+        <cn.modificator.waterwave_progress.WaterWaveProgress
+            android:id="@+id/header_gc_game_app_comment_score_progress"
+            android:layout_width="57dp"
+            android:layout_height="57dp"
+            app:fontSize="18sp"
+            app:maxProgress="100"
+            app:progress="15"
+            app:progressBgColor="#F5F5F5"
+            app:progressColor="#FFBF00"
+            app:progressWidth="5dp"
+            app:showNumerical="true"
+            app:showProgress="true"
+            app:textColor="#FFBF00"
+            app:waterWaveBgColor="#ffffff"
+            app:waterWaveColor="#ffffff" />
+
+        <android.support.v7.widget.AppCompatRatingBar
+            android:id="@+id/header_gc_game_app_comment_score"
+            style="@style/style_rating_bar"
+            android:layout_width="wrap_content"
+            android:layout_marginTop="4dp"
+            android:isIndicator="true"
+            android:numStars="5"
+            android:rating="0"
+            android:stepSize="0.5" />
+
+    </LinearLayout>
+
+
+    <View
+        android:id="@+id/header_gc_game_app_comment_line"
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:layout_marginStart="25dp"
+        android:layout_marginTop="21dp"
+        android:layout_marginEnd="25dp"
+        android:background="#fff2f2f2"
+        app:layout_constraintTop_toBottomOf="@id/header_gc_game_app_comment_xin_list" />
+
+    <TextView
+        android:id="@+id/header_gc_game_app_comment_title_comment"
+        style="@style/style_wc_line_title"
+        android:layout_marginTop="21dp"
+        android:text="用户评价"
+        app:layout_constraintStart_toStartOf="@id/header_gc_game_app_comment_title_score"
+        app:layout_constraintTop_toBottomOf="@id/header_gc_game_app_comment_line" />
+</android.support.constraint.ConstraintLayout>

+ 119 - 0
app/src/main/res/layout/item_gc_game_app_comment.xml

@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <View
+        android:id="@+id/game_app_comment_line_top"
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:layout_marginStart="25dp"
+        android:layout_marginEnd="25dp"
+        android:background="#fff2f2f2"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <ImageView
+        android:id="@+id/game_app_comment_user_avatar"
+        android:layout_width="40dp"
+        android:layout_height="40dp"
+        android:layout_marginStart="16dp"
+        android:layout_marginTop="20dp"
+        android:src="@drawable/icon"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="@id/game_app_comment_line_top" />
+
+    <TextView
+        android:id="@+id/game_app_comment_user_name"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="16dp"
+        android:layout_marginEnd="16dp"
+        android:text="栗子的菜"
+        android:textColor="#ff333333"
+        android:textSize="13sp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toEndOf="@id/game_app_comment_user_avatar"
+        app:layout_constraintTop_toTopOf="@id/game_app_comment_user_avatar" />
+
+    <android.support.v7.widget.AppCompatRatingBar
+        android:id="@+id/game_app_comment_score"
+        style="@style/style_rating_bar"
+        android:layout_width="wrap_content"
+        android:isIndicator="true"
+        android:numStars="5"
+        android:rating="0"
+        android:stepSize="0.5"
+        app:layout_constraintBottom_toBottomOf="@+id/game_app_comment_user_avatar"
+        app:layout_constraintStart_toStartOf="@id/game_app_comment_user_name" />
+
+    <TextView
+        android:id="@+id/intro_content"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:ellipsize="end"
+        android:lineSpacingMultiplier="1.3"
+        android:maxLines="3"
+        android:paddingStart="16dp"
+        android:paddingTop="13dp"
+        android:paddingEnd="16dp"
+        android:paddingBottom="10dp"
+        android:text="《永恒仙域》经典仙侠梦想,高清3DMMORPG手游,继承同类型游戏的经典游戏模式,更加酷炫的游戏画面与动作特效,精心构建出这个瑰丽的东方式仙侠世界。《永恒仙域》经典仙侠梦想,高清3DMMORPG手游,继承同类型游戏的经典游戏模式,更加酷炫的游戏画面与动作特效,精心构建出这个瑰丽的东方式仙侠世界。"
+        android:textColor="#ff666666"
+        android:textSize="12sp"
+        app:layout_constraintTop_toBottomOf="@id/game_app_comment_user_avatar" />
+
+    <TextView
+        android:id="@+id/intro_show_all"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:padding="6dp"
+        android:text="显示全部"
+        android:textColor="#ff4bc1ff"
+        android:textSize="12sp"
+        android:visibility="gone"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/intro_content" />
+
+    <TextView
+        android:id="@+id/game_app_comment_num1"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="14dp"
+        android:layout_marginBottom="20dp"
+        android:layout_marginEnd="27dp"
+        android:drawableStart="@drawable/ic_but_speak"
+        android:drawablePadding="4dp"
+        android:text="54"
+        android:textColor="#ff666666"
+        android:textSize="11sp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/intro_show_all"
+        app:layout_constraintBottom_toBottomOf="parent"/>
+
+    <TextView
+        android:id="@+id/game_app_comment_num2"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="17dp"
+        android:drawableStart="@drawable/ic_but_up"
+        android:text="54"
+        android:textColor="#ff666666"
+        android:textSize="11sp"
+        app:layout_constraintEnd_toStartOf="@id/game_app_comment_num1"
+        app:layout_constraintTop_toTopOf="@+id/game_app_comment_num1" />
+
+    <TextView
+        android:id="@+id/game_app_comment_num3"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="17dp"
+        android:drawableStart="@drawable/ic_image_xiao"
+        android:text="54"
+        android:textColor="#ff666666"
+        android:textSize="11sp"
+        app:layout_constraintEnd_toStartOf="@id/game_app_comment_num2"
+        app:layout_constraintTop_toTopOf="@+id/game_app_comment_num1" />
+
+</android.support.constraint.ConstraintLayout>

+ 4 - 4
app/src/main/res/layout/item_gc_game_app_intro.xml

@@ -7,7 +7,7 @@
     android:paddingBottom="7dp">
 
     <TextView
-        android:id="@+id/item_gc_game_app_intro_tv"
+        android:id="@+id/intro_content"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:ellipsize="end"
@@ -20,7 +20,7 @@
         android:textSize="12sp" />
 
     <TextView
-        android:id="@+id/item_gc_game_app_intro_show_all"
+        android:id="@+id/intro_show_all"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:padding="13dp"
@@ -29,9 +29,9 @@
         android:visibility="gone"
         android:textColor="#ff4bc1ff"
         android:textSize="12sp" />
-    <!--item_gc_game_app_intro_no_show_all 与 item_gc_game_app_intro_show_all两者必须显示一个,隐藏另一个-->
+    <!--item_gc_game_app_intro_no_show_all 与 intro_show_all两者必须显示一个,隐藏另一个-->
     <View
-        android:id="@+id/item_gc_game_app_intro_show_all_no"
+        android:id="@+id/intro_show_all_no"
         android:layout_width="wrap_content"
         android:layout_height="13dp"/>
 </LinearLayout>

+ 34 - 0
app/src/main/res/layout/item_xin_progress.xml

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:gravity="center_vertical"
+    android:orientation="horizontal"
+    android:paddingTop="5dp"
+    android:paddingBottom="5dp">
+
+    <TextView
+        android:id="@+id/item_xin_progress_tv"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="1"
+        android:textColor="@color/black_6_3"
+        android:textSize="13sp" />
+
+    <ImageView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="6dp"
+        android:src="@drawable/xin_full" />
+
+    <ProgressBar
+        android:id="@+id/item_xin_progress"
+        style="?android:attr/progressBarStyleHorizontal"
+        android:layout_width="152dp"
+        android:layout_height="10dp"
+        android:layout_marginStart="5dp"
+        android:max="100"
+        android:progress="50"
+        android:progressDrawable="@drawable/lay_list_progress_yellow" />
+
+</LinearLayout>

+ 1 - 1
app/src/main/res/values/dd_styles.xml

@@ -412,7 +412,7 @@
         <item name="android:layout_width">wrap_content</item>
         <item name="android:layout_height">wrap_content</item>
         <item name="android:drawablePadding">@dimen/content_padding_default</item>
-        <item name="android:drawableStart">?line_short</item>
+        <item name="android:drawableStart">@drawable/sp_line_vertical</item>
         <item name="android:gravity">center_vertical</item>
         <item name="android:textColor">#2c2c2c</item>
         <item name="android:textSize">15sp</item>

+ 1 - 1
settings.gradle

@@ -1 +1 @@
-include ':app', ':view', ':ucrop'//, ':Aria', ':datashare', ':AriaAnnotations'
+include ':app', ':view', ':ucrop', ':WaterWaveProgress'//, ':Aria', ':datashare', ':AriaAnnotations'