Przeglądaj źródła

添加视频详情所有功能

zengjiebin 7 lat temu
rodzic
commit
b4944336b0
39 zmienionych plików z 1451 dodań i 42 usunięć
  1. 5 0
      app/src/main/AndroidManifest.xml
  2. 6 1
      app/src/main/java/com/lqr/emoji/EmotionKeyboard.java
  3. 35 4
      app/src/main/java/com/sheep/gamegroup/model/api/ApiService.java
  4. 47 0
      app/src/main/java/com/sheep/gamegroup/model/entity/DiscoveryTopic.java
  5. 27 1
      app/src/main/java/com/sheep/gamegroup/model/entity/DiscoveryVideo.java
  6. 2 1
      app/src/main/java/com/sheep/gamegroup/util/ApiJSONUtil.java
  7. 14 0
      app/src/main/java/com/sheep/gamegroup/util/ApiUtil.java
  8. 12 0
      app/src/main/java/com/sheep/gamegroup/util/Jump2View.java
  9. 28 1
      app/src/main/java/com/sheep/gamegroup/util/ViewUtil.java
  10. 534 0
      app/src/main/java/com/sheep/gamegroup/view/activity/ActPlayVideoArticle.java
  11. 44 27
      app/src/main/java/com/sheep/gamegroup/view/adapter/AdpArticleComment.java
  12. 1 1
      app/src/main/java/com/sheep/gamegroup/view/adapter/AdpVideo.java
  13. 9 4
      app/src/main/java/com/sheep/gamegroup/view/fragment/FgtArticleComment.java
  14. 2 0
      app/src/main/java/com/sheep/gamegroup/view/fragment/FgtFind.java
  15. 3 2
      app/src/main/java/com/sheep/gamegroup/view/fragment/FgtGcGameAppComment.java
  16. 180 0
      app/src/main/java/com/sheep/gamegroup/view/fragment/FgtVideoComment.java
  17. 6 0
      app/src/main/java/org/afinal/simplecache/ApiKey.java
  18. 8 0
      app/src/main/res/drawable/selector_focus.xml
  19. 8 0
      app/src/main/res/drawable/selector_like.xml
  20. 6 0
      app/src/main/res/drawable/shape_33_solid_rectangle_15.xml
  21. 8 0
      app/src/main/res/drawable/shape_solid_black_80_top_radius_7.xml
  22. 36 0
      app/src/main/res/layout/act_play_video_article.xml
  23. 62 0
      app/src/main/res/layout/fgt_video_comment.xml
  24. 1 0
      app/src/main/res/layout/header_act_article.xml
  25. 68 0
      app/src/main/res/layout/include_article_video_bottom.xml
  26. 51 0
      app/src/main/res/layout/include_article_video_top.xml
  27. 24 0
      app/src/main/res/layout/include_empty.xml
  28. 53 0
      app/src/main/res/layout/include_input_comment_video.xml
  29. 62 0
      app/src/main/res/layout/include_video_comment.xml
  30. 107 0
      app/src/main/res/layout/item_video_comment.xml
  31. BIN
      app/src/main/res/mipmap-xxhdpi/ic_6.webp
  32. BIN
      app/src/main/res/mipmap-xxhdpi/ic_comment.webp
  33. BIN
      app/src/main/res/mipmap-xxhdpi/ic_comment_small.png
  34. BIN
      app/src/main/res/mipmap-xxhdpi/ic_focus_no.webp
  35. BIN
      app/src/main/res/mipmap-xxhdpi/ic_focus_yes.webp
  36. BIN
      app/src/main/res/mipmap-xxhdpi/ic_like.webp
  37. BIN
      app/src/main/res/mipmap-xxhdpi/ic_like_select.webp
  38. BIN
      app/src/main/res/mipmap-xxhdpi/ic_x_white.webp
  39. 2 0
      app/src/main/res/values/strings.xml

+ 5 - 0
app/src/main/AndroidManifest.xml

@@ -443,6 +443,11 @@
             android:screenOrientation="user"
             android:theme="@style/AppTheme.noTitleBar" />
         <activity
+            android:name="com.sheep.gamegroup.view.activity.ActPlayVideoArticle"
+            android:configChanges="orientation|keyboardHidden|navigation|screenSize"
+            android:screenOrientation="user"
+            android:theme="@style/AppTheme.noTitleBar" />
+        <activity
             android:name="com.sheep.gamegroup.view.activity.ActInputAndPickerImg"
             android:theme="@style/AppTheme.translucent" />
 

+ 6 - 1
app/src/main/java/com/lqr/emoji/EmotionKeyboard.java

@@ -88,6 +88,11 @@ public class EmotionKeyboard {
         }
         return this;
     }
+    private boolean showSoftInputWhenHideEmotion = true;
+
+    public void setShowSoftInputWhenHideEmotion(boolean showSoftInputWhenHideEmotion) {
+        this.showSoftInputWhenHideEmotion = showSoftInputWhenHideEmotion;
+    }
 
     private View.OnClickListener getOnEmotionButtonOnClickListener() {
         return new View.OnClickListener() {
@@ -101,7 +106,7 @@ public class EmotionKeyboard {
 
                 if (mEmotionLayout.isShown()) {
                     lockContentHeight();//显示软件盘时,锁定内容高度,防止跳闪。
-                    hideEmotionLayout(true);//隐藏表情布局,显示软件盘
+                    hideEmotionLayout(showSoftInputWhenHideEmotion);//隐藏表情布局,显示软件盘
                     unlockContentHeightDelayed();//软件盘显示后,释放内容高度
                 } else {
                     if (isSoftInputShown()) {//同上

+ 35 - 4
app/src/main/java/com/sheep/gamegroup/model/api/ApiService.java

@@ -1481,21 +1481,52 @@ public interface ApiService {
 //---------------------------start 小绵羊3.4.5 视频-------------------------------------
 
     /**
+     * 小绵羊3.4.5新增 -- 用户视频发布
+     * UserAddressReqUserAddressReq
+     */
+    @POST("app/video")
+    Observable<BaseMessage> postVideo(@Body JSONObject jsonObject);
+    /**
+     * 小绵羊3.4.5新增 -- 查询视频详情
+     * video_id * integer (query) 视频id
+     */
+    @GET("app/video/detail")
+    Observable<BaseMessage> getVideoDetail(@Query("video_id") int video_id);
+    /**
+     * 小绵羊3.4.5新增 -- 视频点赞
+     */
+    @POST("app/video/like")
+    Observable<BaseMessage> postVideoLike(@Query("video_id") int video_id);
+    /**
      * 小绵羊3.4.5新增 -- 查询视频列表
      */
     @GET(ApiKey.getVideoList)
     Observable<BaseMessage> getVideoList(@Query("page") int page, @Query("per_page") int per_page);
     /**
+     * 小绵羊3.4.5新增 -- 查询音乐列表
+     */
+    @GET(ApiKey.getVideoMusic)
+    Observable<BaseMessage> getVideoMusic();
+    /**
+     * 小绵羊3.4.5新增 -- 视频分享回调
+     */
+    @POST("app/video/share")
+    Observable<BaseMessage> postVideoShare(@Query("video_id") int video_id);
+    /**
+     * 小绵羊3.4.5新增 -- 查询贴纸列表
+     */
+    @GET(ApiKey.getVideoSticker)
+    Observable<BaseMessage> getVideoSticker();
+    /**
      * 小绵羊3.4.5新增 -- 获取七牛上传凭证
      */
     @GET("app/video/token")
     Observable<BaseMessage> getVideoToken();
     /**
-     * 小绵羊3.4.5新增 -- 用户视频发布
-     * UserAddressReqUserAddressReq
+     * 小绵羊3.4.5新增 -- 查询话题列表
      */
-    @POST("app/video")
-    Observable<BaseMessage> postVideo(@Body JSONObject jsonObject);
+    @GET(ApiKey.getVideoTopic)
+    Observable<BaseMessage> getVideoTopic();
 //---------------------------end 小绵羊3.4.5 视频-------------------------------------
 
 }

+ 47 - 0
app/src/main/java/com/sheep/gamegroup/model/entity/DiscoveryTopic.java

@@ -0,0 +1,47 @@
+package com.sheep.gamegroup.model.entity;
+
+/**
+ * Created by realicing on 2018/11/28.
+ * realicing@sina.com
+ * 小绵羊3.4.5新增 -- 发现话题
+ *
+ * create_time:	integer ($int64)
+ * id:	integer ($int64)
+ * topic:	string
+ * 话题
+ * update_time:	integer ($int64)
+ */
+public class DiscoveryTopic {
+    private int create_time;
+
+    private int id;
+
+    private String topic;
+
+    private int update_time;
+
+    public void setCreate_time(int create_time){
+        this.create_time = create_time;
+    }
+    public int getCreate_time(){
+        return this.create_time;
+    }
+    public void setId(int id){
+        this.id = id;
+    }
+    public int getId(){
+        return this.id;
+    }
+    public void setTopic(String topic){
+        this.topic = topic;
+    }
+    public String getTopic(){
+        return this.topic;
+    }
+    public void setUpdate_time(int update_time){
+        this.update_time = update_time;
+    }
+    public int getUpdate_time(){
+        return this.update_time;
+    }
+}

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

@@ -1,5 +1,7 @@
 package com.sheep.gamegroup.model.entity;
 
+import java.io.Serializable;
+
 /**
  * Created by realicing on 2018/11/27.
  * realicing@sina.com
@@ -40,8 +42,9 @@ package com.sheep.gamegroup.model.entity;
  * 评论数
  * share:	integer ($int64)
  * 分享数
+ * avatar:	string 头像
  */
-public class DiscoveryVideo {
+public class DiscoveryVideo implements Serializable {
     private int comment;
 
     private String cover;
@@ -80,6 +83,10 @@ public class DiscoveryVideo {
 
     private int user_id;
 
+    private String avatar;
+
+    private boolean is_focus_user;
+
     public void setComment(int comment){
         this.comment = comment;
     }
@@ -195,4 +202,23 @@ public class DiscoveryVideo {
         return this.user_id;
     }
 
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public boolean isIs_like() {
+        return is_like;
+    }
+
+    public boolean isIs_focus_user() {
+        return is_focus_user;
+    }
+
+    public void setIs_focus_user(boolean is_focus) {
+        this.is_focus_user = is_focus_user;
+    }
 }

+ 2 - 1
app/src/main/java/com/sheep/gamegroup/util/ApiJSONUtil.java

@@ -21,7 +21,8 @@ import io.reactivex.schedulers.Schedulers;
 public class ApiJSONUtil {
     public static final int COMMENT_TYPE_GAME = 1;
     public static final int COMMENT_TYPE_ARTICLE = 2;
-    @IntDef({COMMENT_TYPE_GAME, COMMENT_TYPE_ARTICLE})
+    public static final int COMMENT_TYPE_VIDEO = 3;
+    @IntDef({COMMENT_TYPE_GAME, COMMENT_TYPE_ARTICLE, COMMENT_TYPE_VIDEO})
     @Retention(RetentionPolicy.SOURCE)
     public @interface COMMENT_TYPE {
     }

+ 14 - 0
app/src/main/java/com/sheep/gamegroup/util/ApiUtil.java

@@ -66,6 +66,20 @@ public class ApiUtil {
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribe(sheepSubscriber);
     }
+    //视频 点赞
+    public static void postVideoLike(int video_id, SheepSubscriber<BaseMessage> sheepSubscriber) {
+        SheepApp.getInstance().getNetComponent().getApiService().postVideoLike(video_id)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(sheepSubscriber);
+    }
+    //视频 分享回调
+    public static void postVideoShare(int video_id) {
+        SheepApp.getInstance().getNetComponent().getApiService().postVideoShare(video_id)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new AbsObserver<BaseMessage>(){});
+    }
 
     //关于我们,直接返回联系电话
     public static void getNewAboutUsComplainQq(final Action1<String> action1) {

+ 12 - 0
app/src/main/java/com/sheep/gamegroup/util/Jump2View.java

@@ -28,6 +28,7 @@ import com.sheep.gamegroup.model.entity.Container;
 import com.sheep.gamegroup.model.entity.CreditCard;
 import com.sheep.gamegroup.model.entity.DialogConfig;
 import com.sheep.gamegroup.model.entity.DialogEntity;
+import com.sheep.gamegroup.model.entity.DiscoveryVideo;
 import com.sheep.gamegroup.model.entity.GameListTag;
 import com.sheep.gamegroup.model.entity.GameListType;
 import com.sheep.gamegroup.model.entity.HomeListEntity;
@@ -84,6 +85,7 @@ import com.sheep.gamegroup.view.activity.ActPlayGameList;
 import com.sheep.gamegroup.view.activity.ActPlayGameRecommendList;
 import com.sheep.gamegroup.view.activity.ActPlayGameUserLikeList;
 import com.sheep.gamegroup.view.activity.ActPlayVideo;
+import com.sheep.gamegroup.view.activity.ActPlayVideoArticle;
 import com.sheep.gamegroup.view.activity.ActPublishArticle;
 import com.sheep.gamegroup.view.activity.ActReservation;
 import com.sheep.gamegroup.view.activity.ActSearchApp;
@@ -150,6 +152,7 @@ import org.afinal.simplecache.DataKey;
 import org.xutils.ex.DbException;
 
 import java.io.File;
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
@@ -2243,6 +2246,15 @@ public class Jump2View {
         }
         activity.startActivity(DataUtil.putObject(new Intent(activity, ActPlayVideo.class), url));
     }
+    /**
+     * 播放视频
+     *
+     * @param item 视频对象
+     */
+    public void goActPlayVideoArticle(Serializable item) {
+        Activity activity = ActivityManager.getInstance().currentActivity();
+        activity.startActivity(DataUtil.putObject(new Intent(activity, ActPlayVideoArticle.class), item));
+    }
 
     /**
      * 提交自定义字段

+ 28 - 1
app/src/main/java/com/sheep/gamegroup/util/ViewUtil.java

@@ -18,9 +18,12 @@ import android.media.MediaPlayer;
 import android.net.Uri;
 import android.os.Build;
 import android.provider.MediaStore;
+import android.support.annotation.IntegerRes;
 import android.support.annotation.LayoutRes;
+import android.support.annotation.StringRes;
 import android.support.v4.app.FragmentActivity;
 import android.support.v7.app.AlertDialog;
+import android.support.v7.widget.AppCompatCheckedTextView;
 import android.support.v7.widget.GridLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.text.Html;
@@ -39,6 +42,7 @@ import android.view.WindowManager;
 import android.webkit.ValueCallback;
 import android.webkit.WebView;
 import android.widget.CheckBox;
+import android.widget.Checkable;
 import android.widget.CompoundButton;
 import android.widget.EditText;
 import android.widget.ImageView;
@@ -309,6 +313,11 @@ public class ViewUtil {
                 .subscribe(observer);
     }
 
+    public static void setChecked(Checkable view, boolean checked) {
+        if(view != null)
+            view.setChecked(checked);
+    }
+
     /**
      * 主页抢任务,更换任务时,获取新的任务
      *
@@ -1543,7 +1552,7 @@ public class ViewUtil {
     public static void setAvatar(ImageView imageView, String pictures) {
         if (imageView != null) {
             if (TextUtils.isEmpty(pictures)) {
-                imageView.setImageResource(R.mipmap.icon);
+                imageView.setImageResource(R.drawable.avatar);
             } else {
                 if (pictures.contains(";")) {
                     pictures = pictures.split(";")[0];
@@ -1660,6 +1669,11 @@ public class ViewUtil {
             textView.setText(TextUtils.isEmpty(msg) ? "" : msg);
         }
     }
+    public static void setText(TextView textView, @StringRes int stringId, Object...objects) {
+        if (textView != null) {
+            textView.setText(SheepApp.getInstance().getString(stringId, objects));
+        }
+    }
 
     public static void setText(TextView textView, IContentTypeContainer<Integer, String> contentTypeContainer, int maxWidth) {
         switch (contentTypeContainer.getContentType()) {
@@ -1782,12 +1796,25 @@ public class ViewUtil {
             view.setVisibility(isVisible ? View.VISIBLE : View.GONE);
         }
     }
+    public static void toggleVisibility(View view) {
+        if (view != null) {
+            view.setVisibility(isVisible(view) ? View.GONE : View.VISIBLE);
+        }
+    }
+    public static boolean isVisible(View view) {
+        return view != null && view.getVisibility() == View.VISIBLE;
+    }
 
     public static void setVisibility2(View view, boolean isVisible) {
         if (view != null) {
             view.setVisibility(isVisible ? View.VISIBLE : View.INVISIBLE);
         }
     }
+    public static void toggleVisibility2(View view) {
+        if (view != null) {
+            view.setVisibility(isVisible(view) ? View.INVISIBLE : View.VISIBLE);
+        }
+    }
 
     public static final String INDENT = "\u3000";//用特殊字符显示空白的缩进字符
 

+ 534 - 0
app/src/main/java/com/sheep/gamegroup/view/activity/ActPlayVideoArticle.java

@@ -0,0 +1,534 @@
+package com.sheep.gamegroup.view.activity;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.media.AudioManager;
+import android.media.MediaPlayer;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.design.widget.CheckableImageButton;
+import android.support.v4.app.Fragment;
+import android.support.v7.widget.AppCompatCheckedTextView;
+import android.text.TextUtils;
+import android.view.GestureDetector;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.WindowManager;
+import android.widget.ImageView;
+import android.widget.MediaController;
+import android.widget.TextView;
+import android.widget.VideoView;
+
+import com.kfzs.duanduan.utils.StatusBarUtils;
+import com.sheep.gamegroup.absBase.BaseContainerActivity;
+import com.sheep.gamegroup.model.entity.BaseMessage;
+import com.sheep.gamegroup.model.entity.DiscoveryVideo;
+import com.sheep.gamegroup.model.util.SheepSubscriber;
+import com.sheep.gamegroup.util.ApiUtil;
+import com.sheep.gamegroup.util.DataUtil;
+import com.sheep.gamegroup.util.Jump2View;
+import com.sheep.gamegroup.util.LogUtil;
+import com.sheep.gamegroup.util.TestUtil;
+import com.sheep.gamegroup.util.ViewUtil;
+import com.sheep.gamegroup.util.share.CommonUMShareListener;
+import com.sheep.gamegroup.util.share.ShareLinkConfig;
+import com.sheep.gamegroup.view.fragment.FgtVideoComment;
+import com.sheep.jiuyan.samllsheep.R;
+import com.sheep.jiuyan.samllsheep.SheepApp;
+import com.sheep.jiuyan.samllsheep.utils.G;
+import com.umeng.socialize.bean.SHARE_MEDIA;
+
+import butterknife.BindView;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+
+/**
+ * Created by realicing on 2018/11/9.
+ * realicing@sina.com
+ * 小绵羊3.4.5新增 -- 视频详情
+ */
+public class ActPlayVideoArticle extends BaseContainerActivity implements MediaPlayer.OnInfoListener, MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener, View.OnLayoutChangeListener {
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        StatusBarUtils.setTranslucent(this);
+        super.onCreate(savedInstanceState);
+    }
+
+    //播放
+    @BindView(R.id.videoView)
+    VideoView videoView;
+    @BindView(R.id.video_loading)
+    View video_loading;
+
+    //top
+    @BindView(R.id.video_top)
+    View video_top;
+    @BindView(R.id.video_camera_iv)
+    ImageView video_camera_iv;
+    @BindView(R.id.video_avatar_iv)
+    ImageView video_avatar_iv;
+    @BindView(R.id.video_focus_iv)
+    CheckableImageButton video_focus_iv;
+
+    //bottom
+    @BindView(R.id.video_bottom)
+    View video_bottom;
+    @BindView(R.id.video_like_tv)
+    AppCompatCheckedTextView video_like_tv;
+    @BindView(R.id.video_comment_tv)
+    TextView video_comment_tv;
+    @BindView(R.id.video_share_tv)
+    TextView video_share_tv;
+    @BindView(R.id.video_title_tv)
+    TextView video_title_tv;
+
+    @BindView(R.id.frame_container)
+    View frame_container;
+
+    //评论
+    private FgtVideoComment fgtVideoComment;
+
+
+    @Override
+    protected int getLayoutId() {
+        return R.layout.act_play_video_article;
+    }
+
+    private int video_id;
+    private int user_id;
+    private String video_url;
+    private DiscoveryVideo newVideo;
+
+    @Override
+    public void initView() {
+        super.initView();
+        initVolume();
+        DiscoveryVideo lastVideo = DataUtil.getObject(getIntent(), DiscoveryVideo.class);
+        if (lastVideo == null) {
+            video_id = DataUtil.getObject(getIntent(), Integer.class);
+            fgtVideoComment.setVideo_id(video_id);
+            loadVideoData(null);
+        } else {
+            video_id = lastVideo.getId();
+            fgtVideoComment.setVideo_id(video_id);
+            user_id = lastVideo.getUser_id();
+            video_url = lastVideo.getResource();
+            loadVideoData(lastVideo);
+        }
+        ViewUtil.setImage(video_camera_iv, ViewUtil.getNetImgByName("add_article_camera"));
+        ViewUtil.setVisibility2(frame_container, false);
+    }
+
+    @Override
+    protected Fragment initFragment() {
+        fgtVideoComment = new FgtVideoComment();
+        return fgtVideoComment;
+    }
+
+    private void loadVideoData(DiscoveryVideo video) {
+        if (fgtVideoComment != null)
+            fgtVideoComment.loadVideoData(video);
+        if (video == null) {
+            ViewUtil.setText(video_like_tv, ViewUtil.BLOCK);
+            ViewUtil.setText(video_comment_tv, ViewUtil.BLOCK);
+            ViewUtil.setText(video_title_tv, ViewUtil.BLOCK);
+            ViewUtil.setText(video_share_tv, ViewUtil.BLOCK);
+            return;
+        }
+        ViewUtil.setAvatar(video_avatar_iv, video.getAvatar());
+        ViewUtil.setText(video_like_tv, video.getLike());
+        ViewUtil.setText(video_comment_tv, video.getComment());
+        ViewUtil.setText(video_title_tv, video.getTitle());
+        ViewUtil.setText(video_share_tv, video.getShare());
+        ViewUtil.setChecked(video_like_tv, video.getIs_like());
+        ViewUtil.setChecked(video_focus_iv, video.getIs_like());
+    }
+
+    private void initPlay() {
+        Uri uri = Uri.parse(SheepApp.getHttpProxyCacheServer().getProxyUrl(video_url));
+        videoView.setOnInfoListener(this);
+        videoView.setOnPreparedListener(this);
+        videoView.setOnErrorListener(this);
+        videoView.setOnCompletionListener(this);
+        videoView.addOnLayoutChangeListener(this);
+        videoView.setMediaController(new MediaController(this));
+        videoView.setVideoURI(uri);
+    }
+
+    //点赞
+    public void onClickVideoLike(View view) {
+        ViewUtil.setEnabled(video_like_tv, false);
+        ApiUtil.postVideoLike(video_id, new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
+
+            @Override
+            public void onNext(BaseMessage baseMessage) {
+                if (newVideo != null) {
+                    G.showToast(newVideo.getIs_like() ? R.string.cancel_like_success : R.string.like_success);
+                    newVideo.setLike(newVideo.getLike() + (newVideo.getIs_like() ? -1 : 1));
+                    newVideo.setIs_like(!newVideo.getIs_like());
+                    ViewUtil.setText(video_like_tv, newVideo.getLike());
+                    ViewUtil.setChecked(video_like_tv, newVideo.getIs_like());
+                } else {
+                    G.showToast("操作成功");
+                }
+                ViewUtil.setEnabled(video_like_tv, true);
+            }
+
+            @Override
+            public void onError(BaseMessage baseMessage) {
+                if (newVideo != null) {
+                    G.showToast(newVideo.getIs_like() ? R.string.cancel_like_fail : R.string.like_fail);
+                } else {
+                    G.showToast("操作失败");
+                }
+                ViewUtil.setEnabled(video_like_tv, true);
+            }
+        });
+    }
+
+    //评论
+    public void onClickVideoComment(View view) {
+        ViewUtil.setVisibility(frame_container, true);
+        ViewUtil.setVisibility(video_bottom, false);
+    }
+
+    private ShareLinkConfig shareLinkConfig;
+
+    //分享
+    public void onClickVideoShare(View view) {
+        if (shareLinkConfig == null)
+            shareLinkConfig = new ShareLinkConfig();
+        if (newVideo != null) {
+            shareLinkConfig.setDes(newVideo.getTitle());
+        }
+        shareLinkConfig.toShare(this, new CommonUMShareListener() {
+            @Override
+            public void onResult(SHARE_MEDIA share_media) {
+                ApiUtil.postVideoShare(video_id);
+            }
+        });
+    }
+
+    //点击头像跳转用户游戏主页
+    public void onClickAvatar(View view) {
+        if (user_id > 0)
+            Jump2View.getInstance().goActUserAppHome(this, user_id);
+        else
+            G.showToast(R.string.loading_data);
+    }
+
+    //点击头像下面的+进行关注
+    public void onClickVideoFocus(View view) {
+        if (user_id > 0) {
+            ViewUtil.setEnabled(video_focus_iv, false);
+            ApiUtil.postGameUserFocusUser(user_id, new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
+                @Override
+                public void onNext(BaseMessage baseMessage) {
+                    if (newVideo != null) {
+                        G.showToast(newVideo.isIs_focus_user() ? R.string.cancel_focus_success : R.string.focus_success);
+                        newVideo.setIs_focus_user(!newVideo.isIs_focus_user());
+                        ViewUtil.setChecked(video_focus_iv, newVideo.isIs_focus_user());
+                    } else {
+                        G.showToast("操作成功");
+                    }
+                    ViewUtil.setEnabled(video_focus_iv, true);
+                }
+
+                @Override
+                public void onError(BaseMessage baseMessage) {
+                    if (newVideo != null) {
+                        G.showToast(newVideo.isIs_focus_user() ? R.string.cancel_focus_fail : R.string.focus_fail);
+                    } else {
+                        G.showToast("操作失败");
+                    }
+                    ViewUtil.setEnabled(video_focus_iv, true);
+                }
+            });
+        } else {
+            G.showToast(R.string.loading_data);
+        }
+    }
+
+    @Override
+    public void onBackPressed() {
+        if (ViewUtil.isVisible(frame_container)) {
+            ViewUtil.setVisibility(frame_container, false);
+            ViewUtil.setVisibility(video_bottom, true);
+            return;
+        }
+        super.onBackPressed();
+    }
+
+    @SuppressLint("ClickableViewAccessibility")
+    @Override
+    public void initListener() {
+        initPlay();
+        mGestureDetector = new GestureDetector(getApplicationContext(), mGestureListener);
+        View.OnTouchListener listener = new View.OnTouchListener() {
+            @Override
+            public boolean onTouch(View v, MotionEvent event) {
+                return onTouchEvent(event);
+            }
+        };
+        videoView.setOnTouchListener(listener);
+    }
+
+    @Override
+    public void initData() {
+        SheepApp.getInstance().getNetComponent().getApiService().getVideoDetail(video_id)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
+                    @Override
+                    public void onNext(BaseMessage baseMessage) {
+                        newVideo = baseMessage.getData(DiscoveryVideo.class);
+                        if (newVideo != null) {
+                            user_id = newVideo.getUser_id();
+                            if (TextUtils.isEmpty(video_url)) {
+                                video_url = newVideo.getResource();
+                                initPlay();
+                            }
+                            loadVideoData(newVideo);
+                            if (fgtVideoComment != null)
+                                fgtVideoComment.refreshData();
+                        }
+                    }
+
+                    @Override
+                    public void onError(BaseMessage baseMessage) {
+                        if (TestUtil.isDev()) G.showToast(baseMessage);
+                    }
+                });
+    }
+
+    private GestureDetector mGestureDetector;
+
+    //播放或者暂停
+    private void playOrPause() {
+        if (videoView.isPlaying()) {
+            pause();
+        } else {
+            play();
+        }
+    }
+
+    //播放
+    private void play() {
+        if (videoView == null) {
+            return;
+        }
+        videoView.start();
+    }
+
+    //暂停
+    private void pause() {
+        if (videoView == null) {
+            return;
+        }
+        videoView.pause();
+    }
+
+    //销毁
+    private void destroy() {
+        if (videoView == null) {
+            return;
+        }
+        videoView.stopPlayback();
+    }
+
+
+    @Override
+    public boolean onTouchEvent(MotionEvent event) {
+        return mGestureDetector.onTouchEvent(event);
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        if (!isPauseByUser)
+            play();
+    }
+
+    //是否是用户手机暂停
+    private boolean isPauseByUser;
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+        if (videoView != null && videoView.isPlaying())
+            isPauseByUser = false;
+        if (video_loading != null)
+            video_loading.setVisibility(View.VISIBLE);
+        pause();
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        destroy();
+    }
+
+    //    //滑动方向
+//    private int direction = 0;
+//    //左右滑动
+//    public static final int DIRECTION_LEFT_RIGHT = 1;
+//    //上下滑动
+//    public static final int DIRECTION_TOP_BOTTOM = 2;
+    private GestureDetector.SimpleOnGestureListener mGestureListener = new GestureDetector.SimpleOnGestureListener() {
+        @Override
+        public boolean onDown(MotionEvent e) {
+            LogUtil.println("mGestureListener", "onDown");
+//            direction = 0;
+            return super.onDown(e);
+        }
+
+        @Override
+        public void onLongPress(MotionEvent e) {
+            LogUtil.println("mGestureListener", "onLongPress");
+            super.onLongPress(e);
+        }
+
+        @Override
+        public boolean onSingleTapConfirmed(MotionEvent e) {
+            LogUtil.println("mGestureListener", "onSingleTapConfirmed");
+            ViewUtil.toggleVisibility(video_top);
+            ViewUtil.setVisibility(video_bottom, ViewUtil.isVisible(video_top));
+            ViewUtil.setVisibility(frame_container, false);
+//            if(isPlaying)
+//                isPauseByUser = true;
+//            playOrPause();
+            return super.onSingleTapConfirmed(e);
+        }
+
+        @Override
+        public boolean onScroll(MotionEvent e1, MotionEvent e2,
+                                float distanceX, float distanceY) {
+            float mOldX = e1.getX(), mOldY = e1.getY();
+            int y = (int) e2.getRawY();
+            int windowWidth = ActPlayVideoArticle.this.windowWidth;
+            int windowHeight = ActPlayVideoArticle.this.windowHeight;
+            int lineMiddle = windowWidth / 2;
+            if (mOldX > lineMiddle)// 左边滑动
+                onBrightnessSlide((mOldY - y) / windowHeight);
+            else if (mOldX < lineMiddle)// 右边滑动
+                onVolumeSlide((mOldY - y) / windowHeight);
+            return super.onScroll(e1, e2, distanceX, distanceY);
+        }
+
+    };
+    private AudioManager mAudioManager;
+    private int mMaxVolume;//最大音量
+    private int mVolume;//当前音量
+
+    private void initVolume() {
+        mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
+        if (mAudioManager != null)
+            mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
+    }
+
+    //滑动改变音量
+    private void onVolumeSlide(float percent) {
+        if (mVolume == -1) {
+            mVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
+            if (mVolume < 0)
+                mVolume = 0;
+
+            // 显示
+//                mOperationBg.setImageResource(R.drawable.video_volumn_bg);
+//                mVolumeBrightnessLayout.setVisibility(View.VISIBLE);
+        }
+
+        int index = (int) (percent * mMaxVolume) + mVolume;
+        if (index > mMaxVolume)
+            index = mMaxVolume;
+        else if (index < 0)
+            index = 0;
+
+        // 变更声音
+        mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, index, 0);
+        // 变更进度条
+//            ViewGroup.LayoutParams lp = mOperationPercent.getLayoutParams();
+//            lp.width = findViewById(R.id.operation_full).getLayoutParams().width * index / mMaxVolume;
+//            mOperationPercent.setLayoutParams(lp);
+    }
+
+    private float mBrightness = -1;
+
+    //滑动改变亮度
+    private void onBrightnessSlide(float percent) {
+        if (mBrightness < 0) {
+            mBrightness = getWindow().getAttributes().screenBrightness;
+            if (mBrightness <= 0.00f)
+                mBrightness = 0.50f;
+            if (mBrightness < 0.01f)
+                mBrightness = 0.01f;
+
+            // 显示
+//                mOperationBg.setImageResource(R.drawable.video_brightness_bg);
+//                mVolumeBrightnessLayout.setVisibility(View.VISIBLE);
+        }
+        WindowManager.LayoutParams lpa = getWindow().getAttributes();
+        lpa.screenBrightness = mBrightness + percent;
+        if (lpa.screenBrightness > 1.0f)
+            lpa.screenBrightness = 1.0f;
+        else if (lpa.screenBrightness < 0.01f)
+            lpa.screenBrightness = 0.01f;
+        getWindow().setAttributes(lpa);
+
+//            ViewGroup.LayoutParams lp = mOperationPercent.getLayoutParams();
+//            lp.width = (int) (findViewById(R.id.operation_full).getLayoutParams().width * lpa.screenBrightness);
+//            mOperationPercent.setLayoutParams(lp);
+    }
+
+    @Override
+    public boolean onInfo(MediaPlayer mediaPlayer, int what, int extra) {
+        LogUtil.println("ActPlayVideo", "onInfo what = " + what + " extra = " + extra);
+        if (!mediaPlayer.isLooping())
+            mediaPlayer.setLooping(true);
+        switch (what) {
+            case MediaPlayer.MEDIA_INFO_BUFFERING_START:
+                LogUtil.println("ActPlayVideo", "onInfo", "正在缓冲");
+                if (video_loading != null)
+                    video_loading.setVisibility(View.VISIBLE);
+                break;
+            case MediaPlayer.MEDIA_INFO_BUFFERING_END:
+            case MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START:
+                LogUtil.println("ActPlayVideo", "onInfo", "缓冲完成");
+                //缓存完成,继续播放
+                if (video_loading != null)
+                    video_loading.setVisibility(View.GONE);
+                break;
+        }
+        return false;
+    }
+
+    @Override
+    public void onPrepared(MediaPlayer mediaPlayer) {
+        LogUtil.println("ActPlayVideo", "onPrepared");
+        if (video_loading != null)
+            video_loading.setVisibility(View.GONE);
+    }
+
+    @Override
+    public boolean onError(MediaPlayer mediaPlayer, int what, int extra) {
+        LogUtil.println("ActPlayVideo", "onInfo what = " + what + " extra = " + extra);
+        return false;
+    }
+
+    @Override
+    public void onCompletion(MediaPlayer mediaPlayer) {
+        LogUtil.println("ActPlayVideo", "onCompletion");
+    }
+
+    private int windowWidth = G.WIDTH;
+    private int windowHeight = G.HEIGHT;
+
+    @Override
+    public void onLayoutChange(View view, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
+        LogUtil.println("ActPlayVideo", "onLayoutChange", left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom);
+        this.windowWidth = left + right;
+        this.windowHeight = top + bottom;
+    }
+}

