Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
android_vedio
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
android
android_vedio
Commits
7ca10b3a
Commit
7ca10b3a
authored
Jul 13, 2023
by
jyx
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加倒计时
parent
30866098
Changes
12
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
286 additions
and
11 deletions
+286
-11
VedioBean.java
.../main/java/com/mints/wisdomclean/mvp/model/VedioBean.java
+9
-0
MyFragment.kt
...main/java/com/mints/wisdomclean/ui/fragment/MyFragment.kt
+0
-1
NestedScrollableHost.kt
.../com/mints/wisdomclean/ui/widgets/NestedScrollableHost.kt
+98
-0
VipCountDialog.kt
...n/java/com/mints/wisdomclean/ui/widgets/VipCountDialog.kt
+82
-0
DramaApiDetailActivity.kt
...ava/com/mints/wisdomclean/video/DramaApiDetailActivity.kt
+14
-0
VideoActivity.kt
...rc/main/java/com/mints/wisdomclean/video/VideoActivity.kt
+21
-6
dialog_vip_count.xml
video/app/src/main/res/layout/dialog_vip_count.xml
+42
-0
drama_activity_api_detail.xml
video/app/src/main/res/layout/drama_activity_api_detail.xml
+5
-0
fragment_watch_video.xml
video/app/src/main/res/layout/fragment_watch_video.xml
+9
-4
bg_vip_count.png
video/app/src/main/res/mipmap-xhdpi/bg_vip_count.png
+0
-0
bg_vip_count_circle.png
video/app/src/main/res/mipmap-xhdpi/bg_vip_count_circle.png
+0
-0
styles.xml
video/app/src/main/res/values/styles.xml
+6
-0
No files found.
video/app/src/main/java/com/mints/wisdomclean/mvp/model/VedioBean.java
View file @
7ca10b3a
...
...
@@ -27,6 +27,15 @@ public class VedioBean implements Serializable {
private
int
recommendIndex
;
// 推荐视频第几集
private
long
seeUpdateTime
;
// 时间戳
private
boolean
checked
;
// 选中
private
int
tipMaxIndex
;
// 倒计时弹框
public
int
getTipMaxIndex
()
{
return
tipMaxIndex
;
}
public
void
setTipMaxIndex
(
int
tipMaxIndex
)
{
this
.
tipMaxIndex
=
tipMaxIndex
;
}
public
boolean
isChecked
()
{
return
checked
;
...
...
video/app/src/main/java/com/mints/wisdomclean/ui/fragment/MyFragment.kt
View file @
7ca10b3a
...
...
@@ -14,7 +14,6 @@ import com.mints.wisdomclean.ui.activitys.*
import
com.mints.wisdomclean.ui.fragment.base.BaseFragment
import
com.mints.wisdomclean.utils.SpanUtils
import
com.mints.wisdomclean.utils.TimeRender
import
com.mints.wisdomclean.video.DPHolderManager
import
kotlinx.android.synthetic.main.fragment_main_my.*
/**
...
...
video/app/src/main/java/com/mints/wisdomclean/ui/widgets/NestedScrollableHost.kt
0 → 100644
View file @
7ca10b3a
package
com.mints.wisdomclean.ui.widgets
import
android.content.Context
import
android.util.AttributeSet
import
android.view.MotionEvent
import
android.view.View
import
android.view.ViewConfiguration
import
android.widget.FrameLayout
import
androidx.viewpager2.widget.ViewPager2
import
androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL
import
kotlin.math.absoluteValue
import
kotlin.math.sign
class
NestedScrollableHost
:
FrameLayout
{
constructor
(
context
:
Context
)
:
super
(
context
)
constructor
(
context
:
Context
,
attrs
:
AttributeSet
?)
:
super
(
context
,
attrs
)
private
var
touchSlop
=
0
private
var
initialX
=
0f
private
var
initialY
=
0f
//循环遍历找到viewPager2
private
val
parentViewPager
:
ViewPager2
?
get
()
{
var
v
:
View
?
=
parent
as
?
View
while
(
v
!=
null
&&
v
!
is
ViewPager2
)
{
v
=
v
.
parent
as
?
View
}
return
v
as
?
ViewPager2
}
//找到子RecyclerView
private
val
child
:
View
?
get
()
=
if
(
childCount
>
0
)
getChildAt
(
0
)
else
null
init
{
//最小滑动距离
touchSlop
=
ViewConfiguration
.
get
(
context
).
scaledTouchSlop
}
private
fun
canChildScroll
(
orientation
:
Int
,
delta
:
Float
):
Boolean
{
val
direction
=
-
delta
.
sign
.
toInt
()
return
when
(
orientation
)
{
//判断子RecyclerView在水平方向是否可以滑动deltaX
0
->
child
?.
canScrollHorizontally
(
direction
)
?:
false
//判断子RecyclerView在竖直方向是否可以滑动deltaY
1
->
child
?.
canScrollVertically
(
direction
)
?:
false
else
->
throw
IllegalArgumentException
()
}
}
override
fun
onInterceptTouchEvent
(
e
:
MotionEvent
):
Boolean
{
handleInterceptTouchEvent
(
e
)
return
super
.
onInterceptTouchEvent
(
e
)
}
private
fun
handleInterceptTouchEvent
(
e
:
MotionEvent
)
{
val
orientation
=
parentViewPager
?.
orientation
?:
return
//如果子RecyclerView在viewPager2的滑动方向上不能滑动直接返回
if
(!
canChildScroll
(
orientation
,
-
1f
)
&&
!
canChildScroll
(
orientation
,
1f
))
{
return
}
if
(
e
.
action
==
MotionEvent
.
ACTION_DOWN
)
{
initialX
=
e
.
x
initialY
=
e
.
y
//down事件直接强制禁止父view拦截事件,后续事件先交给子RecyclerView先判断是否能够消费
//如果这一块不强制禁止父view会导致后续事件可能直接没到子RecyclerView就被父view拦截了
//默认RecyclerView onTouchEvent返回true但是viewPager2会在onInterceptTouchEvent拦截住
parent
.
requestDisallowInterceptTouchEvent
(
true
)
}
else
if
(
e
.
action
==
MotionEvent
.
ACTION_MOVE
)
{
//计算手指滑动距离
val
dx
=
e
.
x
-
initialX
val
dy
=
e
.
y
-
initialY
val
isVpHorizontal
=
orientation
==
ORIENTATION_HORIZONTAL
val
scaledDx
=
dx
.
absoluteValue
*
if
(
isVpHorizontal
)
.
5f
else
1f
val
scaledDy
=
dy
.
absoluteValue
*
if
(
isVpHorizontal
)
1f
else
.
5f
//滑动距离超过最小滑动值
if
(
scaledDx
>
touchSlop
||
scaledDy
>
touchSlop
)
{
if
(
isVpHorizontal
==
(
scaledDy
>
scaledDx
))
{
//如果viewPager2是横向滑动但手势是竖直方向滑动,则允许所有父类拦截
parent
.
requestDisallowInterceptTouchEvent
(
false
)
}
else
{
//手势滑动方向和viewPage2是同方向的,需要询问子RecyclerView是否在同方向能滑动
if
(
canChildScroll
(
orientation
,
if
(
isVpHorizontal
)
dx
else
dy
))
{
//子RecyclerView能滑动直接禁止父view拦截事件
parent
.
requestDisallowInterceptTouchEvent
(
true
)
}
else
{
//子RecyclerView不能滑动(划到第一个Item还往右滑或者划到最后面一个Item还往左划的时候)允许父view拦截
parent
.
requestDisallowInterceptTouchEvent
(
false
)
}
}
}
}
}
}
video/app/src/main/java/com/mints/wisdomclean/ui/widgets/VipCountDialog.kt
0 → 100644
View file @
7ca10b3a
package
com.mints.wisdomclean.ui.widgets
import
android.app.Activity
import
android.app.Dialog
import
android.content.Intent
import
android.view.Gravity
import
android.view.KeyEvent
import
android.view.View
import
android.view.WindowManager
import
android.widget.TextView
import
com.mints.wisdomclean.R
import
com.mints.wisdomclean.ui.activitys.VipActivity
import
com.mints.wisdomclean.ui.widgets.countdowntimer.CountDownTimerSupport
import
com.mints.wisdomclean.ui.widgets.countdowntimer.OnCountDownTimerListener
class
VipCountDialog
(
activity
:
Activity
)
:
Dialog
(
activity
,
R
.
style
.
dialog
)
{
private
val
lp
:
WindowManager
.
LayoutParams
var
timer
:
CountDownTimerSupport
?
=
null
init
{
setContentView
(
R
.
layout
.
dialog_vip_count
)
// 设置window属性
lp
=
window
!!
.
attributes
lp
.
gravity
=
Gravity
.
CENTER
lp
.
width
=
WindowManager
.
LayoutParams
.
MATCH_PARENT
lp
.
windowAnimations
=
R
.
style
.
DialogAnimFade
window
!!
.
attributes
=
lp
// 设置外部不可关闭
setCancelable
(
false
)
setCanceledOnTouchOutside
(
false
)
setOnKeyListener
{
dialogInterface
,
i
,
keyEvent
->
i
==
KeyEvent
.
KEYCODE_BACK
}
val
fm
=
findViewById
<
View
>(
R
.
id
.
fm
)
val
text_count
=
findViewById
<
TextView
>(
R
.
id
.
text_count
)
timer
=
CountDownTimerSupport
(
3000L
,
1000
)
timer
?.
setOnCountDownTimerListener
(
object
:
OnCountDownTimerListener
{
override
fun
onTick
(
millisUntilFinished
:
Long
)
{
text_count
.
text
=
(
millisUntilFinished
/
1000L
).
toString
()
}
override
fun
onFinish
()
{
dismiss
()
}
})
timer
?.
start
()
fm
.
setOnClickListener
{
activity
.
startActivity
(
Intent
(
activity
,
VipActivity
::
class
.
java
))
dismiss
()
}
}
override
fun
dismiss
()
{
super
.
dismiss
()
this
.
mOnDialogDismiss
?.
onDialogDismiss
()
}
override
fun
onDetachedFromWindow
()
{
super
.
onDetachedFromWindow
()
timer
?.
stop
()
timer
=
null
}
private
var
mOnDialogDismiss
:
OnDialogDismiss
?
=
null
fun
setOnDialogDismiss
(
onDialogDismiss
:
OnDialogDismiss
):
Dialog
{
this
.
mOnDialogDismiss
=
onDialogDismiss
return
this
}
interface
OnDialogDismiss
{
fun
onDialogDismiss
()
}
}
\ No newline at end of file
video/app/src/main/java/com/mints/wisdomclean/video/DramaApiDetailActivity.kt
View file @
7ca10b3a
...
...
@@ -29,6 +29,7 @@ import com.mints.wisdomclean.ui.activitys.base.BaseActivity
import
com.mints.wisdomclean.ui.adapter.VideoEpisodeAdapter
import
com.mints.wisdomclean.ui.widgets.DialogListener
import
com.mints.wisdomclean.ui.widgets.VideoEpisodeDialog
import
com.mints.wisdomclean.ui.widgets.VipCountDialog
import
com.mints.wisdomclean.utils.LogUtil
import
kotlinx.android.synthetic.main.drama_activity_api_detail.*
import
org.json.JSONObject
...
...
@@ -286,6 +287,8 @@ class DramaApiDetailActivity : BaseActivity(), VideoEpisodeAdapter.OnEpisodeClic
mVedioBean
!!
.
seeIndex
=
position
+
1
LogUtil
.
d
(
"AAAAA -> "
+
mVedioBean
!!
.
seeIndex
+
" - "
+
position
)
LocalVedioManager
.
commitVedio
(
mVedioBean
!!
)
showVipCountDialog
(
position
)
}
override
fun
onDPVideoPlay
(
map
:
MutableMap
<
String
,
Any
>?)
{
...
...
@@ -554,4 +557,15 @@ class DramaApiDetailActivity : BaseActivity(), VideoEpisodeAdapter.OnEpisodeClic
}
}
private
fun
showVipCountDialog
(
position
:
Int
)
{
if
(
mVedioBean
!!
.
tipMaxIndex
==
0
||
mVedioBean
!!
.
tipMaxIndex
-
1
<
position
)
return
VipCountDialog
(
this
)
.
setOnDialogDismiss
(
object
:
VipCountDialog
.
OnDialogDismiss
{
override
fun
onDialogDismiss
()
{
}
})
.
show
()
}
}
\ No newline at end of file
video/app/src/main/java/com/mints/wisdomclean/video/VideoActivity.kt
View file @
7ca10b3a
...
...
@@ -28,7 +28,7 @@ import com.mints.wisdomclean.ui.activitys.base.BaseActivity
import
com.mints.wisdomclean.ui.adapter.VideoEpisodeAdapter
import
com.mints.wisdomclean.ui.widgets.DialogListener
import
com.mints.wisdomclean.ui.widgets.VideoEpisodeDialog
import
com.mints.wisdomclean.u
tils.LogUtil
import
com.mints.wisdomclean.u
i.widgets.VipCountDialog
import
kotlinx.android.synthetic.main.activity_video.*
import
java.util.HashMap
...
...
@@ -116,7 +116,8 @@ class VideoActivity : BaseActivity(), View.OnClickListener, VideoView,
override
fun
onInitComplete
()
{
dialog
?.
setCurrentIndex
(
mCurrentPosition
)
//初始化 自动播放
autoPlayVideo
()
// autoPlayVideo()
showVipCountDialog
(
mCurrentPosition
)
}
override
fun
onPageRelease
(
isNext
:
Boolean
,
position
:
Int
)
{
...
...
@@ -137,7 +138,9 @@ class VideoActivity : BaseActivity(), View.OnClickListener, VideoView,
// loadData()
}
mCurrentPosition
=
position
autoPlayVideo
()
// autoPlayVideo()
showVipCountDialog
(
mCurrentPosition
)
dialog
?.
setCurrentIndex
(
mCurrentPosition
)
}
...
...
@@ -179,8 +182,6 @@ class VideoActivity : BaseActivity(), View.OnClickListener, VideoView,
// VIdeoindex -> seeIndex
mVedioBean
!!
.
seeIndex
=
videos
[
mCurrentPosition
].
vedioIndex
LogUtil
.
d
(
"AAAAA -> "
+
mVedioBean
!!
.
seeIndex
+
" - "
+
mCurrentPosition
+
" "
+
videos
[
mCurrentPosition
].
vedioIndex
)
LocalVedioManager
.
commitVedio
(
mVedioBean
!!
)
//播放开始,进行倒计时
}
...
...
@@ -276,7 +277,8 @@ class VideoActivity : BaseActivity(), View.OnClickListener, VideoView,
mCurrentPosition
=
position
recy
.
scrollToPosition
(
position
)
Handler
(
Looper
.
getMainLooper
()).
postDelayed
({
autoPlayVideo
()
showVipCountDialog
(
mCurrentPosition
)
// autoPlayVideo()
},
300
)
}
...
...
@@ -359,5 +361,18 @@ class VideoActivity : BaseActivity(), View.OnClickListener, VideoView,
}
}
private
fun
showVipCountDialog
(
position
:
Int
)
{
if
(
mVedioBean
!!
.
tipMaxIndex
==
0
||
mVedioBean
!!
.
tipMaxIndex
-
1
<
position
)
{
autoPlayVideo
()
return
}
VipCountDialog
(
this
)
.
setOnDialogDismiss
(
object
:
VipCountDialog
.
OnDialogDismiss
{
override
fun
onDialogDismiss
()
{
autoPlayVideo
()
}
})
.
show
()
}
}
\ No newline at end of file
video/app/src/main/res/layout/dialog_vip_count.xml
0 → 100644
View file @
7ca10b3a
<?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=
"match_parent"
>
<FrameLayout
android:id=
"@+id/fm"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_centerInParent=
"true"
android:layout_margin=
"50dp"
android:background=
"@drawable/shape_banner_write"
>
<ImageView
android:layout_width=
"match_parent"
android:layout_height=
"200dp"
android:scaleType=
"centerCrop"
android:src=
"@mipmap/bg_vip_count"
/>
<TextView
android:id=
"@+id/text_count"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:layout_marginBottom=
"20dp"
android:background=
"@mipmap/bg_vip_count_circle"
android:gravity=
"center"
android:text=
"3"
android:textColor=
"@color/tv_message_recente_money"
android:textSize=
"30sp"
android:textStyle=
"bold"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal|bottom"
android:layout_marginBottom=
"30dp"
android:text=
"一分钱签约会员解锁全部剧集"
android:textColor=
"@color/black"
/>
</FrameLayout>
</RelativeLayout>
video/app/src/main/res/layout/drama_activity_api_detail.xml
View file @
7ca10b3a
...
...
@@ -11,6 +11,11 @@
android:layout_height=
"match_parent"
android:layout_marginBottom=
"50dp"
/>
<View
android:id=
"@+id/view"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
/>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
...
...
video/app/src/main/res/layout/fragment_watch_video.xml
View file @
7ca10b3a
...
...
@@ -4,10 +4,15 @@
android:layout_height=
"match_parent"
android:background=
"@color/black"
>
<com.mints.wisdomclean.ui.widgets.NestedScrollableHost
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/recy"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_marginTop=
"30dp"
/>
</com.mints.wisdomclean.ui.widgets.NestedScrollableHost>
</FrameLayout>
\ No newline at end of file
video/app/src/main/res/mipmap-xhdpi/bg_vip_count.png
0 → 100644
View file @
7ca10b3a
63.1 KB
video/app/src/main/res/mipmap-xhdpi/bg_vip_count_circle.png
0 → 100644
View file @
7ca10b3a
4.18 KB
video/app/src/main/res/values/styles.xml
View file @
7ca10b3a
<resources>
<style
name=
"SwipeBackLayout"
>
<item
name=
"edge_size"
>
0dp
</item>
</style>
...
...
@@ -77,6 +78,11 @@
<item
name=
"android:windowExitAnimation"
>
@anim/dialog_bottom_out
</item>
</style>
<style
name=
"DialogAnimFade"
parent=
"@android:style/Animation"
>
<item
name=
"android:windowEnterAnimation"
>
@anim/fade_in
</item>
<item
name=
"android:windowExitAnimation"
>
@anim/fade_out
</item>
</style>
<style
name=
"CustomCheckboxTheme"
parent=
"@android:style/Widget.CompoundButton.CheckBox"
>
<item
name=
"android:button"
>
@drawable/checkbox_style
</item>
</style>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment