diff --git a/app/src/main/assets/lottie/follow.json b/app/src/main/assets/lottie/follow.json
new file mode 100644
index 0000000000..f95a60687f
--- /dev/null
+++ b/app/src/main/assets/lottie/follow.json
@@ -0,0 +1 @@
+{"v":"5.6.4","fr":25,"ip":0,"op":40,"w":66,"h":66,"nm":"合成 3","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"路径","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[0]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[40]},{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":15,"s":[40]},{"t":18,"s":[100]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.683],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[-60]},{"t":16,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.278,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[28.25,36.75,0],"to":[0.792,-0.625,0],"ti":[-0.792,0.625,0]},{"t":18,"s":[33,33,0]}],"ix":2},"a":{"a":0,"k":[-0.67,2.403,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":18,"s":[100,100,100]},{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.544,0.544,0.333],"y":[0,0,0]},"t":26,"s":[100,100,100]},{"t":39,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[1.997,-3.994],[1.997,3.995],[-1.993,3.995]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.141176000237,0.588235020638,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":-315,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"路径","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.126],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":9,"s":[75]},{"t":18,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":100,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"路径 2备份","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.544],"y":[1]},"o":{"x":[0.515],"y":[0]},"t":5,"s":[100]},{"t":10,"s":[0]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.606],"y":[0]},"t":3,"s":[0]},{"t":10,"s":[30]}],"ix":10},"p":{"a":0,"k":[33,33.018,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.994,0],[3.996,0]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.5,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"路径 2备份","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":40,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"路径 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.112],"y":[1]},"o":{"x":[0.621],"y":[0]},"t":5,"s":[100]},{"t":10,"s":[0]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.595],"y":[0]},"t":3,"s":[0]},{"t":10,"s":[120]}],"ix":10},"p":{"a":0,"k":[33,33,0],"ix":2},"a":{"a":0,"k":[0,0.003,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,3.996],[0,-3.994]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.5,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"路径 2","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.01],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"t":10,"s":[50]}],"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":40,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"椭圆形","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.256],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[100]},{"i":{"x":[0.156],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12,"s":[60]},{"t":18,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[33,33,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":3,"s":[100,100,100]},{"t":18,"s":[120,120,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[18,18],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"椭圆路径 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.141176000237,0.588235020638,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"椭圆形","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":40,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"椭圆形 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[33,33,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":3,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":20,"s":[120,120,100]},{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":28,"s":[120,120,100]},{"t":37,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":0,"s":[17,17]},{"t":3,"s":[18,18]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"椭圆路径 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"椭圆形","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":40,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/video/detail/DetailPlayerView.kt b/app/src/main/java/com/gh/gamecenter/video/detail/DetailPlayerView.kt
index eef5295a1a..045fd0e52c 100644
--- a/app/src/main/java/com/gh/gamecenter/video/detail/DetailPlayerView.kt
+++ b/app/src/main/java/com/gh/gamecenter/video/detail/DetailPlayerView.kt
@@ -1,5 +1,7 @@
package com.gh.gamecenter.video.detail
+import android.animation.AnimatorSet
+import android.animation.ObjectAnimator
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
@@ -69,6 +71,7 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib
private var mLastClickTime = 0L
private var mLottieLike: LottieAnimationView? = null
private var mHandler: Handler? = null
+ private var weChatAnimate: AnimatorSet? = null
init {
mHandler = Handler(Handler.Callback {
@@ -168,7 +171,7 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib
} else {
likeIv.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_video_detail_like))
}
- attentionIv.goneIf(videoEntity.me.isFollower || videoEntity.user.id == UserManager.getInstance().userId)
+ attentionIv.goneIf(videoEntity.user.id == UserManager.getInstance().userId || videoEntity.me.isFollower)
attentionIv.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_video_detail_follow))
if (!likeContainer.hasOnClickListeners())
RxView.clicks(likeContainer)
@@ -245,10 +248,17 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib
ToastUtils.showToast("网络错误")
return@setOnClickListener
}
- mViewModel?.follow(videoEntity)
- recordMta("关注用户")
- uploadVideoStreamingPlaying("关注用户")
- MtaHelper.onEvent("视频详情", "关注用户", mCombinedTitleAndId)
+ attentionLottie.visibility = View.VISIBLE
+ attentionIv.visibility = View.GONE
+ attentionLottie.setAnimation("lottie/follow.json")
+ attentionLottie.playAnimation()
+ attentionLottie.doOnAnimationEnd {
+ attentionLottie.visibility = View.GONE
+ mViewModel?.follow(videoEntity)
+ recordMta("关注用户")
+ uploadVideoStreamingPlaying("关注用户")
+ MtaHelper.onEvent("视频详情", "关注用户", mCombinedTitleAndId)
+ }
}
}
}
@@ -402,6 +412,27 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib
}
}
+ private fun playWechatAnimation() {
+ if (weChatAnimate == null) {
+ shareIv.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_video_detail_share_wechat))
+ val scaleXAnimation = ObjectAnimator.ofFloat(shareIv, "scaleX", 1f, 0.9f, 1f)
+ scaleXAnimation.repeatCount = -1
+ val scaleYAnimation = ObjectAnimator.ofFloat(shareIv, "scaleY", 1f, 0.9f, 1f)
+ scaleYAnimation.repeatCount = -1
+
+ weChatAnimate = AnimatorSet()
+ weChatAnimate?.play(scaleXAnimation)?.with(scaleYAnimation)
+ weChatAnimate?.duration = 1500
+ weChatAnimate?.start()
+ }
+ }
+
+ fun removeWechatAnimation() {
+ weChatAnimate?.end()
+ weChatAnimate = null
+ shareIv.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_video_detail_share))
+ }
+
override fun createNetWorkState() {
if (mNetInfoModule == null) {
mNetInfoModule = NetInfoModule(mContext.applicationContext, NetInfoModule.NetChangeListener { state ->
@@ -707,6 +738,7 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib
repeatPlayCount++
seekOnStart = 0
startPlayLogic()
+ playWechatAnimation()
}
override fun onCompletion() {
diff --git a/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailActivity.kt b/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailActivity.kt
index e4d97e59db..7522b4a1cc 100644
--- a/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailActivity.kt
+++ b/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailActivity.kt
@@ -12,10 +12,6 @@ import java.util.*
// 由于兼容性问题,本游戏详情页不应该被低于 Android 4.4 的设备打开
class VideoDetailActivity : BaseActivity() {
var uuid = UUID.randomUUID()
-// var isPauseVideo = true//跳转页面时是否需要暂停视频
- var mLastTime = 0L
- var mIsDown = false
- private val mIntervalTime = 500
override fun getLayoutId(): Int {
return R.layout.activity_video_detail
@@ -35,22 +31,6 @@ class VideoDetailActivity : BaseActivity() {
supportFragmentManager.beginTransaction().replace(R.id.layout_activity_content, containerFragment).commitNowAllowingStateLoss()
}
- //限制视频滑动频率
- override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
- if (ev.action == MotionEvent.ACTION_DOWN) {
- mIsDown = true
- } else if (ev.action == MotionEvent.ACTION_MOVE) {
- if (mIsDown && System.currentTimeMillis() - mLastTime < mIntervalTime) {
- return true
- }
- } else if (ev.action == MotionEvent.ACTION_UP) {
- mLastTime = System.currentTimeMillis()
- mIsDown = false
- }
- return super.dispatchTouchEvent(ev)
- }
-
-
override fun onDestroy() {
CustomManager.releaseAllVideos("detail_$uuid")
mBaseHandler.postDelayed({
diff --git a/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailContainerFragment.kt b/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailContainerFragment.kt
index 73445d5665..1d08d21ce3 100644
--- a/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailContainerFragment.kt
+++ b/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailContainerFragment.kt
@@ -220,6 +220,7 @@ class VideoDetailContainerFragment : BaseLazyFragment(), OnBackPressedListener {
mViewModel.entranceDetail, video.id, mViewModel.uuid, 0.0, 0, 0, "play")
}
val detailPlayerView = recyclerview.findViewHolderForAdapterPosition(position)?.itemView as? DetailPlayerView
+ detailPlayerView?.removeWechatAnimation()
detailPlayerView?.repeatPlayCount = 0
detailPlayerView?.unObserveVolume(requireActivity() as AppCompatActivity)
detailPlayerView?.removeLikeAnimation()
diff --git a/app/src/main/res/drawable-xxhdpi/ic_video_detail_share_wechat.png b/app/src/main/res/drawable-xxhdpi/ic_video_detail_share_wechat.png
new file mode 100644
index 0000000000..072bcbbf52
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_video_detail_share_wechat.png differ
diff --git a/app/src/main/res/drawable/bg_video_detail_name.xml b/app/src/main/res/drawable/bg_video_detail_name.xml
index f3f7db9557..ccfc39049f 100644
--- a/app/src/main/res/drawable/bg_video_detail_name.xml
+++ b/app/src/main/res/drawable/bg_video_detail_name.xml
@@ -1,6 +1,6 @@
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home_video.xml b/app/src/main/res/layout/fragment_home_video.xml
index 8ddca1e219..85a2915c76 100644
--- a/app/src/main/res/layout/fragment_home_video.xml
+++ b/app/src/main/res/layout/fragment_home_video.xml
@@ -49,7 +49,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/mTabIndicator"
- android:layout_marginTop="24dp">
+ android:layout_marginTop="5dp">
+
@@ -318,7 +326,7 @@
android:id="@+id/commentContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="14dp"
+ android:layout_marginTop="20dp"
android:gravity="center"
android:orientation="vertical">
@@ -343,11 +351,12 @@
android:id="@+id/shareContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="14dp"
+ android:layout_marginTop="20dp"
android:gravity="center"
android:orientation="vertical">