+ 44 - 27
app/src/main/java/com/sheep/gamegroup/view/adapter/AdpArticleComment.java

@@ -1,5 +1,6 @@
 package com.sheep.gamegroup.view.adapter;
 
+import android.support.annotation.LayoutRes;
 import android.view.View;
 import android.widget.ImageView;
 import android.widget.TextView;
@@ -20,6 +21,8 @@ import com.sheep.jiuyan.samllsheep.utils.G;
 
 import java.util.List;
 
+import rx.functions.Action1;
+
 /**
  * Created by realicing on 2018/11/1.
  * realicing@sina.com
@@ -29,6 +32,15 @@ public class AdpArticleComment extends BaseQuickAdapter<UserComment, BaseViewHol
     public AdpArticleComment(List<UserComment> list) {
         super(R.layout.item_article_comment, list);
     }
+    public AdpArticleComment(@LayoutRes int layoutId, List<UserComment> list) {
+        super(layoutId, list);
+    }
+    private boolean hasCommentDetail = true;
+
+    public AdpArticleComment setHasCommentDetail(boolean hasCommentDetail) {
+        this.hasCommentDetail = hasCommentDetail;
+        return this;
+    }
 
     @Override
     protected void convert(BaseViewHolder helper, final UserComment item) {
@@ -51,13 +63,15 @@ public class AdpArticleComment extends BaseQuickAdapter<UserComment, BaseViewHol
         //String.format(Locale.CHINA, "%d %d %d %d", position, helper.getAdapterPosition(), helper.getLayoutPosition(), helper.getOldPosition()));
         TextViewUtil.initIntroView(helper.itemView, item.getShowAll());
 
-        article_comment_num1.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                //跳转评论详情界面
-                Jump2View.getInstance().goActAppCommentDetail(ActivityManager.getInstance().currentActivity(), item.getId());
-            }
-        });
+        if(hasCommentDetail) {
+            article_comment_num1.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View view) {
+                    //跳转评论详情界面
+                    Jump2View.getInstance().goActAppCommentDetail(ActivityManager.getInstance().currentActivity(), item.getId());
+                }
+            });
+        }
 
         article_comment_num2.setOnClickListener(new View.OnClickListener() {
             @Override
@@ -80,27 +94,30 @@ public class AdpArticleComment extends BaseQuickAdapter<UserComment, BaseViewHol
                 });
             }
         });
-        article_comment_num3.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                article_comment_num3.setEnabled(false);
-                ApiUtil.postGameUserUserGameCommentExpressionLike(item.getId(), new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
+        if(article_comment_num3 != null) {
+            article_comment_num3.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View view) {
+                    article_comment_num3.setEnabled(false);
+                    ApiUtil.postGameUserUserGameCommentExpressionLike(item.getId(), new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
 
-                    @Override
-                    public void onNext(BaseMessage baseMessage) {
-                        G.showToast("操作成功");
-                        item.plusExpression();
-                        ViewUtil.setText(article_comment_num3, item.getExpression());
-                        article_comment_num3.setEnabled(true);
-                    }
-                    @Override
-                    public void onError(BaseMessage baseMessage) {
-                        G.showToast("操作失败");
-                        article_comment_num3.setEnabled(true);
-                    }
-                });
-            }
-        });
+                        @Override
+                        public void onNext(BaseMessage baseMessage) {
+                            G.showToast("操作成功");
+                            item.plusExpression();
+                            ViewUtil.setText(article_comment_num3, item.getExpression());
+                            article_comment_num3.setEnabled(true);
+                        }
+
+                        @Override
+                        public void onError(BaseMessage baseMessage) {
+                            G.showToast("操作失败");
+                            article_comment_num3.setEnabled(true);
+                        }
+                    });
+                }
+            });
+        }
         article_comment_user_avatar.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {

+ 1 - 1
app/src/main/java/com/sheep/gamegroup/view/adapter/AdpVideo.java

@@ -40,7 +40,7 @@ public class AdpVideo extends RecyclerViewAdapter<DiscoveryVideo> {
         viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
-                Jump2View.getInstance().goActPlayVideo(item.getResource(), true);
+                Jump2View.getInstance().goActPlayVideoArticle(item);
             }
         });
     }

+ 9 - 4
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtArticleComment.java

@@ -85,8 +85,10 @@ public class FgtArticleComment extends BaseListFragment3<UserComment> implements
 
     //是否显示无数据占位图
     protected void updateEmptyView() {
+        boolean isEmpty = list.isEmpty() && (article_id <= 0 || article == null);
         if (useSelfEmpty())
-            CommonUtil.getInstance().updateEmptyView(empty_view, list.isEmpty() && (article_id <= 0 || article == null));
+            CommonUtil.getInstance().updateEmptyView(empty_view, isEmpty);
+        ViewUtil.setVisibility(find_article_comment_title_rl, !isEmpty);
     }
 
     @Override
@@ -151,7 +153,7 @@ public class FgtArticleComment extends BaseListFragment3<UserComment> implements
             return;
         }
         // 发表评论
-        ApiJSONUtil.postGameUserUserGameComment(ApiJSONUtil.COMMENT_TYPE_ARTICLE, article_id, content, 0)
+        ApiJSONUtil.postGameUserUserGameComment(type, article_id, content, 0)
                 .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
                     @Override
                     public void onNext(BaseMessage baseMessage) {
@@ -176,10 +178,12 @@ public class FgtArticleComment extends BaseListFragment3<UserComment> implements
     private View find_information_bottom_item;
     private View find_information_bottom_item_line;
     private View find_information_bottom_item_game;
+    private View find_article_comment_title_rl;
 
     //初始化headerView
     private void initHeaderView() {
         headerView = LayoutInflater.from(SheepApp.getInstance()).inflate(R.layout.header_act_article, null);
+        find_article_comment_title_rl = headerView.findViewById(R.id.find_article_comment_title_rl);
         find_information_bottom_item = headerView.findViewById(R.id.find_information_bottom_item);
         find_information_bottom_item_line = headerView.findViewById(R.id.find_information_bottom_item_line);
         find_information_bottom_item_game = headerView.findViewById(R.id.find_information_bottom_item_game);
@@ -191,6 +195,7 @@ public class FgtArticleComment extends BaseListFragment3<UserComment> implements
     //    ------------------------------end header------------------------------------
 
     private int article_id;
+    private int type = ApiJSONUtil.COMMENT_TYPE_ARTICLE;
 
     public void setArticle_id(int article_id) {
         this.article_id = article_id;
@@ -206,12 +211,12 @@ public class FgtArticleComment extends BaseListFragment3<UserComment> implements
 
     @Override
     protected String getKey(int page, int per_page) {
-        return String.format(Locale.CHINA, "app/game_user/app_comment_list?page_no=%d&page_size=%d&app_id=%d&comment_type=%d", page, per_page, article_id, ApiJSONUtil.COMMENT_TYPE_ARTICLE);
+        return String.format(Locale.CHINA, "app/game_user/app_comment_list?page_no=%d&page_size=%d&app_id=%d&comment_type=%d", page, per_page, article_id, type);
     }
 
     @Override
     protected Observable<BaseMessage> getApi(ApiService apiService) {
-        return apiService.getGameUserAppCommentList(page, per_page, article_id, ApiJSONUtil.COMMENT_TYPE_ARTICLE);
+        return apiService.getGameUserAppCommentList(page, per_page, article_id, type);
     }
 
 

+ 2 - 0
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtFind.java

@@ -79,6 +79,7 @@ public class FgtFind extends BaseFragment {
             ViewUtil.setImage(add_article_camera, ViewUtil.getNetImgByName("add_article_camera"));
             ViewUtil.setImage(add_article_pic, ViewUtil.getNetImgByName("add_article_pic"));
         }
+        ViewUtil.setVisibility(add_article, false);
         ViewUtil.setVisibility(add_article_iv, false);
         ViewUtil.setVisibility(add_article_camera, false);
         ViewUtil.setVisibility(add_article_pic, false);
@@ -211,6 +212,7 @@ public class FgtFind extends BaseFragment {
 
                         @Override
                         public void onPageSelected(int i) {
+                            ViewUtil.setVisibility(add_article, mAdapter.getItem(i) instanceof FgtArticleVideo);
                             FIND_TAG.onEvent("find_tag_name", ListUtil.hasIndex(list, i - 1) ? list.get(i - 1).getName() : "全部");
                         }
 

+ 3 - 2
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtGcGameAppComment.java

@@ -53,6 +53,7 @@ public class FgtGcGameAppComment extends BaseListFragment3<UserComment> {
     }
 
     private int app_id;
+    private int type = ApiJSONUtil.COMMENT_TYPE_GAME;
 
     private List<GameAppScore> scoreList = ListUtil.emptyList();
     //头部view
@@ -93,12 +94,12 @@ public class FgtGcGameAppComment extends BaseListFragment3<UserComment> {
 
     @Override
     protected String getKey(int page, int per_page) {
-        return String.format(Locale.CHINA, "app/game_user/app_comment_list?page_no=%d&page_size=%d&app_id=%d&comment_type=%d", page, per_page, app_id, ApiJSONUtil.COMMENT_TYPE_GAME);
+        return String.format(Locale.CHINA, "app/game_user/app_comment_list?page_no=%d&page_size=%d&app_id=%d&comment_type=%d", page, per_page, app_id, type);
     }
 
     @Override
     protected Observable<BaseMessage> getApi(ApiService apiService) {
-        return apiService.getGameUserAppCommentList(page, per_page, app_id, ApiJSONUtil.COMMENT_TYPE_GAME);
+        return apiService.getGameUserAppCommentList(page, per_page, app_id, type);
     }
 
     private Action1<List<UserComment>> listAction1;

+ 180 - 0
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtVideoComment.java

@@ -0,0 +1,180 @@
+package com.sheep.gamegroup.view.fragment;
+
+import android.content.DialogInterface;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.KeyEvent;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.lqr.emoji.EmotionKeyboard;
+import com.lqr.emoji.EmotionLayout;
+import com.sheep.gamegroup.model.api.ApiService;
+import com.sheep.gamegroup.model.entity.BaseMessage;
+import com.sheep.gamegroup.model.entity.DiscoveryVideo;
+import com.sheep.gamegroup.model.entity.UserComment;
+import com.sheep.gamegroup.model.util.SheepSubscriber;
+import com.sheep.gamegroup.util.ApiJSONUtil;
+import com.sheep.gamegroup.util.KeyEventUtil;
+import com.sheep.gamegroup.util.TestUtil;
+import com.sheep.gamegroup.util.ViewUtil;
+import com.sheep.gamegroup.view.adapter.AdpArticleComment;
+import com.sheep.gamegroup.view.dialog.DialogSuccessUtil;
+import com.sheep.jiuyan.samllsheep.R;
+import com.sheep.jiuyan.samllsheep.SheepApp;
+import com.sheep.jiuyan.samllsheep.utils.G;
+
+import java.util.Locale;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+import io.reactivex.Observable;
+
+/**
+ * Created by realicing on 2018/11/2.
+ * realicing@sina.com
+ * 用户评论列表界面
+ */
+public class FgtVideoComment extends BaseListFragment4<UserComment> {
+
+    @Override
+    public int getLayoutId() {
+        return R.layout.fgt_video_comment;
+    }
+
+    @BindView(R.id.rlContent)
+    RelativeLayout rlContent;
+    @BindView(R.id.elEmotion)
+    EmotionLayout elEmotion;
+    @BindView(R.id.video_comment_title_tv)
+    TextView video_comment_title_tv;
+    @BindView(R.id.video_comment_rv)
+    RecyclerView video_comment_rv;
+    //输入框
+    @BindView(R.id.input_comment_input)
+    EditText input_comment_input;
+    @BindView(R.id.input_comment_exp)
+    ImageView input_comment_exp;
+
+    //表情键盘协调工具
+    private EmotionKeyboard mEmotionKeyboard;
+
+    @Override
+    public void initView() {
+        view_list = video_comment_rv;
+        initAdapter();
+        ViewUtil.setText(video_comment_title_tv, getString(R.string.total_x_comment, ViewUtil.BLOCK));
+
+        //初始化 表情键盘协调工具
+        initEmotionKeyboard();
+        initSticker();
+
+    }
+
+    //用户评论一个用户对游戏的评论
+    private void commitContent(String content) {
+        if (TestUtil.isDev()) G.showToast("评论内容:" + content);
+        if (content.isEmpty()) {
+            G.showToast("评论内容不能为空");
+            return;
+        }
+        // 发表评论
+        ApiJSONUtil.postGameUserUserGameComment(type, video_id, content, 0)
+                .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
+                    @Override
+                    public void onNext(BaseMessage baseMessage) {
+                        input_comment_input.setText("");
+                        DialogSuccessUtil.showSuccess("发表成功", new DialogInterface.OnDismissListener() {
+                            @Override
+                            public void onDismiss(DialogInterface dialogInterface) {
+                                refreshData();
+                            }
+                        });
+                    }
+
+                    @Override
+                    public void onError(BaseMessage baseMessage) {
+                        G.showToast(baseMessage);
+                    }
+                });
+    }
+
+
+    private int video_id;
+    private int type = ApiJSONUtil.COMMENT_TYPE_VIDEO;
+
+    public void setVideo_id(int video_id) {
+        this.video_id = video_id;
+    }
+
+
+    private void initAdapter() {
+        video_comment_rv.setLayoutManager(new LinearLayoutManager(SheepApp.getInstance()));
+        //用户评论的回复列表
+        adapter = new AdpArticleComment(R.layout.item_video_comment, list).setHasCommentDetail(false);
+        adapter.bindToRecyclerView(video_comment_rv);
+        adapter.setEmptyView(R.layout.include_empty);
+    }
+
+    @Override
+    protected String getKey(int page, int per_page) {
+        return String.format(Locale.CHINA, "app/game_user/app_comment_list?page_no=%d&page_size=%d&app_id=%d&comment_type=%d", page, per_page, video_id, type);
+    }
+
+    @Override
+    protected Observable<BaseMessage> getApi(ApiService apiService) {
+        return apiService.getGameUserAppCommentList(page, per_page, video_id, type);
+    }
+
+    @Override
+    protected Class<UserComment> getTClass() {
+        return UserComment.class;
+    }
+
+
+    private void initSticker() {
+        elEmotion.attachEditText(input_comment_input);
+    }
+
+    //初始化 表情键盘协调工具
+    private void initEmotionKeyboard() {
+        mEmotionKeyboard = EmotionKeyboard.with(activity);
+        mEmotionKeyboard.bindToContent(rlContent);
+        mEmotionKeyboard.bindToEmotionButton(input_comment_exp);
+        mEmotionKeyboard.bindToEditText(input_comment_input);
+        mEmotionKeyboard.setEmotionLayout(elEmotion);
+        mEmotionKeyboard.setShowSoftInputWhenHideEmotion(false);
+    }
+
+    //返回处理
+    public boolean onBackPressed() {
+        if (mEmotionKeyboard != null) {
+            return mEmotionKeyboard.interceptBackPress(true);
+        }
+        return false;
+    }
+
+    public void loadVideoData(DiscoveryVideo video) {
+        if (video == null) {
+            ViewUtil.setText(video_comment_title_tv, R.string.total_x_comment, ViewUtil.BLOCK);
+            return;
+        }
+        ViewUtil.setText(video_comment_title_tv, R.string.total_x_comment, String.valueOf(video.getComment()));
+    }
+
+    //点击评论界面中的x
+    @OnClick({R.id.video_comment_x})
+    public void onClickX(View view) {
+        KeyEventUtil.sendKeyDownUp(KeyEvent.KEYCODE_BACK);
+    }
+
+    //点击评论界面中的评论按钮
+    @OnClick({R.id.input_comment_commit})
+    public void commitVideoComment(View view) {
+        String content = input_comment_input.getText().toString();
+        commitContent(content);
+    }
+}

