SeekDialog.java
2.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package com.wd.player.gesturedialog;
import android.app.Activity;
import com.aliyun.svideo.wd.player.R;
import com.wd.player.playerutil.TimeFormater;
/*
* Copyright (C) 2010-2018 Alibaba Group Holding Limited.
*/
/**
* 手势滑动的seek提示框。
*/
public class SeekDialog extends BaseGestureDialog {
private int mInitPosition = 0;
private int mFinalPosition = 0;
public SeekDialog(Activity activity, int position) {
super(activity);
mInitPosition = position;
updatePosition(mInitPosition);
}
public void updatePosition(int position) {
//这里更新了网签和往后seek的图片
if (position >= mInitPosition) {
mImageView.setImageResource(R.mipmap.alivc_seek_forward);
} else {
mImageView.setImageResource(R.mipmap.alivc_seek_rewind);
}
mTextView.setText(TimeFormater.formatMs(position));
}
/**
* 目标位置计算算法
*
* @param duration 视频总时长
* @param currentPosition 当前播放位置
* @param deltaPosition 与当前位置相差的时长
* @return
*/
public int getTargetPosition(long duration, long currentPosition, long deltaPosition) {
// seek步长
long finalDeltaPosition;
// 根据视频时长,决定seek步长
long totalMinutes = duration / 1000 / 60;
int hours = (int) (totalMinutes / 60);
int minutes = (int) (totalMinutes % 60);
// 视频时长为1小时以上,小屏和全屏的手势滑动最长为视频时长的十分之一
if (hours >= 1) {
finalDeltaPosition = deltaPosition / 10;
}// 视频时长为31分钟-60分钟时,小屏和全屏的手势滑动最长为视频时长五分之一
else if (minutes > 30) {
finalDeltaPosition = deltaPosition / 5;
}// 视频时长为11分钟-30分钟时,小屏和全屏的手势滑动最长为视频时长三分之一
else if (minutes > 10) {
finalDeltaPosition = deltaPosition / 3;
}// 视频时长为4-10分钟时,小屏和全屏的手势滑动最长为视频时长二分之一
else if (minutes > 3) {
finalDeltaPosition = deltaPosition / 2;
}// 视频时长为1秒钟至3分钟时,小屏和全屏的手势滑动最长为视频结束
else {
finalDeltaPosition = deltaPosition;
}
long targetPosition = finalDeltaPosition + currentPosition;
if (targetPosition < 0) {
targetPosition = 0;
}
if (targetPosition > duration) {
targetPosition = duration;
}
mFinalPosition = (int) targetPosition;
return mFinalPosition;
}
/**
* 获取最终的位置
* @return
*/
public int getFinalPosition() {
return mFinalPosition;
}
}