diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/road/V2XRoadVideoWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/road/V2XRoadVideoWindow.java
index 36a9a38f4d..16307d9c9c 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/road/V2XRoadVideoWindow.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/road/V2XRoadVideoWindow.java
@@ -1,7 +1,9 @@
package com.mogo.module.v2x.scenario.scene.road;
import android.content.Context;
+import android.graphics.Bitmap;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
@@ -17,20 +19,26 @@ import com.mogo.module.v2x.listener.V2XWindowStatusListener;
import com.mogo.module.v2x.listener.VideoAdapterCallBack;
import com.mogo.module.v2x.scenario.view.IV2XWindow;
import com.mogo.module.v2x.view.SimpleCoverVideoPlayer;
+import com.mogo.utils.BitmapHelper;
import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder;
+import com.shuyu.gsyvideoplayer.listener.VideoAllCallBack;
import com.shuyu.gsyvideoplayer.utils.GSYVideoType;
+import com.shuyu.gsyvideoplayer.video.base.GSYVideoView;
import java.util.ArrayList;
import static com.mogo.module.v2x.VideoInitKt.initVideo;
import static com.shuyu.gsyvideoplayer.utils.GSYVideoType.SCREEN_MATCH_FULL;
-
+/*
+https://github.com/CarGuo/GSYVideoPlayer/tree/master/doc SimpleCoverVideoPlayer文档
+* */
public class V2XRoadVideoWindow extends RelativeLayout implements IV2XWindow, IDestroyable, VideoAdapterCallBack {
private static final String TAG = "V2XRoadVideoWindow";
private V2XWindowStatusListener mV2XWindowStatusListener;
private ImageView playImageView;
+ private ImageView thumbnailImage;
private ImageView closeImage;
@@ -64,14 +72,76 @@ public class V2XRoadVideoWindow extends RelativeLayout implements IV2XWindow, ID
LayoutInflater.from(mContext).inflate(R.layout.window_road_video_layout, this);
initVideo();
playImageView = this.findViewById(R.id.window_video_play);
+ thumbnailImage = this.findViewById(R.id.thumbnail_image);
simpleCoverVideoPlayer = this.findViewById(R.id.roadVideoView);
GSYVideoType.setShowType(SCREEN_MATCH_FULL);
- //mCurrentAspectRatio
-// simpleCoverVideoPlayer.
+
closeImage = this.findViewById(R.id.roadVideoClose);
closeImage.setOnClickListener(v -> {
close();
});
+ simpleCoverVideoPlayer.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Log.d(TAG, "onClick啦啦啦啦啦啦啦啦");
+ if (simpleCoverVideoPlayer.getCurrentState() == GSYVideoView.CURRENT_STATE_PAUSE) {/*播放中*/
+ resume();
+ } else {
+ pause();
+ }
+ }
+ });
+ }
+
+ /*
+ * 开始播放
+ * */
+ private void startPlayWithVideoUrl(String videoUrl) {
+ gsyVideoOptionBuilder.setUrl(videoUrl).setCacheWithPlay(false).setPlayTag(TAG)
+ .build(simpleCoverVideoPlayer);
+ simpleCoverVideoPlayer.getStartButton().performClick();
+ thumbnailImage.setVisibility(View.GONE);
+ playImageView.setVisibility(View.GONE);
+ playImageView.setImageResource(R.drawable.v2x_video_pause);
+ playImageView.setVisibility(View.GONE);
+ }
+
+ /*
+ * 暂停
+ * */
+ private void pause() {
+ playImageView.setVisibility(View.VISIBLE);
+ thumbnailImage.setVisibility(View.GONE);
+ playImageView.setOnClickListener(v -> {
+ simpleCoverVideoPlayer.onVideoResume();
+ });
+ thumbnailImage.setOnClickListener(v -> {
+ simpleCoverVideoPlayer.onVideoResume();
+ });
+ }
+
+ /*
+ * 继续
+ * */
+ private void resume() {
+ playImageView.setVisibility(View.GONE);
+ thumbnailImage.setVisibility(View.GONE);
+ }
+
+ /*
+ * 播放结束后
+ * */
+ private void complete(Bitmap firstbitmap, String path) {
+ thumbnailImage.setVisibility(View.VISIBLE);
+ thumbnailImage.setImageBitmap(firstbitmap);
+ playImageView.setImageResource(R.drawable.v2x_icon_event_play);
+ playImageView.setVisibility(View.VISIBLE);
+ playImageView.setOnClickListener(v -> {
+ startPlayWithVideoUrl(path);
+ });
+ thumbnailImage.setOnClickListener(v -> {
+ startPlayWithVideoUrl(path);
+ });
}
@Override
@@ -86,9 +156,105 @@ public class V2XRoadVideoWindow extends RelativeLayout implements IV2XWindow, ID
return;
}
if (path.contains(".mp4")) {
- gsyVideoOptionBuilder.setUrl(path).setCacheWithPlay(false).setPlayTag(TAG)
- .build(simpleCoverVideoPlayer);
- simpleCoverVideoPlayer.getStartButton().performClick();
+ startPlayWithVideoUrl(path);
+ Bitmap firstbitmap = BitmapHelper.getVideoThumbnail(path);/*获取第一帧图*/
+
+ simpleCoverVideoPlayer.setVideoAllCallBack(new VideoAllCallBack() {
+ @Override
+ public void onAutoComplete(String url, Object... objects) {
+ complete(firstbitmap, path);
+ }
+
+ @Override
+ public void onClickResume(String url, Object... objects) {
+ thumbnailImage.setVisibility(View.GONE);
+ playImageView.setVisibility(View.GONE);
+ }
+
+ @Override
+ public void onClickStop(String url, Object... objects) {
+ Log.d(TAG,"onClickStop");
+ }
+
+ @Override
+ public void onStartPrepared(String url, Object... objects) {
+ Log.d(TAG,"onStartPrepared");
+ }
+
+ @Override
+ public void onPrepared(String url, Object... objects) {
+ }
+
+ @Override
+ public void onClickStartIcon(String url, Object... objects) {
+ }
+
+ @Override
+ public void onClickStartError(String url, Object... objects) {
+ }
+
+ @Override
+ public void onClickStopFullscreen(String url, Object... objects) {
+ }
+
+ @Override
+ public void onClickResumeFullscreen(String url, Object... objects) {
+ }
+
+ @Override
+ public void onClickSeekbar(String url, Object... objects) {
+ }
+
+ @Override
+ public void onClickSeekbarFullscreen(String url, Object... objects) {
+ }
+
+ @Override
+ public void onEnterFullscreen(String url, Object... objects) {
+ }
+
+ @Override
+ public void onQuitFullscreen(String url, Object... objects) {
+ }
+
+ @Override
+ public void onQuitSmallWidget(String url, Object... objects) {
+ }
+
+ @Override
+ public void onEnterSmallWidget(String url, Object... objects) {
+ }
+
+ @Override
+ public void onTouchScreenSeekVolume(String url, Object... objects) {
+ }
+
+ @Override
+ public void onTouchScreenSeekPosition(String url, Object... objects) {
+ }
+
+ @Override
+ public void onTouchScreenSeekLight(String url, Object... objects) {
+ }
+
+ @Override
+ public void onPlayError(String url, Object... objects) {
+ }
+
+ @Override
+ public void onClickStartThumb(String url, Object... objects) {
+ }
+
+ @Override
+ public void onClickBlank(String url, Object... objects) {
+ }
+
+ @Override
+ public void onClickBlankFullscreen(String url, Object... objects) {
+ Log.d(TAG, "onClickBlankFullscreen");
+
+ }
+ });
}
}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/SimpleCoverVideoPlayer.kt b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/SimpleCoverVideoPlayer.kt
index bf8302607e..d8f2f27e4e 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/SimpleCoverVideoPlayer.kt
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/SimpleCoverVideoPlayer.kt
@@ -2,7 +2,6 @@ package com.mogo.module.v2x.view
import android.content.Context
import android.util.AttributeSet
-import android.util.Log
import android.view.Surface
import android.view.View
import android.widget.ImageView
@@ -38,7 +37,7 @@ class SimpleCoverVideoPlayer : StandardGSYVideoPlayer {
start = findViewById(R.id.start)
fullscreen = findViewById(R.id.fullscreen)
if (mThumbImageViewLayout != null
- && (mCurrentState == -1 || mCurrentState == GSYVideoView.CURRENT_STATE_NORMAL || mCurrentState == GSYVideoView.CURRENT_STATE_ERROR)
+ && (mCurrentState == -1 || mCurrentState == GSYVideoView.CURRENT_STATE_NORMAL || mCurrentState == GSYVideoView.CURRENT_STATE_ERROR)
) {
mThumbImageViewLayout.visibility = View.VISIBLE
}
@@ -65,19 +64,27 @@ class SimpleCoverVideoPlayer : StandardGSYVideoPlayer {
//加载图片
val requestOptions = RequestOptions()
// .placeholder(R.drawable.tanlu_normal_image)
- .error(R.drawable.video_loading)
+ .error(R.drawable.video_loading_img)
Glide.with(mContext).asBitmap()
- .load(url)
- .apply(requestOptions)
- .into(SkinAbleBitmapTarget(coverImage, requestOptions))
+ .load(url)
+ .apply(requestOptions)
+ .into(SkinAbleBitmapTarget(coverImage, requestOptions))
}
+ /*
+ * 默认双击暂停
+ * */
+ override fun onClickUiToggle(){
+ super.touchDoubleUp()
+ }
+
+
override fun updateStartImage() {
when (mCurrentState) {
-// GSYVideoView.CURRENT_STATE_PLAYING -> start.setImageResource(R.drawable.selector_bg_btn_pause)
-// GSYVideoView.CURRENT_STATE_ERROR -> start.setImageResource(R.drawable.main_video_refresh_btn)
-// else -> start.setImageResource(R.drawable.selector_bg_btn_play)
+ GSYVideoView.CURRENT_STATE_PLAYING -> start.setImageResource(R.drawable.v2x_video_pause)
+// GSYVideoView.CURRENT_STATE_ERROR -> start.setImageResource(R.drawable.live_error)
+ else -> start.setImageResource(R.drawable.v2x_icon_event_play)
}
}
@@ -153,7 +160,7 @@ class SimpleCoverVideoPlayer : StandardGSYVideoPlayer {
start -> {
}
- else -> {
+ else -> {
}
}
diff --git a/modules/mogo-module-v2x/src/main/res/drawable-ldpi/v2x_video_pause.png b/modules/mogo-module-v2x/src/main/res/drawable-ldpi/v2x_video_pause.png
new file mode 100644
index 0000000000..90b401f17f
Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-ldpi/v2x_video_pause.png differ
diff --git a/modules/mogo-module-v2x/src/main/res/drawable-mdpi/v2x_video_pause.png b/modules/mogo-module-v2x/src/main/res/drawable-mdpi/v2x_video_pause.png
new file mode 100644
index 0000000000..90b401f17f
Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-mdpi/v2x_video_pause.png differ
diff --git a/modules/mogo-module-v2x/src/main/res/drawable-xhdpi-1920x1000/v2x_video_pause.png b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi-1920x1000/v2x_video_pause.png
new file mode 100644
index 0000000000..cbd22bb486
Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi-1920x1000/v2x_video_pause.png differ
diff --git a/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_video_pause.png b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_video_pause.png
new file mode 100644
index 0000000000..cbd22bb486
Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_video_pause.png differ
diff --git a/modules/mogo-module-v2x/src/main/res/layout/window_road_video.xml b/modules/mogo-module-v2x/src/main/res/layout/window_road_video.xml
index 04c2ed5bb4..0eebfbca02 100644
--- a/modules/mogo-module-v2x/src/main/res/layout/window_road_video.xml
+++ b/modules/mogo-module-v2x/src/main/res/layout/window_road_video.xml
@@ -28,8 +28,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
- android:scaleType="centerCrop"
- android:src="@drawable/v2x_icon_live_logo"/>
+ android:scaleType="centerCrop" />
@@ -49,10 +48,10 @@
android:layout_gravity="bottom"
android:background="@null"
android:max="100"
- android:visibility="gone"
android:maxHeight="@dimen/dp_6"
android:minHeight="@dimen/dp_6"
- android:thumb="@null" />
+ android:thumb="@null"
+ android:visibility="gone" />
+ android:layout_gravity="center_vertical"
+ android:visibility="gone" />
diff --git a/modules/mogo-module-v2x/src/main/res/layout/window_road_video_layout.xml b/modules/mogo-module-v2x/src/main/res/layout/window_road_video_layout.xml
index 6bfd64acd8..ec3e8626d3 100644
--- a/modules/mogo-module-v2x/src/main/res/layout/window_road_video_layout.xml
+++ b/modules/mogo-module-v2x/src/main/res/layout/window_road_video_layout.xml
@@ -10,19 +10,33 @@
android:id="@+id/rlRoadEventList"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_674"
- android:layout_marginTop="@dimen/dp_30"
android:layout_marginLeft="@dimen/dp_30"
+ android:layout_marginTop="@dimen/dp_30"
android:layout_marginRight="@dimen/dp_30"
android:layout_marginBottom="@dimen/dp_327"
- app:roundLayoutRadius="@dimen/dp_28"
- android:background="#D9FFFFFF">
+ android:background="#D9FFFFFF"
+ app:roundLayoutRadius="@dimen/dp_28">
+ android:layout_alignParentBottom="true"
+ android:clickable="true" />
+
+
+