+ 6 - 0
app/src/main/java/org/afinal/simplecache/ApiKey.java

@@ -64,6 +64,12 @@ public class ApiKey {
     public static final String sendShareResult = "app/share/share";
     //获取发布中视频列表
     public static final String getVideoList = "app/video/list";
+    //查询音乐列表
+    public static final String getVideoMusic = "app/video/music";
+    //查询贴纸列表
+    public static final String getVideoSticker = "app/video/sticker";
+    //查询话题列表
+    public static final String getVideoTopic = "app/video/topic";
     public static final String pageKeyUrl(String baseUrl, int page, int per_page){
         return String.format(Locale.CHINA, "%s?page=%d&per_page=%d", baseUrl, page, per_page);
     }

+ 8 - 0
app/src/main/res/drawable/selector_focus.xml

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

+ 8 - 0
app/src/main/res/drawable/selector_like.xml

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

+ 6 - 0
app/src/main/res/drawable/shape_33_solid_rectangle_15.xml

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

+ 8 - 0
app/src/main/res/drawable/shape_solid_black_80_top_radius_7.xml

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

+ 36 - 0
app/src/main/res/layout/act_play_video_article.xml

@@ -0,0 +1,36 @@
+<?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="match_parent"
+    android:background="#000000">
+
+    <VideoView
+        android:id="@+id/videoView"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <com.github.ybq.android.spinkit.SpinKitView
+        android:id="@+id/video_loading"
+        style="@style/SpinKitView.Large.ThreeBounce"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        app:SpinKit_Color="@color/colorAccent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <include layout="@layout/include_article_video_top" />
+
+    <include layout="@layout/include_article_video_bottom" />
+
+    <FrameLayout
+        android:id="@+id/frame_container"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:visibility="gone"/>
+
+</android.support.constraint.ConstraintLayout>

+ 62 - 0
app/src/main/res/layout/fgt_video_comment.xml

@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/video_comment_ll"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="2"/>
+    <RelativeLayout
+        android:id="@+id/rlContent"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="8">
+
+        <LinearLayout
+            android:id="@+id/video_comment_content"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingBottom="47dp"
+            android:layout_alignParentBottom="true"
+            android:background="@drawable/shape_solid_black_80_top_radius_7"
+            android:orientation="vertical">
+
+            <TextView
+                android:id="@+id/video_comment_title_tv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="16dp"
+                android:layout_marginTop="19dp"
+                android:text="@string/total_x_comment"
+                android:textColor="#ffffffff"
+                android:textSize="14sp" />
+
+            <android.support.v7.widget.RecyclerView
+                android:id="@+id/video_comment_rv"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content" />
+
+        </LinearLayout>
+
+        <include layout="@layout/include_input_comment_video" />
+        <ImageView
+            android:id="@+id/video_comment_x"
+            android:layout_width="38dp"
+            android:layout_height="38dp"
+            android:layout_alignTop="@id/video_comment_content"
+            android:layout_alignParentEnd="true"
+            android:layout_marginEnd="3dp"
+            android:padding="13dp"
+            android:src="@mipmap/ic_x_white" />
+    </RelativeLayout>
+
+    <!--表情区-->
+    <com.lqr.emoji.EmotionLayout
+        android:id="@+id/elEmotion"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="#cc000000"
+        android:visibility="gone" />
+</LinearLayout>

+ 1 - 0
app/src/main/res/layout/header_act_article.xml

@@ -92,6 +92,7 @@
         app:layout_constraintTop_toBottomOf="@id/find_information_bottom_item_line" />
 
     <RelativeLayout
+        android:id="@+id/find_article_comment_title_rl"
         style="@style/style_wc_rl"
         app:layout_constraintTop_toBottomOf="@id/find_information_bottom_item_game">
 

+ 68 - 0
app/src/main/res/layout/include_article_video_bottom.xml

@@ -0,0 +1,68 @@
+<?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:id="@+id/video_bottom"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    app:layout_constraintBottom_toBottomOf="parent"
+    android:background="#33000000">
+
+    <android.support.v7.widget.AppCompatCheckedTextView
+        android:id="@+id/video_like_tv"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="30dp"
+        android:layout_marginBottom="17dp"
+        android:drawableStart="@drawable/selector_like"
+        android:drawablePadding="9dp"
+        android:onClick="onClickVideoLike"
+        android:padding="8dp"
+        android:text="6325"
+        android:textColor="#ffffffff"
+        android:textSize="15sp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent" />
+
+    <TextView
+        android:id="@+id/video_comment_tv"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="17dp"
+        android:drawableStart="@mipmap/ic_comment"
+        android:drawablePadding="9dp"
+        android:onClick="onClickVideoComment"
+        android:padding="8dp"
+        android:text="635"
+        android:textColor="#ffffffff"
+        android:textSize="15sp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toEndOf="@id/video_like_tv" />
+
+    <TextView
+        android:id="@+id/video_share_tv"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="17dp"
+        android:drawableStart="@drawable/ic_but_share_white"
+        android:drawablePadding="9dp"
+        android:onClick="onClickVideoShare"
+        android:padding="8dp"
+        android:textColor="#ffffffff"
+        android:textSize="15sp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toEndOf="@id/video_comment_tv" />
+
+    <TextView
+        android:id="@+id/video_title_tv"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="18dp"
+        android:layout_marginEnd="80dp"
+        android:layout_marginBottom="11dp"
+        android:paddingTop="20dp"
+        android:text="天气真好出来散散步,草木的香味,这就是向往的生活 "
+        android:textColor="#fffefefe"
+        android:textSize="14sp"
+        app:layout_constraintBottom_toTopOf="@id/video_like_tv"
+        app:layout_constraintStart_toStartOf="parent" />
+</android.support.constraint.ConstraintLayout>

+ 51 - 0
app/src/main/res/layout/include_article_video_top.xml

@@ -0,0 +1,51 @@
+<?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:id="@+id/video_top"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="#33000000">
+
+    <ImageView
+        android:id="@+id/video_camera_iv"
+        android:layout_width="66dp"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="22dp"
+        android:padding="18dp"
+        android:src="@drawable/loading_01"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <ImageView
+        android:id="@+id/video_avatar_iv"
+        android:layout_width="76dp"
+        android:layout_height="76dp"
+        android:layout_marginTop="15dp"
+        android:onClick="onClickAvatar"
+        android:padding="18dp"
+        android:src="@drawable/avatar"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <ImageView
+        android:layout_width="42dp"
+        android:layout_height="42dp"
+        android:layout_marginTop="31dp"
+        android:layout_marginEnd="16dp"
+        android:background="@drawable/shape_circle_white_stroke"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <android.support.design.widget.CheckableImageButton
+        android:id="@+id/video_focus_iv"
+        android:layout_width="34dp"
+        android:layout_height="34dp"
+        android:layout_marginTop="56dp"
+        android:layout_marginEnd="20dp"
+        android:background="@null"
+        android:onClick="onClickVideoFocus"
+        android:padding="10dp"
+        android:src="@drawable/selector_focus"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+</android.support.constraint.ConstraintLayout>

+ 24 - 0
app/src/main/res/layout/include_empty.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:gravity="center_horizontal"
+    android:orientation="vertical">
+
+    <ImageView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="80dp"
+        android:gravity="center"
+        android:scaleType="centerInside"
+        android:src="@mipmap/wushuju"
+        android:visibility="visible" />
+
+    <TextView
+        style="@style/style_empty_text"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="60dp"
+        android:layout_marginTop="@dimen/content_padding_big"
+        android:text="@string/wushuju" />
+</LinearLayout>

+ 53 - 0
app/src/main/res/layout/include_input_comment_video.xml

@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_alignParentBottom="true">
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:background="#666666" />
+
+    <TextView
+        android:id="@+id/input_comment_commit"
+        android:layout_width="60dp"
+        android:layout_height="26dp"
+        android:layout_alignParentEnd="true"
+        android:layout_centerVertical="true"
+        android:layout_marginTop="1dp"
+        android:layout_marginEnd="15dp"
+        android:background="@drawable/selector_button_full_main"
+        android:gravity="center"
+        android:text="评论"
+        android:textColor="@color/white"
+        android:textSize="13sp" />
+
+    <ImageView
+        android:id="@+id/input_comment_exp"
+        android:layout_width="45dp"
+        android:layout_height="45dp"
+        android:layout_centerVertical="true"
+        android:layout_toStartOf="@id/input_comment_commit"
+        android:padding="9dp"
+        android:src="@drawable/ic_face_image" />
+    <EditText
+        android:id="@+id/input_comment_input"
+        android:layout_width="match_parent"
+        android:layout_height="30dp"
+        android:layout_marginStart="15dp"
+        android:layout_marginTop="9dp"
+        android:layout_marginEnd="9dp"
+        android:layout_marginBottom="8dp"
+        android:maxLength="100"
+        android:layout_toStartOf="@id/input_comment_exp"
+        android:background="@drawable/shape_33_solid_rectangle_15"
+        android:gravity="center|start"
+        android:hint="输入优质评论哦~"
+        android:paddingStart="10dp"
+        android:paddingEnd="10dp"
+        android:textColor="@color/white"
+        android:textColorHint="#ff666666"
+        android:textSize="14sp" />
+
+</RelativeLayout>

+ 62 - 0
app/src/main/res/layout/include_video_comment.xml

@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/video_comment_ll"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="3" />
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="7">
+
+        <LinearLayout
+            android:id="@+id/video_comment_content"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_alignParentBottom="true"
+            android:background="@drawable/shape_solid_black_80_top_radius_7"
+            android:orientation="vertical">
+
+            <TextView
+                android:id="@+id/video_comment_title_tv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="16dp"
+                android:layout_marginTop="19dp"
+                android:text="@string/total_x_comment"
+                android:textColor="#ffffffff"
+                android:textSize="14sp" />
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:layout_marginStart="16dp"
+                android:layout_marginTop="20dp"
+                android:layout_marginEnd="16dp"
+                android:background="#C6C6C6" />
+
+            <android.support.v7.widget.RecyclerView
+                android:id="@+id/video_comment_rv"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content" />
+
+            <include layout="@layout/include_input_comment_video" />
+        </LinearLayout>
+
+        <ImageView
+            android:layout_width="38dp"
+            android:layout_height="38dp"
+            android:layout_alignTop="@id/video_comment_content"
+            android:layout_alignParentEnd="true"
+            android:onClick="onClickX"
+            android:layout_marginEnd="3dp"
+            android:padding="13dp"
+            android:src="@mipmap/ic_x_white" />
+    </RelativeLayout>
+</LinearLayout>

+ 107 - 0
app/src/main/res/layout/item_video_comment.xml

@@ -0,0 +1,107 @@
+<?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/article_comment_line_top"
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:layout_marginStart="16dp"
+        android:layout_marginEnd="16dp"
+        android:background="#C6C6C6"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <ImageView
+        android:id="@+id/article_comment_user_avatar"
+        android:layout_width="33dp"
+        android:layout_height="33dp"
+        android:layout_marginStart="16dp"
+        android:layout_marginTop="20dp"
+        android:src="@drawable/avatar"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="@id/article_comment_line_top" />
+
+    <TextView
+        android:id="@+id/article_comment_user_name"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="16dp"
+        android:layout_marginEnd="16dp"
+        android:text="栗子的菜"
+        android:textColor="@color/white"
+        android:textSize="13sp"
+        app:layout_constraintBottom_toBottomOf="@id/article_comment_user_avatar"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toEndOf="@id/article_comment_user_avatar"
+        app:layout_constraintTop_toTopOf="@id/article_comment_user_avatar" />
+
+    <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="#cccccc"
+        android:textSize="12sp"
+        app:layout_constraintTop_toBottomOf="@id/article_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/article_comment_num1"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="10dp"
+        android:layout_marginBottom="6dp"
+        android:drawableStart="@mipmap/ic_comment_small"
+        android:drawablePadding="6dp"
+        android:paddingStart="8dp"
+        android:paddingTop="14dp"
+        android:paddingEnd="8dp"
+        android:paddingBottom="14dp"
+        android:text="54"
+        android:textColor="@color/white"
+        android:textSize="11sp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/intro_show_all" />
+
+    <TextView
+        android:id="@+id/article_comment_num2"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:drawableStart="@mipmap/ic_6"
+        android:drawablePadding="6dp"
+        android:paddingStart="8dp"
+        android:paddingTop="14dp"
+        android:paddingEnd="8dp"
+        android:paddingBottom="14dp"
+        android:text="54"
+        android:textColor="@color/white"
+        android:textSize="11sp"
+        app:layout_constraintEnd_toStartOf="@id/article_comment_num1"
+        app:layout_constraintTop_toTopOf="@id/article_comment_num1" />
+
+
+</android.support.constraint.ConstraintLayout>

BIN
app/src/main/res/mipmap-xxhdpi/ic_6.webp


BIN
app/src/main/res/mipmap-xxhdpi/ic_comment.webp


BIN
app/src/main/res/mipmap-xxhdpi/ic_comment_small.png


BIN
app/src/main/res/mipmap-xxhdpi/ic_focus_no.webp


BIN
app/src/main/res/mipmap-xxhdpi/ic_focus_yes.webp


BIN
app/src/main/res/mipmap-xxhdpi/ic_like.webp


BIN
app/src/main/res/mipmap-xxhdpi/ic_like_select.webp


BIN
app/src/main/res/mipmap-xxhdpi/ic_x_white.webp


+ 2 - 0
app/src/main/res/values/strings.xml

@@ -120,6 +120,8 @@
     <string name="focus_fail">关注失败</string>
     <string name="like_success">点赞成功</string>
     <string name="like_fail">点赞失败</string>
+    <string name="cancel_like_success">取消点赞成功</string>
+    <string name="cancel_like_fail">取消点赞失败</string>
     <string name="has_focus">已关注</string>
     <string name="x">%s</string>
     <string name="contact_kf">联系客服</string>