Skip to content

Commit 5c62291

Browse files
committed
fix calculation of bounds while scrolling
1 parent 5c388c0 commit 5c62291

File tree

2 files changed

+19
-16
lines changed

2 files changed

+19
-16
lines changed

app/src/main/java/com/iknow/android/features/trim/VideoTrimmerUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public class VideoTrimmerUtil {
3333
private static final int SCREEN_WIDTH_FULL = DeviceUtil.getDeviceWidth();
3434
public static final int RECYCLER_VIEW_PADDING = UnitConverter.dpToPx(35);
3535
public static final int VIDEO_FRAMES_WIDTH = SCREEN_WIDTH_FULL - RECYCLER_VIEW_PADDING * 2;
36-
private static final int THUMB_WIDTH = (SCREEN_WIDTH_FULL - RECYCLER_VIEW_PADDING * 2) / VIDEO_MAX_TIME;
36+
public static final int THUMB_WIDTH = (SCREEN_WIDTH_FULL - RECYCLER_VIEW_PADDING * 2) / VIDEO_MAX_TIME;
3737
private static final int THUMB_HEIGHT = UnitConverter.dpToPx(50);
3838

3939
public static void trim(Context context, String inputFile, String outputFile, long startMs, long endMs, final VideoTrimListener callback) {

app/src/main/java/com/iknow/android/widget/VideoTrimmerView.java

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@
3131
import iknow.android.utils.thread.BackgroundExecutor;
3232
import iknow.android.utils.thread.UiThreadExecutor;
3333

34+
import static com.iknow.android.features.trim.VideoTrimmerUtil.MAX_COUNT_RANGE;
35+
import static com.iknow.android.features.trim.VideoTrimmerUtil.MAX_SHOOT_DURATION;
36+
import static com.iknow.android.features.trim.VideoTrimmerUtil.RECYCLER_VIEW_PADDING;
37+
import static com.iknow.android.features.trim.VideoTrimmerUtil.THUMB_WIDTH;
3438
import static com.iknow.android.features.trim.VideoTrimmerUtil.VIDEO_FRAMES_WIDTH;
3539

3640
/**
@@ -101,18 +105,15 @@ private void init(Context context) {
101105

102106
private void initRangeSeekBarView() {
103107
if(mRangeSeekBarView != null) return;
104-
int rangeWidth;
105108
mLeftProgressPos = 0;
106-
if (mDuration <= VideoTrimmerUtil.MAX_SHOOT_DURATION) {
107-
mThumbsTotalCount = VideoTrimmerUtil.MAX_COUNT_RANGE;
108-
rangeWidth = mMaxWidth;
109+
if (mDuration <= MAX_SHOOT_DURATION) {
110+
mThumbsTotalCount = MAX_COUNT_RANGE;
109111
mRightProgressPos = mDuration;
110112
} else {
111-
mThumbsTotalCount = (int) (mDuration * 1.0f / (VideoTrimmerUtil.MAX_SHOOT_DURATION * 1.0f) * VideoTrimmerUtil.MAX_COUNT_RANGE);
112-
rangeWidth = mMaxWidth / VideoTrimmerUtil.MAX_COUNT_RANGE * mThumbsTotalCount;
113-
mRightProgressPos = VideoTrimmerUtil.MAX_SHOOT_DURATION;
113+
mThumbsTotalCount = (int) (mDuration * 1.0f / (MAX_SHOOT_DURATION * 1.0f) * MAX_COUNT_RANGE);
114+
mRightProgressPos = MAX_SHOOT_DURATION;
114115
}
115-
mVideoThumbRecyclerView.addItemDecoration(new SpacesItemDecoration2(VideoTrimmerUtil.RECYCLER_VIEW_PADDING, mThumbsTotalCount));
116+
mVideoThumbRecyclerView.addItemDecoration(new SpacesItemDecoration2(RECYCLER_VIEW_PADDING, mThumbsTotalCount));
116117
mRangeSeekBarView = new RangeSeekBarView(mContext, mLeftProgressPos, mRightProgressPos);
117118
mRangeSeekBarView.setSelectedMinValue(mLeftProgressPos);
118119
mRangeSeekBarView.setSelectedMaxValue(mRightProgressPos);
@@ -122,7 +123,7 @@ private void initRangeSeekBarView() {
122123
mRangeSeekBarView.setOnRangeSeekBarChangeListener(mOnRangeSeekBarChangeListener);
123124
mSeekBarLayout.addView(mRangeSeekBarView);
124125

125-
mAverageMsPx = mDuration * 1.0f / rangeWidth * 1.0f;
126+
mAverageMsPx = (mDuration - MAX_SHOOT_DURATION) / (float)(mThumbsTotalCount - MAX_COUNT_RANGE);
126127
averagePxMs = (mMaxWidth * 1.0f / (mRightProgressPos - mLeftProgressPos));
127128
}
128129

@@ -308,12 +309,14 @@ private void setPlayPauseViewIcon(boolean isPlaying) {
308309
};
309310

310311
private final RecyclerView.OnScrollListener mOnScrollListener = new RecyclerView.OnScrollListener() {
311-
@Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
312+
@Override
313+
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
312314
super.onScrollStateChanged(recyclerView, newState);
313315
Log.d(TAG, "newState = " + newState);
314316
}
315317

316-
@Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
318+
@Override
319+
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
317320
super.onScrolled(recyclerView, dx, dy);
318321
isSeeking = false;
319322
int scrollX = calcScrollXDistance();
@@ -324,11 +327,11 @@ private void setPlayPauseViewIcon(boolean isPlaying) {
324327
}
325328
isOverScaledTouchSlop = true;
326329
//初始状态,why ? 因为默认的时候有35dp的空白!
327-
if (scrollX == -VideoTrimmerUtil.RECYCLER_VIEW_PADDING) {
330+
if (scrollX == -RECYCLER_VIEW_PADDING) {
328331
scrollPos = 0;
329332
} else {
330333
isSeeking = true;
331-
scrollPos = (long) (mAverageMsPx * (VideoTrimmerUtil.RECYCLER_VIEW_PADDING + scrollX));
334+
scrollPos = (long) (mAverageMsPx * (RECYCLER_VIEW_PADDING + scrollX) / THUMB_WIDTH);
332335
mLeftProgressPos = mRangeSeekBarView.getSelectedMinValue() + scrollPos;
333336
mRightProgressPos = mRangeSeekBarView.getSelectedMaxValue() + scrollPos;
334337
Log.d(TAG, "onScrolled >>>> mLeftProgressPos = " + mLeftProgressPos);
@@ -368,8 +371,8 @@ private void playingAnimation() {
368371
mRedProgressIcon.setVisibility(View.VISIBLE);
369372
}
370373
final FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) mRedProgressIcon.getLayoutParams();
371-
int start = (int) (VideoTrimmerUtil.RECYCLER_VIEW_PADDING + (mRedProgressBarPos - scrollPos) * averagePxMs);
372-
int end = (int) (VideoTrimmerUtil.RECYCLER_VIEW_PADDING + (mRightProgressPos - scrollPos) * averagePxMs);
374+
int start = (int) (RECYCLER_VIEW_PADDING + (mRedProgressBarPos - scrollPos) * averagePxMs);
375+
int end = (int) (RECYCLER_VIEW_PADDING + (mRightProgressPos - scrollPos) * averagePxMs);
373376
mRedProgressAnimator = ValueAnimator.ofInt(start, end).setDuration((mRightProgressPos - scrollPos) - (mRedProgressBarPos - scrollPos));
374377
mRedProgressAnimator.setInterpolator(new LinearInterpolator());
375378
mRedProgressAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

0 commit comments

Comments
 (0)