[add] 视频播放器UI 圆角未设置,部分暂停.播放逻辑未添加

This commit is contained in:
liujing
2021-11-02 18:13:09 +08:00
parent 471e4e9b79
commit a844b03503
7 changed files with 240 additions and 4 deletions

3
.idea/gradle.xml generated
View File

@@ -4,7 +4,7 @@
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="GRADLE" />
<option name="testRunner" value="PLATFORM" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
@@ -82,6 +82,7 @@
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />
<option name="useQualifiedModuleNames" value="true" />
</GradleProjectSettings>
</option>
</component>

View File

@@ -1,6 +1,9 @@
package com.mogo.eagle.core.function.hmi.ui.notice;
import android.content.Context;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import androidx.annotation.NonNull;
@@ -12,7 +15,11 @@ import com.mogo.eagle.core.function.hmi.R;
import com.mogo.eagle.core.widget.media.video.SimpleVideoPlayer;
import com.mogo.module.common.dialog.BaseFloatDialog;
import com.mogo.module.common.view.SpacesItemDecoration;
import com.mogo.utils.BitmapHelper;
import com.mogo.utils.ResourcesHelper;
import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder;
import com.shuyu.gsyvideoplayer.listener.VideoAllCallBack;
import com.shuyu.gsyvideoplayer.video.base.GSYVideoView;
import java.util.List;
@@ -22,16 +29,23 @@ import java.util.List;
* @since: 10/26/21
*/
public class NoticeTrafficDialog extends BaseFloatDialog {
private String TAG = "AINotice";
private Context mContext;
private RecyclerView mRecyclerView;
private SimpleVideoPlayer mVideoPlayer;
private NoticeTrafficStylePushData mPushData;
private ImageView close;
private ImageView playImageView;
private ImageView thumbnailImage;
private GSYVideoOptionBuilder gsyVideoOptionBuilder = new GSYVideoOptionBuilder();
public NoticeTrafficDialog(@NonNull Context context, NoticeTrafficStylePushData pushData) {
super(context);
mContext = context;
mPushData = pushData;
mPushData.setPoiImgUrl("https://vd2.bdstatic.com/mda-mk1347dzxdmcre0y/sc/cae_h264/1635819498112313003/mda-mk1347dzxdmcre0y.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1635837585-0-0-5295f6658c7711ba7b4d3ef478a7fbaa&bcevod_channel=searchbox_feed&pd=1&pt=3&abtest=");
mPushData.setIsVideo(true);
initView();
}
@@ -42,6 +56,8 @@ public class NoticeTrafficDialog extends BaseFloatDialog {
public void initView() {
setContentView(R.layout.notice_dialog_traffic_police);
mVideoPlayer = findViewById(R.id.video_player);
thumbnailImage = findViewById(R.id.thumbnail_image);
playImageView = this.findViewById(R.id.window_video_play);
close = findViewById(R.id.notice_traffic_dialog_close);
close.setOnClickListener(v -> {
dismiss();
@@ -61,18 +77,185 @@ public class NoticeTrafficDialog extends BaseFloatDialog {
}
NoticeTrafficAdapter adapter = new NoticeTrafficAdapter(mContext);
mRecyclerView.setAdapter(adapter);
startLive();
mVideoPlayer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mVideoPlayer.getCurrentState() == GSYVideoView.CURRENT_STATE_PAUSE) {/*播放中*/
resume();
} else {
pause();
}
}
});
// startLive();
}
/**
* 暂停
*/
private void pause() {
playImageView.setVisibility(View.VISIBLE);
thumbnailImage.setVisibility(View.GONE);
playImageView.setOnClickListener(v -> {
mVideoPlayer.onVideoResume();
});
thumbnailImage.setOnClickListener(v -> {
mVideoPlayer.onVideoResume();
});
}
/**
* 继续
*/
private void resume() {
playImageView.setImageResource(R.drawable.video_pause);
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.video_play);
playImageView.setVisibility(View.VISIBLE);
playImageView.setOnClickListener(v -> {
startLive();
});
thumbnailImage.setOnClickListener(v -> {
startLive();
});
}
/**
* 视频播放
*/
private void startLive() {
if (mPushData != null && mPushData.getIsVideo() == true) {
try {
Log.d(TAG, "交警事故开始播放视频startLive");
String videoUrl = mPushData.getPoiImgUrl();
gsyVideoOptionBuilder.setUrl(videoUrl).setCacheWithPlay(false).setPlayTag("NoticeTrafficDialog")
.build(mVideoPlayer);
mVideoPlayer.getStartButton().performClick();
thumbnailImage.setVisibility(View.GONE);
playImageView.setVisibility(View.GONE);
startVideoCallBack(videoUrl);
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void startVideoCallBack(String path) {
new Thread(new Runnable() {
@Override
public void run() {
Bitmap firstBitmap = BitmapHelper.getVideoThumbnail(path);/*获取第一帧图*/
mVideoPlayer.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");
}
});
}
}).start();
}
public void cancel() {
}

View File

@@ -0,0 +1,29 @@
package com.mogo.eagle.core.function.hmi.ui.utils;
import java.util.regex.Pattern;
/**
* @author Jing
* @description 文件工具类
* @since: 11/2/21
*/
public class FileUtils {
/**
* @param path 文件链接
* @return 视频文件
*/
boolean isVideo(String path) {
String reg = "(mp4|flv|avi|rm|rmvb|wmv|mov)";
Pattern p = Pattern.compile(reg);
boolean boo = p.matcher("url").find();
return boo;
}
boolean isImage(String path) {
String reg = "(jpg|png|jpeg|gif|bmp)";
Pattern p = Pattern.compile(reg);
boolean boo = p.matcher("url").find();
return boo;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

@@ -43,6 +43,29 @@
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/notice_traffic_dialog_title" />
<!---->
<com.mogo.service.imageloader.MogoImageView
android:id="@+id/thumbnail_image"
android:layout_width="0dp"
android:layout_height="@dimen/notice_traffic_acc_image_height"
android:layout_marginLeft="@dimen/dp_200"
android:layout_marginTop="@dimen/dp_50"
android:layout_marginRight="@dimen/dp_200"
android:background="@drawable/notice_unsuccess_image"
android:scaleType="fitXY"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--播放按钮-->
<ImageView
android:id="@+id/window_video_play"
android:layout_width="@dimen/dp_100"
android:layout_height="@dimen/dp_100"
android:layout_centerInParent="true"
android:src="@drawable/video_play"
android:visibility="gone" />
<!--事故来源等事故详情-->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/traffic_info_recyclerView"

View File

@@ -5,7 +5,7 @@
<application>
<receiver android:name=".test.TestNoticeBroadcastReceiver">
<intent-filter>
<action android:name="com.notice.test_panel_control" />
<action android:name="com.notice.test_notice_control" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>