查看相册和视频逻辑处理

This commit is contained in:
wangdongsheng 2021-09-03 18:35:02 +08:00
parent f441819c3b
commit a8e8d7b5d0
25 changed files with 767 additions and 315 deletions

View File

@ -3,7 +3,7 @@ apply plugin: 'com.android.application'
android { android {
compileSdkVersion 29 compileSdkVersion 29
buildToolsVersion '29.0.2' buildToolsVersion '29.0.2'
ndkVersion '23.0.7123448' // ndkVersion '23.0.7123448'
defaultConfig { defaultConfig {
applicationId "com.navinfo.outdoor" applicationId "com.navinfo.outdoor"
@ -136,4 +136,7 @@ dependencies {
implementation 'com.googlecode.mp4parser:isoparser:1.1.21' implementation 'com.googlecode.mp4parser:isoparser:1.1.21'
// Android常用库 https://github.com/l123456789jy/Lazy // Android常用库 https://github.com/l123456789jy/Lazy
implementation 'com.github.lazylibrary:lazylibrary:1.0.2' implementation 'com.github.lazylibrary:lazylibrary:1.0.2'
//
implementation 'cn.jzvd:jiaozivideoplayer:7.4.2'
} }

View File

@ -96,6 +96,8 @@
<activity <activity
android:name=".activity.ImageShowActivity" android:name=".activity.ImageShowActivity"
android:screenOrientation="portrait" /> android:screenOrientation="portrait" />
<activity android:name=".activity.VideoActivity"
android:screenOrientation="portrait"/>
<activity <activity
android:name=".activity.UserActivity" android:name=".activity.UserActivity"
android:screenOrientation="portrait" /> android:screenOrientation="portrait" />

View File

@ -19,30 +19,24 @@ import java.util.ArrayList;
*/ */
public class ImageShowActivity extends BaseActivity implements View.OnClickListener { public class ImageShowActivity extends BaseActivity implements View.OnClickListener {
private ViewPager image_pager; private ViewPager image_pager;
private TextView page_number;
private ArrayList<String> imgUrl; private ArrayList<String> imgUrl;
private int type;
@Override @Override
protected int getLayout() { protected int getLayout() {
return R.layout.activity_image_show; return R.layout.activity_image_show;
} }
@SuppressLint("SetTextI18n")
@Override
protected void initData() {
super.initData();
imgUrl = getIntent().getStringArrayListExtra("info");
Log.d("ImageShowActivity", "initData: "+imgUrl);
page_number.setText("1" + "/" + imgUrl.size());
}
@Override @Override
protected void initView() { protected void initView() {
super.initView(); super.initView();
image_pager =findViewById(R.id.image_pager); imgUrl = getIntent().getStringArrayListExtra("info");
page_number =findViewById(R.id.page_number); type = getIntent().getIntExtra("type", 0);
ImageView download =findViewById(R.id.download);
download.setOnClickListener(this); Log.d("ImageShowActivity", "initData: " + imgUrl);
image_pager = findViewById(R.id.image_pager);
ImageView imageShow = findViewById(R.id.iv_image_show);
imageShow.setOnClickListener(this);
initViewPager(); initViewPager();
} }
@ -51,11 +45,14 @@ public class ImageShowActivity extends BaseActivity implements View.OnClickListe
if (imgUrl != null && imgUrl.size() != 0) { if (imgUrl != null && imgUrl.size() != 0) {
ImagePagerAdapter mAdapter = new ImagePagerAdapter(getApplicationContext(), imgUrl); ImagePagerAdapter mAdapter = new ImagePagerAdapter(getApplicationContext(), imgUrl);
image_pager.setAdapter(mAdapter); image_pager.setAdapter(mAdapter);
image_pager.setCurrentItem(type);
} }
} }
@Override @Override
public void onClick(View v) { public void onClick(View v) {
v.getId(); if (v.getId() == R.id.iv_image_show) {
finish();
}
} }
} }

View File

@ -237,11 +237,11 @@ public class PictureActivity extends BaseActivity implements View.OnClickListene
// }); // });
removables = new ArrayList<>();//存储轨迹的marker removables = new ArrayList<>();//存储轨迹的marker
if (poiEntity.getId() != null) { if (poiEntity.getId() != null) {
List<File> videoFileListByUUID = AWMp4ParserHelper.getInstance().getVideoFileListByUUID(poiEntity.getId()); List<File> fileListByUUID = AWMp4ParserHelper.getInstance().getFileListByUUID(poiEntity.getId());
if (videoFileListByUUID != null) { if (fileListByUUID != null) {
List<LatLng> lineStringByVideoFileList = AWMp4ParserHelper.getInstance().getLineStringByVideoFileList(videoFileListByUUID); List<LatLng> lineStringByFileList = AWMp4ParserHelper.getInstance().getLineStringByFileList(fileListByUUID);
for (int i = 0; i < lineStringByVideoFileList.size(); i++) { for (int i = 0; i < lineStringByFileList.size(); i++) {
LatLng latLng = lineStringByVideoFileList.get(i); LatLng latLng = lineStringByFileList.get(i);
if (latLng != null) { if (latLng != null) {
BitmapDescriptor pileDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.ic_baseline); BitmapDescriptor pileDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.ic_baseline);
Marker marker = tencentMap.addMarker(new MarkerOptions(latLng).icon(pileDescriptor).alpha(0.9f) Marker marker = tencentMap.addMarker(new MarkerOptions(latLng).icon(pileDescriptor).alpha(0.9f)

View File

@ -184,11 +184,11 @@ public class PicturesActivity extends BaseActivity implements View.OnClickListen
setLocMarkerStyle(LOCATION_TYPE_LOCATION_ROTATE); setLocMarkerStyle(LOCATION_TYPE_LOCATION_ROTATE);
initLine(); initLine();
if (poiEntity.getId() != null) { if (poiEntity.getId() != null) {
List<File> videoFileListByUUID = AWMp4ParserHelper.getInstance().getJPGFileListByUUID(poiEntity.getId()); List<File> fileListByUUID = AWMp4ParserHelper.getInstance().getFileListByUUID(poiEntity.getId());
if (videoFileListByUUID != null) { if (fileListByUUID != null) {
List<LatLng> lineStringByPictureFileList = AWMp4ParserHelper.getInstance().getLineStringByPictureFileList(videoFileListByUUID); List<LatLng> lineStringByFileList = AWMp4ParserHelper.getInstance().getLineStringByFileList(fileListByUUID);
for (int i = 0; i < lineStringByPictureFileList.size(); i++) { for (int i = 0; i < lineStringByFileList.size(); i++) {
LatLng latLng = lineStringByPictureFileList.get(i); LatLng latLng = lineStringByFileList.get(i);
if (latLng != null) { if (latLng != null) {
BitmapDescriptor pileDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.ic_baseline); BitmapDescriptor pileDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.ic_baseline);
Marker marker = tencentMap.addMarker(new MarkerOptions(latLng).icon(pileDescriptor).alpha(0.9f) Marker marker = tencentMap.addMarker(new MarkerOptions(latLng).icon(pileDescriptor).alpha(0.9f)

View File

@ -0,0 +1,76 @@
package com.navinfo.outdoor.activity;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.graphics.Bitmap;
import android.media.ThumbnailUtils;
import android.os.Message;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.viewpager.widget.ViewPager;
import com.bumptech.glide.Glide;
import com.navinfo.outdoor.R;
import com.navinfo.outdoor.adapter.ImagePagerAdapter;
import com.navinfo.outdoor.api.Constant;
import com.navinfo.outdoor.base.BaseActivity;
import org.greenrobot.eventbus.EventBus;
import java.util.ArrayList;
import java.util.Objects;
import cn.jzvd.Jzvd;
import cn.jzvd.JzvdStd;
/**
* 点击查看视频
*/
public class VideoActivity extends BaseActivity implements View.OnClickListener {
private String videoPath;
private JzvdStd jzvdStd;
@Override
protected int getLayout() {
return R.layout.activity_video;
}
@Override
protected void initView() {
super.initView();
videoPath = getIntent().getStringExtra("video");
jzvdStd = findViewById(R.id.jz_video);
ImageView imageVideo = findViewById(R.id.iv_video);
imageVideo.setOnClickListener(this);
jzvdStd.setUp(videoPath,"", Jzvd.SCREEN_NORMAL);
Glide.with(this).asDrawable().load(videoPath).into(jzvdStd.posterImageView); //设置图片
}
@Override
protected void onPause() {
super.onPause();
Jzvd.releaseAllVideos();
}
@Override
public void onBackPressed() {
if (Jzvd.backPress()){
return;
}
super.onBackPressed();
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.iv_video) {
finish();
}
}
}

View File

@ -1,6 +1,7 @@
package com.navinfo.outdoor.adapter; package com.navinfo.outdoor.adapter;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -13,11 +14,15 @@ import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.navinfo.outdoor.R; import com.navinfo.outdoor.R;
import com.navinfo.outdoor.activity.ImageShowActivity;
import com.navinfo.outdoor.activity.VideoActivity;
import com.navinfo.outdoor.bean.FileBean;
import com.navinfo.outdoor.util.AWMp4ParserHelper; import com.navinfo.outdoor.util.AWMp4ParserHelper;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.io.File; import java.io.File;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
@ -25,13 +30,31 @@ import java.util.List;
*/ */
public class PhotoAdapter extends RecyclerView.Adapter<PhotoAdapter.ViewHolder> { public class PhotoAdapter extends RecyclerView.Adapter<PhotoAdapter.ViewHolder> {
private List<File> files ; private List<FileBean> fileBeans;
private Context context; private Context context;
public PhotoAdapter(List<File> files, Context context) { public PhotoAdapter(List<FileBean> files, Context context) {
this.files = files; this.fileBeans = files;
this.context = context; this.context = context;
} }
public void deleteFile(FileBean fileBeanList) {
for (int i = 0; i < fileBeans.size(); i++) {
String path = fileBeans.get(i).getFile().getPath();
if (fileBeanList.getFile().getPath().equals(path)) {
fileBeans.set(i,fileBeanList);
}
}
for (int i = 0; i < fileBeans.size(); i++) {
boolean check = fileBeans.get(i).isCheck();
if (check){
fileBeans.get(i).getFile().delete();
fileBeans.remove(fileBeans.get(i));
notifyDataSetChanged();
}
}
}
@NotNull @NotNull
@Override @Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
@ -40,23 +63,43 @@ public class PhotoAdapter extends RecyclerView.Adapter<PhotoAdapter.ViewHolder>
} }
@Override @Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) { public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
File file= files.get(position); FileBean fileBean = fileBeans.get(position);
File file = fileBean.getFile();
if (file.exists()) { if (file.exists()) {
AWMp4ParserHelper.getInstance().loadFirstWithGlide(context, Uri.fromFile(file).toString(), holder.ivPhoto, 500); AWMp4ParserHelper.getInstance().loadFirstWithGlide(context, Uri.fromFile(file).toString(), holder.ivPhoto, 500);
} }
holder.ivPhoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ArrayList<String> arrayList = new ArrayList<>();
for (int i = 0; i < fileBeans.size(); i++) {
arrayList.add(fileBeans.get(i).getFile().getPath());
}
Intent intent = new Intent(context, ImageShowActivity.class);
intent.putExtra("info", arrayList);
intent.putExtra("type",position);
context.startActivity(intent);
}
});
holder.cbPhoto.setChecked(fileBean.isCheck());
holder.cbPhoto.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { holder.cbPhoto.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override @Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (photoClickItem != null) {
fileBean.setCheck(isChecked);
photoClickItem.item(isChecked, fileBean);
}
} }
}); });
} }
@Override @Override
public int getItemCount() { public int getItemCount() {
return files.size(); return fileBeans.size();
} }
static class ViewHolder extends RecyclerView.ViewHolder { static class ViewHolder extends RecyclerView.ViewHolder {
@ -77,7 +120,7 @@ public class PhotoAdapter extends RecyclerView.Adapter<PhotoAdapter.ViewHolder>
} }
public interface photoClickItem { public interface photoClickItem {
void item(int aInt); void item(boolean isBoolean, FileBean fileBean);
} }

View File

@ -1,6 +1,7 @@
package com.navinfo.outdoor.adapter; package com.navinfo.outdoor.adapter;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -13,11 +14,14 @@ import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.navinfo.outdoor.R; import com.navinfo.outdoor.R;
import com.navinfo.outdoor.activity.VideoActivity;
import com.navinfo.outdoor.bean.FileBean;
import com.navinfo.outdoor.util.AWMp4ParserHelper; import com.navinfo.outdoor.util.AWMp4ParserHelper;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.io.File; import java.io.File;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
@ -25,14 +29,45 @@ import java.util.List;
*/ */
public class VideoAdapter extends RecyclerView.Adapter<VideoAdapter.ViewHolder> { public class VideoAdapter extends RecyclerView.Adapter<VideoAdapter.ViewHolder> {
private List<File> files ; private List<FileBean> fileBeans;
private Context context; private Context context;
private List<File> textFile=new ArrayList<>();
public VideoAdapter(List<File> files, Context context) { public VideoAdapter(List<FileBean> files, Context context) {
this.files = files; this.fileBeans = files;
this.context = context; this.context = context;
} }
public void setTextFile(List<File> textFile) {
this.textFile.addAll(textFile);
notifyDataSetChanged();
}
public void deleteFile(FileBean fileBeanList) {
for (int i = 0; i < fileBeans.size(); i++) {
String path = fileBeans.get(i).getFile().getPath();
if (fileBeanList.getFile().getPath().equals(path)) {
fileBeans.set(i,fileBeanList);
}
}
for (int i = 0; i < fileBeans.size(); i++) {
boolean check = fileBeans.get(i).isCheck();
if (check){
fileBeans.get(i).getFile().delete();
if (textFile!=null){
for (int i1 = 0; i1 < textFile.size(); i1++) {
if (textFile.get(i).getPath().contains(fileBeans.get(i).getFile().getPath())){
textFile.get(i).delete();
}
}
}
fileBeans.remove(fileBeans.get(i));
notifyDataSetChanged();
}
}
}
@NotNull @NotNull
@Override @Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
@ -42,21 +77,33 @@ public class VideoAdapter extends RecyclerView.Adapter<VideoAdapter.ViewHolder>
@Override @Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) { public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
File file= files.get(position); FileBean fileBean = fileBeans.get(position);
File file = fileBean.getFile();
if (file.exists()) { if (file.exists()) {
AWMp4ParserHelper.getInstance().loadFirstWithGlide(context, Uri.fromFile(file).toString(), holder.ivVideo, 500); AWMp4ParserHelper.getInstance().loadFirstWithGlide(context, Uri.fromFile(file).toString(), holder.ivVideo, 500);
} }
holder.ivVideo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, VideoActivity.class);
intent.putExtra("video",fileBean.getFile().getPath());
context.startActivity(intent);
}
});
holder.cbVideo.setChecked(fileBean.isCheck());
holder.cbVideo.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { holder.cbVideo.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override @Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (photoClickItem != null) {
fileBean.setCheck(isChecked);
photoClickItem.item(isChecked, fileBean);
}
} }
}); });
} }
@Override @Override
public int getItemCount() { public int getItemCount() {
return files.size(); return fileBeans.size();
} }
class ViewHolder extends RecyclerView.ViewHolder { class ViewHolder extends RecyclerView.ViewHolder {
@ -77,7 +124,7 @@ public class VideoAdapter extends RecyclerView.Adapter<VideoAdapter.ViewHolder>
} }
public interface photoClickItem { public interface photoClickItem {
void item(int aInt); void item(boolean isBoolean, FileBean fileBean);
} }

View File

@ -144,6 +144,10 @@ public class Constant {
public static final int PICTURE_VIDEO_WORD = 48; //视频页面崩溃后发给poi录像和道路 public static final int PICTURE_VIDEO_WORD = 48; //视频页面崩溃后发给poi录像和道路
public static final int REGISTER_WORD = 46; //注册的返回 public static final int REGISTER_WORD = 46; //注册的返回
public static final int VIDEO_FINISH_ROAD = 47;//录像视频列表的返回
public static final int PHOTO_FINISH_VIDEO = 49;//拍照列表的返回
public static int NUMBER = 200; //任务个数 public static int NUMBER = 200; //任务个数
public static int LIMIT_TYPE = -1; //权限类型普通任务-0专属任务-1 public static int LIMIT_TYPE = -1; //权限类型普通任务-0专属任务-1

View File

@ -0,0 +1,38 @@
package com.navinfo.outdoor.bean;
import java.io.File;
public class FileBean {
private File file;
private boolean isCheck;
private File txtFile;
public FileBean(File file, boolean isCheck) {
this.file = file;
this.isCheck = isCheck;
}
public File getTxtFile() {
return txtFile;
}
public void setTxtFile(File txtFile) {
this.txtFile = txtFile;
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public boolean isCheck() {
return isCheck;
}
public void setCheck(boolean check) {
isCheck = check;
}
}

View File

@ -1,9 +1,12 @@
package com.navinfo.outdoor.fragment; package com.navinfo.outdoor.fragment;
import android.os.Bundle; import android.os.Bundle;
import android.os.Message;
import android.view.KeyEvent;
import android.view.View; import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast;
import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
@ -11,10 +14,15 @@ import androidx.recyclerview.widget.RecyclerView;
import com.jcodecraeer.xrecyclerview.XRecyclerView; import com.jcodecraeer.xrecyclerview.XRecyclerView;
import com.navinfo.outdoor.R; import com.navinfo.outdoor.R;
import com.navinfo.outdoor.adapter.PhotoAdapter; import com.navinfo.outdoor.adapter.PhotoAdapter;
import com.navinfo.outdoor.api.Constant;
import com.navinfo.outdoor.base.BaseFragment; import com.navinfo.outdoor.base.BaseFragment;
import com.navinfo.outdoor.bean.FileBean;
import com.navinfo.outdoor.room.PoiEntity; import com.navinfo.outdoor.room.PoiEntity;
import com.navinfo.outdoor.util.AWMp4ParserHelper; import com.navinfo.outdoor.util.AWMp4ParserHelper;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -26,46 +34,93 @@ import java.util.Objects;
public class PhotoFragment extends BaseFragment implements View.OnClickListener { public class PhotoFragment extends BaseFragment implements View.OnClickListener {
private List<File> fileArrayList; private ArrayList<FileBean> fileBeans;
private ArrayList<FileBean> deleteFiles;
private PhotoAdapter photoAdapter;
public static PhotoFragment newInstance(Bundle bundle) { public static PhotoFragment newInstance(Bundle bundle) {
PhotoFragment fragment = new PhotoFragment(); PhotoFragment fragment = new PhotoFragment();
fragment.setArguments(bundle); fragment.setArguments(bundle);
return fragment; return fragment;
} }
@Override
public void onStart() {
super.onStart();
if (!EventBus.getDefault().isRegistered(this)) {//加上判断
EventBus.getDefault().register(this);
}
}
@Override @Override
protected int getLayout() { protected int getLayout() {
return R.layout.fragment_photo; return R.layout.fragment_photo;
} }
@Override
public void onResume() {
super.onResume();
getFocus();
}
//主界面获取焦点
private void getFocus() {
Objects.requireNonNull(getView()).setFocusableInTouchMode(true);
getView().requestFocus();
getView().setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {
Message message = new Message();
message.what= Constant.PHOTO_FINISH_VIDEO;
EventBus.getDefault().post(message);
Objects.requireNonNull(getActivity()).finish();
return true;
}
return false;
}
});
}
@Override @Override
protected void initView() { protected void initView() {
super.initView(); super.initView();
PoiEntity showPoiEntity = (PoiEntity) Objects.requireNonNull(getActivity()).getIntent().getSerializableExtra("showPoiEntity"); PoiEntity showPoiEntity = (PoiEntity) Objects.requireNonNull(getActivity()).getIntent().getSerializableExtra("showPoiEntity");
deleteFiles = new ArrayList<>();
if (showPoiEntity!=null){ if (showPoiEntity!=null){
String id = showPoiEntity.getId(); String id = showPoiEntity.getId();
if (showPoiEntity.getRecord_way()==2){//連拍 if (showPoiEntity.getRecord_way()==2){//連拍
fileArrayList = new ArrayList<>(); fileBeans = new ArrayList<>();
List<File> fileListByUUID = AWMp4ParserHelper.getInstance().getVideoFileListByUUID(id); List<File> fileListByUUID = AWMp4ParserHelper.getInstance().getFileListByUUID(id);
for (int i = 0; i < fileListByUUID.size(); i++) { for (int i = 0; i < fileListByUUID.size(); i++) {
if (!fileListByUUID.get(i).getPath().contains(".txt")){ if (!fileListByUUID.get(i).getPath().contains(".txt")){
fileArrayList.add(fileListByUUID.get(i)); fileBeans.add(new FileBean(fileListByUUID.get(i),false));
} }
} }
} }
} }
ImageView ivPhotoFinal = (ImageView) findViewById(R.id.iv_photo_final); ImageView ivPhotoFinal = (ImageView) findViewById(R.id.iv_photo_final);
ivPhotoFinal.setOnClickListener(this); ivPhotoFinal.setOnClickListener(this);
TextView tvPhotoChoose = (TextView) findViewById(R.id.tv_photo_choose);
tvPhotoChoose.setOnClickListener(this);
TextView tvPhotoAlbumDelete = (TextView) findViewById(R.id.tv_photo_album_delete); TextView tvPhotoAlbumDelete = (TextView) findViewById(R.id.tv_photo_album_delete);
tvPhotoAlbumDelete.setOnClickListener(this); tvPhotoAlbumDelete.setOnClickListener(this);
RecyclerView photoRecycler = findViewById(R.id.photo_album_recycler); RecyclerView photoRecycler = findViewById(R.id.photo_album_recycler);
photoRecycler.setLayoutManager(new GridLayoutManager(getContext(),2)); photoRecycler.setLayoutManager(new GridLayoutManager(getContext(),2));
PhotoAdapter photoAdapter = new PhotoAdapter(fileArrayList, getContext()); photoAdapter = new PhotoAdapter(fileBeans, getContext());
photoRecycler.setAdapter(photoAdapter); photoRecycler.setAdapter(photoAdapter);
photoAdapter.setPhotoClickItem(new PhotoAdapter.photoClickItem() {
@Override
public void item(boolean isChecked, FileBean fileBean) {
if (isChecked){
deleteFiles.add(fileBean);
}else {
if (deleteFiles!=null){
for (int i = 0; i < deleteFiles.size(); i++) {
if (fileBean.getFile().getPath().equals(deleteFiles.get(i).getFile().getPath())){
deleteFiles.remove(fileBean);
}
}
}
}
}
});
} }
@Override @Override
@ -73,13 +128,39 @@ public class PhotoFragment extends BaseFragment implements View.OnClickListener
super.initData(); super.initData();
} }
@Subscribe
public void onEvent(Message data) {
}
@Override @Override
public void onClick(View v) { public void onClick(View v) {
switch (v.getId()){ switch (v.getId()){
case R.id.iv_photo_final: case R.id.iv_photo_final:
Message message = new Message();
message.what= Constant.PHOTO_FINISH_VIDEO;
EventBus.getDefault().post(message);
Objects.requireNonNull(getActivity()).finish(); Objects.requireNonNull(getActivity()).finish();
break; break;
case R.id.tv_photo_album_delete:
if (fileBeans!=null){
for (int i = 0; i < fileBeans.size(); i++) {
photoAdapter.deleteFile(fileBeans.get(i));
}
}else {
Toast.makeText(getContext(), "请选择要删除的数据后才可以删除", Toast.LENGTH_SHORT).show();
}
break;
} }
} }
@Override
public void onDestroy() {
if (EventBus.getDefault().isRegistered(this))//加上判断
EventBus.getDefault().unregister(this);
super.onDestroy();
}
} }

View File

@ -171,7 +171,24 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick
rbWalking = findViewById(R.id.rb_walking); rbWalking = findViewById(R.id.rb_walking);
rbManual = findViewById(R.id.rb_manual); rbManual = findViewById(R.id.rb_manual);
tvPhotoAlbum = findViewById(R.id.tv_photo_album); tvPhotoAlbum = findViewById(R.id.tv_photo_album);
tvPhotoAlbum.setOnClickListener(this::onClick); tvPhotoAlbum.setOnClickListener(this);
/*fmRoadPic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v.getTag() == null || ((List<File>) v.getTag()).size() == 0) {
Toast.makeText(getActivity(), "还没有拍摄视频!", Toast.LENGTH_SHORT).show();
return;
}
File finalFile = AWMp4ParserHelper.getInstance().obtainMp4FilePath(new File(Constant.PICTURE_FOLDER, showPoiEntity.getId()).getAbsolutePath());
Intent intent = new Intent(getContext(), PictureActivity.class);
intent.putExtra(Constant.INTENT_VIDEO_PATH, finalFile.getAbsolutePath());
intent.putExtra(Constant.INTENT_VIDEO_OBLATION, 0);
intent.putExtra("poiEntity", showPoiEntity);
startActivityForResult(intent, 0x101);
}
});*/
rgType.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { rgType.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override @Override
public void onCheckedChanged(RadioGroup group, int checkedId) { public void onCheckedChanged(RadioGroup group, int checkedId) {
@ -195,9 +212,9 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick
MessageDialog.show((AppCompatActivity) Objects.requireNonNull(getContext()), "提示", "是否删除", "确定", "取消").setOkButton(new OnDialogButtonClickListener() { MessageDialog.show((AppCompatActivity) Objects.requireNonNull(getContext()), "提示", "是否删除", "确定", "取消").setOkButton(new OnDialogButtonClickListener() {
@Override @Override
public boolean onClick(BaseDialog baseDialog, View v) { public boolean onClick(BaseDialog baseDialog, View v) {
List<File> videoFileListByUUID = AWMp4ParserHelper.getInstance().getVideoFileListByUUID(showPoiEntity.getId()); List<File> fileListByUUID = AWMp4ParserHelper.getInstance().getFileListByUUID(showPoiEntity.getId());
for (int i = 0; i < videoFileListByUUID.size(); i++) { for (int i = 0; i < fileListByUUID.size(); i++) {
videoFileListByUUID.get(i).delete(); fileListByUUID.get(i).delete();
} }
ivPoiVideoPicture.setImageDrawable(null); ivPoiVideoPicture.setImageDrawable(null);
return false; return false;
@ -246,17 +263,16 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick
tvPictures.setEnabled(false); tvPictures.setEnabled(false);
if (!StringUtils.isEmpty(photoList)) { if (!StringUtils.isEmpty(photoList)) {
boolean isImageLoad = false; boolean isImageLoad = false;
List<File> videoFileListByUUID = AWMp4ParserHelper.getInstance().getVideoFileListByUUID(showPoiEntity.getId()); List<File> fileListByUUID = AWMp4ParserHelper.getInstance().getFileListByUUID(showPoiEntity.getId());
for (int i = 0; i < videoFileListByUUID.size(); i++) { for (int i = 0; i < fileListByUUID.size(); i++) {
if (videoFileListByUUID.get(i).getPath().contains("0.mp4") && !videoFileListByUUID.get(i).getPath().contains("0.mp4.txt")) { if (fileListByUUID.get(i).getPath().contains(".mp4") && !fileListByUUID.get(i).getPath().contains(".mp4.txt")) {
if (videoFileListByUUID.get(i).exists() && !isImageLoad) { if (fileListByUUID.get(i).exists() && !isImageLoad) {
// 使用glide加载视频的第一帧 // 使用glide加载视频的第一帧
AWMp4ParserHelper.getInstance().loadFirstWithGlide(getActivity(), Uri.fromFile(videoFileListByUUID.get(i)).toString(), ivPoiVideoPicture, 500); AWMp4ParserHelper.getInstance().loadFirstWithGlide(getActivity(), Uri.fromFile(fileListByUUID.get(i)).toString(), ivPoiVideoPicture, 500);
isImageLoad = true; isImageLoad = true;
} }
} }
fmPoiVideoPic.setTag(videoFileListByUUID); fmPoiVideoPic.setTag(fileListByUUID);
} }
} }
} else if (record_way == 2) {//连拍 } else if (record_way == 2) {//连拍
@ -267,17 +283,17 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick
tvPicture.setEnabled(false); tvPicture.setEnabled(false);
if (!StringUtils.isEmpty(photoList)) { if (!StringUtils.isEmpty(photoList)) {
boolean isImageLoad = false; boolean isImageLoad = false;
List<File> pictureFileListByUUID = AWMp4ParserHelper.getInstance().getJPGFileListByUUID(showPoiEntity.getId()); List<File> fileListByUUID = AWMp4ParserHelper.getInstance().getFileListByUUID(showPoiEntity.getId());
for (int i = 0; i < pictureFileListByUUID.size(); i++) { for (int i = 0; i < fileListByUUID.size(); i++) {
if (pictureFileListByUUID.get(i).getPath().contains("0.jpg") && !pictureFileListByUUID.get(i).getPath().contains("paper.txt")) { if (fileListByUUID.get(i).getPath().contains(".jpg") && !fileListByUUID.get(i).getPath().contains("paper.txt")) {
if (pictureFileListByUUID.get(i).exists() && !isImageLoad) { if (fileListByUUID.get(i).exists() && !isImageLoad) {
// 使用glide加载视频的第一帧 // 使用glide加载视频的第一帧
Glide.with(Objects.requireNonNull(getActivity())).load(pictureFileListByUUID.get(i)).into(ivPoiVideoPicture); Glide.with(Objects.requireNonNull(getActivity())).load(fileListByUUID.get(i)).into(ivPoiVideoPicture);
isImageLoad = true; isImageLoad = true;
} }
} }
} }
fmPoiVideoPic.setTag(pictureFileListByUUID); fmPoiVideoPic.setTag(fileListByUUID);
} }
} }
} }
@ -322,6 +338,8 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick
} }
private void disables() { private void disables() {
fmPoiVideoPic.setEnabled(false);
tvPhotoAlbum.setEnabled(false);
etRoadName.setEnabled(false); etRoadName.setEnabled(false);
ivPoiVideoPicture.setEnabled(false); ivPoiVideoPicture.setEnabled(false);
tvPictures.setEnabled(false); tvPictures.setEnabled(false);
@ -341,6 +359,46 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick
if ((boolean) data.obj) { if ((boolean) data.obj) {
initPoiVideoSharePre(); initPoiVideoSharePre();
} }
} else if (data.what == Constant.VIDEO_FINISH_ROAD) {
List<File> fileListByUUID = AWMp4ParserHelper.getInstance().getFileListByUUID(showPoiEntity.getId());
if (fileListByUUID.size()==0) {
ivPoiVideoPicture.setImageDrawable(null);
} else {
boolean isImageLoad = false;
for (int i = 0; i < fileListByUUID.size(); i++) {
File videoFile = fileListByUUID.get(i);
if (videoFile.getPath().contains(".mp4") && !videoFile.getPath().contains(".mp4.txt")) {
if (videoFile.exists() && !isImageLoad) {
// 使用glide加载视频的第一帧
AWMp4ParserHelper.getInstance().loadFirstWithGlide(getActivity(), Uri.fromFile(videoFile).toString(), ivPoiVideoPicture, 500);
isImageLoad = true;
}
}
}
fmPoiVideoPic.setTag(fileListByUUID);
}
}else if (data.what==Constant.PHOTO_FINISH_VIDEO){
List<File> fileListByUUID = AWMp4ParserHelper.getInstance().getFileListByUUID(showPoiEntity.getId());
if (fileListByUUID.size()==1) {
for (int i = 0; i < fileListByUUID.size(); i++) {
fileListByUUID.get(i).delete();
}
ivPoiVideoPicture.setImageDrawable(null);
} else {
boolean isImageLoad = false;
for (int i = 0; i < fileListByUUID.size(); i++) {
File videoFile = fileListByUUID.get(i);
if (videoFile.getPath().contains(".jpg") && !videoFile.getPath().contains("paper.txt")) {
if (videoFile.exists() && !isImageLoad) {
// 使用glide加载视频的第一帧
AWMp4ParserHelper.getInstance().loadFirstWithGlide(getActivity(), Uri.fromFile(videoFile).toString(), ivPoiVideoPicture, 500);
isImageLoad = true;
}
}
}
fmPoiVideoPic.setTag(fileListByUUID);
}
} }
} }
@ -605,8 +663,8 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick
File videoFile = new File(videoPath); File videoFile = new File(videoPath);
if (videoFile.exists()) { if (videoFile.exists()) {
AWMp4ParserHelper.getInstance().loadFirstWithGlide(getActivity(), Uri.fromFile(videoFile).toString(), ivPoiVideoPicture, 500); AWMp4ParserHelper.getInstance().loadFirstWithGlide(getActivity(), Uri.fromFile(videoFile).toString(), ivPoiVideoPicture, 500);
List<File> videoFileListByUUID = AWMp4ParserHelper.getInstance().getVideoFileListByUUID(showPoiEntity.getId()); List<File> fileListByUUID = AWMp4ParserHelper.getInstance().getFileListByUUID(showPoiEntity.getId());
fmPoiVideoPic.setTag(videoFileListByUUID); fmPoiVideoPic.setTag(fileListByUUID);
} }
} }
} else if (requestCode == 0x102 && resultCode == 0x102) { } else if (requestCode == 0x102 && resultCode == 0x102) {
@ -624,8 +682,8 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick
File pictureFile = new File(videoPath); File pictureFile = new File(videoPath);
if (pictureFile.exists()) { if (pictureFile.exists()) {
AWMp4ParserHelper.getInstance().loadFirstWithGlide(getActivity(), Uri.fromFile(pictureFile).toString(), ivPoiVideoPicture, 500); AWMp4ParserHelper.getInstance().loadFirstWithGlide(getActivity(), Uri.fromFile(pictureFile).toString(), ivPoiVideoPicture, 500);
List<File> pictureFileListByUUID = AWMp4ParserHelper.getInstance().getJPGFileListByUUID(showPoiEntity.getId()); List<File> fileListByUUID = AWMp4ParserHelper.getInstance().getFileListByUUID(showPoiEntity.getId());
fmPoiVideoPic.setTag(pictureFileListByUUID); fmPoiVideoPic.setTag(fileListByUUID);
} }
} }
} }
@ -767,13 +825,13 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick
@Override @Override
protected PoiEntity initPoiEntityByUI(PoiEntity poiEntity) { protected PoiEntity initPoiEntityByUI(PoiEntity poiEntity) {
String roadName = etRoadName.getText().toString().trim(); String roadName = etRoadName.getText().toString().trim();
if (roadName != null && !roadName.equals("")) { if (!roadName.equals("")) {
poiEntity.setName(roadName + ""); poiEntity.setName(roadName + "");
} else { } else {
DateFormat formatters = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
Calendar calendars = Calendar.getInstance(); Calendar calendars = Calendar.getInstance();
calendars.setTimeInMillis(System.currentTimeMillis()); calendars.setTimeInMillis(System.currentTimeMillis());
String formats = formatters.format(calendars.getTime()); String formats = formatter.format(calendars.getTime());
String city = Constant.currentLocation.getCity();//返回当前位置的城市. String city = Constant.currentLocation.getCity();//返回当前位置的城市.
String district = Constant.currentLocation.getDistrict();//返回当前位置的区县. String district = Constant.currentLocation.getDistrict();//返回当前位置的区县.
StringBuilder sb = new StringBuilder("poi录像上报"); StringBuilder sb = new StringBuilder("poi录像上报");
@ -811,14 +869,14 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick
poiEntity.setTaskStatus(2); poiEntity.setTaskStatus(2);
if (isRequest == 0x101) { if (isRequest == 0x101) {
if (fmPoiVideoPic.getTag() == null) { if (fmPoiVideoPic.getTag() == null) {
List<File> videoFileListByUUID = AWMp4ParserHelper.getInstance().getVideoFileListByUUID(showPoiEntity.getId()); List<File> fileListByUUID = AWMp4ParserHelper.getInstance().getFileListByUUID(showPoiEntity.getId());
if (videoFileListByUUID != null) { if (fileListByUUID != null) {
fmPoiVideoPic.setTag(videoFileListByUUID); fmPoiVideoPic.setTag(fileListByUUID);
} }
} }
if (fmPoiVideoPic.getTag() != null && !((List<File>) fmPoiVideoPic.getTag()).isEmpty()) { if (fmPoiVideoPic.getTag() != null && !((List<File>) fmPoiVideoPic.getTag()).isEmpty()) {
List<LatLng> lineStringByVideoFileList = AWMp4ParserHelper.getInstance().getLineStringByVideoFileList((List<File>) fmPoiVideoPic.getTag()); List<LatLng> lineStringByFileList = AWMp4ParserHelper.getInstance().getLineStringByFileList((List<File>) fmPoiVideoPic.getTag());
String lineString = GeometryTools.getLineString(lineStringByVideoFileList); String lineString = GeometryTools.getLineString(lineStringByFileList);
Log.d("TAG", "onGranted: " + lineString); Log.d("TAG", "onGranted: " + lineString);
String photoStr = AWMp4ParserHelper.getInstance().getVideoFileListStr((List<File>) fmPoiVideoPic.getTag()); String photoStr = AWMp4ParserHelper.getInstance().getVideoFileListStr((List<File>) fmPoiVideoPic.getTag());
poiEntity.setPhoto(photoStr); poiEntity.setPhoto(photoStr);
@ -829,14 +887,14 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick
} }
} else if (isRequest == 0x102) { } else if (isRequest == 0x102) {
if (fmPoiVideoPic.getTag() == null) { if (fmPoiVideoPic.getTag() == null) {
List<File> pictureFileListByUUID = AWMp4ParserHelper.getInstance().getJPGFileListByUUID(showPoiEntity.getId()); List<File> fileListByUUID = AWMp4ParserHelper.getInstance().getFileListByUUID(showPoiEntity.getId());
if (pictureFileListByUUID != null) { if (fileListByUUID != null) {
fmPoiVideoPic.setTag(pictureFileListByUUID); fmPoiVideoPic.setTag(fileListByUUID);
} }
} }
if (fmPoiVideoPic.getTag() != null && !((List<File>) fmPoiVideoPic.getTag()).isEmpty()) { if (fmPoiVideoPic.getTag() != null && !((List<File>) fmPoiVideoPic.getTag()).isEmpty()) {
List<LatLng> lineStringByVideoFileList = AWMp4ParserHelper.getInstance().getLineStringByVideoFileList((List<File>) fmPoiVideoPic.getTag()); List<LatLng> lineStringByFileList = AWMp4ParserHelper.getInstance().getLineStringByFileList((List<File>) fmPoiVideoPic.getTag());
String lineString = GeometryTools.getLineString(lineStringByVideoFileList); String lineString = GeometryTools.getLineString(lineStringByFileList);
Log.d("TAG", "onGranted: " + lineString); Log.d("TAG", "onGranted: " + lineString);
String photoStr = AWMp4ParserHelper.getInstance().getVideoFileListStr((List<File>) fmPoiVideoPic.getTag()); String photoStr = AWMp4ParserHelper.getInstance().getVideoFileListStr((List<File>) fmPoiVideoPic.getTag());
poiEntity.setPhoto(photoStr); poiEntity.setPhoto(photoStr);

View File

@ -66,6 +66,7 @@ import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.List; import java.util.List;
import java.util.Objects;
/** /**
* 寻宝-点击上传弹窗-道路 * 寻宝-点击上传弹窗-道路
@ -81,14 +82,12 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
private EditText etDesc; private EditText etDesc;
private Button btnRoadSave; private Button btnRoadSave;
private RadioGroup rgType; private RadioGroup rgType;
private PoiDatabase poiDatabase;
private PoiDao poiDao; private PoiDao poiDao;
private Button roadUpload;
private File fileZip; private File fileZip;
private FrameLayout fmRoadPic; private FrameLayout fmRoadPic;
private NestedScrollView nestedScrollView;
private Marker markerRoad; private Marker markerRoad;
private LatLng latLng; private LatLng latLng;
private TextView tvVideoAlbum;
public static RoadFragment newInstance(Bundle bundle) { public static RoadFragment newInstance(Bundle bundle) {
RoadFragment fragment = new RoadFragment(); RoadFragment fragment = new RoadFragment();
@ -145,12 +144,14 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
@Override @Override
protected void initView() { protected void initView() {
super.initView(); super.initView();
poiDatabase = PoiDatabase.getInstance(getContext()); PoiDatabase poiDatabase = PoiDatabase.getInstance(getContext());
poiDao = poiDatabase.getPoiDao(); poiDao = poiDatabase.getPoiDao();
tvPictures = (TextView) findViewById(R.id.tv_pictures); tvPictures = (TextView) findViewById(R.id.tv_pictures);
tvPictures.setOnClickListener(this::onClick); tvPictures.setOnClickListener(this);
tvVideoAlbum = findViewById(R.id.tv_video_album);
tvVideoAlbum.setOnClickListener(this);
setSlidingUpPanelLayout(Constant.SLIDING_LAYOUT); setSlidingUpPanelLayout(Constant.SLIDING_LAYOUT);
nestedScrollView = findViewById(R.id.nested_scroll_view); NestedScrollView nestedScrollView = findViewById(R.id.nested_scroll_view);
if (slidingPaneLayout != null) { if (slidingPaneLayout != null) {
slidingPaneLayout.setScrollableView(nestedScrollView); slidingPaneLayout.setScrollableView(nestedScrollView);
} }
@ -165,10 +166,10 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
btnRoadSave = (Button) findViewById(R.id.btn_road_save); btnRoadSave = (Button) findViewById(R.id.btn_road_save);
btnRoadSave.setOnClickListener(this::onClick); btnRoadSave.setOnClickListener(this::onClick);
rgType = (RadioGroup) findViewById(R.id.rg_type); rgType = (RadioGroup) findViewById(R.id.rg_type);
roadUpload = findViewById(R.id.road_upload); Button roadUpload = findViewById(R.id.road_upload);
roadUpload.setOnClickListener(this::onClick); roadUpload.setOnClickListener(this::onClick);
showPictureType(1); showPictureType(1);
fmRoadPic.setOnClickListener(new View.OnClickListener() { /*fmRoadPic.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (v.getTag() == null || ((List<File>) v.getTag()).size() == 0) { if (v.getTag() == null || ((List<File>) v.getTag()).size() == 0) {
@ -183,7 +184,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
intent.putExtra("poiEntity", showPoiEntity); intent.putExtra("poiEntity", showPoiEntity);
startActivityForResult(intent, 0x101); startActivityForResult(intent, 0x101);
} }
}); });*/
fmRoadPic.setOnLongClickListener(new View.OnLongClickListener() { fmRoadPic.setOnLongClickListener(new View.OnLongClickListener() {
@Override @Override
public boolean onLongClick(View v) { public boolean onLongClick(View v) {
@ -191,9 +192,9 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
MessageDialog.show((AppCompatActivity) getContext(), "提示", "是否删除", "确定", "取消").setOkButton(new OnDialogButtonClickListener() { MessageDialog.show((AppCompatActivity) getContext(), "提示", "是否删除", "确定", "取消").setOkButton(new OnDialogButtonClickListener() {
@Override @Override
public boolean onClick(BaseDialog baseDialog, View v) { public boolean onClick(BaseDialog baseDialog, View v) {
List<File> videoFileListByUUID = AWMp4ParserHelper.getInstance().getVideoFileListByUUID(showPoiEntity.getId()); List<File> fileListByUUID = AWMp4ParserHelper.getInstance().getFileListByUUID(showPoiEntity.getId());
for (int i = 0; i < videoFileListByUUID.size(); i++) { for (int i = 0; i < fileListByUUID.size(); i++) {
videoFileListByUUID.get(i).delete(); fileListByUUID.get(i).delete();
} }
ivRoadPicture.setImageDrawable(null); ivRoadPicture.setImageDrawable(null);
return false; return false;
@ -211,11 +212,12 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
private void initShowPoi() { private void initShowPoi() {
// 添加信息 // 添加信息
assert getArguments() != null;
showPoiEntity = (PoiEntity) getArguments().getSerializable("poiEntity"); showPoiEntity = (PoiEntity) getArguments().getSerializable("poiEntity");
if (showPoiEntity != null) { if (showPoiEntity != null) {
String name = showPoiEntity.getName();//名称 String name = showPoiEntity.getName();//名称
if (name != null && !name.equals("")) { if (name != null && !name.equals("")) {
etRoadName.setText(name + ""); etRoadName.setText(name);
} }
String x = showPoiEntity.getX(); String x = showPoiEntity.getX();
String y = showPoiEntity.getY(); String y = showPoiEntity.getY();
@ -234,18 +236,17 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
if (describe != null && !describe.equals("")) { if (describe != null && !describe.equals("")) {
etDesc.setText(describe); etDesc.setText(describe);
} }
String photoList = showPoiEntity.getPhoto(); String photoList = showPoiEntity.getPhoto();//存儲在數據庫中的數據
if (!StringUtils.isEmpty(photoList)) { if (!StringUtils.isEmpty(photoList)) {
String[] photos = photoList.split(","); String[] photos = photoList.split(",");
List<File> videoFileList = new ArrayList<>(); List<File> videoFileList = new ArrayList<>();
boolean isImageLoad = false; boolean isImageLoad = false;
if (photos != null && photos.length > 0) { if (photos.length > 0) {
for (int i = 0; i < photos.length; i++) { for (String photo : photos) {
String photo = photos[i];
if (!StringUtils.isEmpty(photo)) { if (!StringUtils.isEmpty(photo)) {
File videoFile = new File(photo); File videoFile = new File(photo);
videoFileList.add(new File(photo)); videoFileList.add(new File(photo));
if (videoFile.getPath().contains("0.mp4") && !videoFile.getPath().contains("0.mp4.txt")) { if (videoFile.getPath().contains(".mp4") && !videoFile.getPath().contains(".mp4.txt")) {
if (videoFile.exists() && !isImageLoad) { if (videoFile.exists() && !isImageLoad) {
// 使用glide加载视频的第一帧 // 使用glide加载视频的第一帧
AWMp4ParserHelper.getInstance().loadFirstWithGlide(getActivity(), Uri.fromFile(videoFile).toString(), ivRoadPicture, 500); AWMp4ParserHelper.getInstance().loadFirstWithGlide(getActivity(), Uri.fromFile(videoFile).toString(), ivRoadPicture, 500);
@ -254,20 +255,20 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
} }
} }
} }
fmRoadPic.setTag(videoFileList); fmRoadPic.setTag(videoFileList);
} }
} }
} }
assert showPoiEntity != null;
if (showPoiEntity.getTaskStatus() == 3) { if (showPoiEntity.getTaskStatus() == 3) {
disables(); disables();
} }
} }
//禁用控件 //禁用控件
private void disables() { private void disables() {
fmRoadPic.setEnabled(false);
tvVideoAlbum.setEnabled(false);
etRoadName.setEnabled(false); etRoadName.setEnabled(false);
rgType.setEnabled(false); rgType.setEnabled(false);
ivRoadPicture.setEnabled(false); ivRoadPicture.setEnabled(false);
@ -285,6 +286,24 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
if ((boolean) data.obj) { if ((boolean) data.obj) {
initRoadSharePre(); initRoadSharePre();
} }
} else if (data.what == Constant.VIDEO_FINISH_ROAD) {
List<File> fileListByUUID = AWMp4ParserHelper.getInstance().getFileListByUUID(showPoiEntity.getId());
if (fileListByUUID.size()==0) {
ivRoadPicture.setImageDrawable(null);
} else {
boolean isImageLoad = false;
for (int i = 0; i < fileListByUUID.size(); i++) {
File videoFile = fileListByUUID.get(i);
if (videoFile.getPath().contains(".mp4") && !videoFile.getPath().contains(".mp4.txt")) {
if (videoFile.exists() && !isImageLoad) {
// 使用glide加载视频的第一帧
AWMp4ParserHelper.getInstance().loadFirstWithGlide(getActivity(), Uri.fromFile(videoFile).toString(), ivRoadPicture, 500);
isImageLoad = true;
}
}
}
fmRoadPic.setTag(fileListByUUID);
}
} }
} }
@ -294,6 +313,19 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
case R.id.btn_road_save: case R.id.btn_road_save:
initPoiSaveLocal(false); initPoiSaveLocal(false);
break; break;
case R.id.tv_video_album:
if (fmRoadPic.getTag() == null) {
Toast.makeText(getContext(), "请录像后才可以查看", Toast.LENGTH_SHORT).show();
return;
}
if (tvPictures.isEnabled()) {
showPoiEntity.setRecord_way(1);
Intent photoAlbumIntent = new Intent(getActivity(), FragmentManagement.class);
photoAlbumIntent.putExtra("tag", 37);
photoAlbumIntent.putExtra("showPoiEntity", showPoiEntity);
startActivity(photoAlbumIntent);
}
break;
case R.id.tv_pictures: case R.id.tv_pictures:
// 根据用户点击的时间为视频名称赋值 // 根据用户点击的时间为视频名称赋值
@ -318,7 +350,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
ZipUtil.zipFiles(videoFileList, fileZip, null);//压缩 ZipUtil.zipFiles(videoFileList, fileZip, null);//压缩
PoiEntity poiDaoPoiEntity = poiDao.getPoiEntity(showPoiEntity.getId()); PoiEntity poiDaoPoiEntity = poiDao.getPoiEntity(showPoiEntity.getId());
if (poiDaoPoiEntity == null || poiDaoPoiEntity.getTaskStatus() == 1 || poiDaoPoiEntity.getTaskStatus() == 2 || poiDaoPoiEntity.getTaskStatus() == 0 || poiDaoPoiEntity.getTaskStatus() == 5) { if (poiDaoPoiEntity == null || poiDaoPoiEntity.getTaskStatus() == 1 || poiDaoPoiEntity.getTaskStatus() == 2 || poiDaoPoiEntity.getTaskStatus() == 0 || poiDaoPoiEntity.getTaskStatus() == 5) {
getActivity().runOnUiThread(new Runnable() { Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
dismissLoadingDialog(); dismissLoadingDialog();
@ -327,7 +359,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
}); });
} else { } else {
getActivity().runOnUiThread(new Runnable() { Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
dismissLoadingDialog(); dismissLoadingDialog();
@ -365,7 +397,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
@Override @Override
public void run() { public void run() {
InsertAndUpdateUtils.getInstance().insertOrUpdate(getContext(), poiEntity); InsertAndUpdateUtils.getInstance().insertOrUpdate(getContext(), poiEntity);
getActivity().runOnUiThread(new Runnable() { Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
roadSaveBetWork(poiEntity, isLocal); roadSaveBetWork(poiEntity, isLocal);
@ -384,7 +416,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
if (never) { if (never) {
Toast.makeText(getActivity(), "被永久拒绝授权,请手动授予权限", Toast.LENGTH_SHORT).show(); Toast.makeText(getActivity(), "被永久拒绝授权,请手动授予权限", Toast.LENGTH_SHORT).show();
// 如果是被永久拒绝就跳转到应用权限系统设置页面 // 如果是被永久拒绝就跳转到应用权限系统设置页面
XXPermissions.startPermissionActivity(getActivity(), permissions); XXPermissions.startPermissionActivity(Objects.requireNonNull(getActivity()), permissions);
} }
} }
@ -424,7 +456,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
public void run() { public void run() {
PoiEntity poiDaoPoiEntity = poiDao.getPoiEntity(showPoiEntity.getId()); PoiEntity poiDaoPoiEntity = poiDao.getPoiEntity(showPoiEntity.getId());
poiDao.deletePoiEntity(poiDaoPoiEntity); poiDao.deletePoiEntity(poiDaoPoiEntity);
getActivity().runOnUiThread(new Runnable() { Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
Toast.makeText(getActivity(), "上传成功", Toast.LENGTH_SHORT).show(); Toast.makeText(getActivity(), "上传成功", Toast.LENGTH_SHORT).show();
@ -478,7 +510,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
@Override @Override
public void run() { public void run() {
InsertAndUpdateUtils.getInstance().insertOrUpdate(getContext(), poiEntity); InsertAndUpdateUtils.getInstance().insertOrUpdate(getContext(), poiEntity);
getActivity().runOnUiThread(new Runnable() { Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
if (isLocal) { if (isLocal) {
@ -521,8 +553,8 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
if (resultCode == 0x101) { if (resultCode == 0x101) {
if (data != null && data.hasExtra(Constant.INTENT_VIDEO_PATH)) { if (data != null && data.hasExtra(Constant.INTENT_VIDEO_PATH)) {
// 扫描照片目录中当前视频的所有视频文件 // 扫描照片目录中当前视频的所有视频文件
String videoPath = data.getStringExtra(Constant.INTENT_VIDEO_PATH); String videoPath = data.getStringExtra(Constant.INTENT_VIDEO_PATH);
assert videoPath != null;
File videoFile = new File(videoPath); File videoFile = new File(videoPath);
if (videoFile.exists()) { if (videoFile.exists()) {
Bitmap bitmap = AWMp4ParserHelper.getInstance().getLocalVideoBitmap(videoPath); Bitmap bitmap = AWMp4ParserHelper.getInstance().getLocalVideoBitmap(videoPath);
@ -530,7 +562,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
int width = bitmap.getWidth(); int width = bitmap.getWidth();
if (height > width) { if (height > width) {
DialogSettings.style = DialogSettings.STYLE.STYLE_KONGZUE; DialogSettings.style = DialogSettings.STYLE.STYLE_KONGZUE;
MessageDialog.show((AppCompatActivity) getContext(), "提示", "请重新录像,要求横屏录像", "确定").setOkButton(new OnDialogButtonClickListener() { MessageDialog.show((AppCompatActivity) Objects.requireNonNull(getContext()), "提示", "请重新录像,要求横屏录像", "确定").setOkButton(new OnDialogButtonClickListener() {
@Override @Override
public boolean onClick(BaseDialog baseDialog, View v) { public boolean onClick(BaseDialog baseDialog, View v) {
Intent intentPanorama = new Intent(getActivity(), PictureActivity.class); Intent intentPanorama = new Intent(getActivity(), PictureActivity.class);
@ -541,12 +573,11 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
return false; return false;
} }
}); });
return;
} else { } else {
if (videoFile.exists()) { if (videoFile.exists()) {
AWMp4ParserHelper.getInstance().loadFirstWithGlide(getActivity(), Uri.fromFile(videoFile).toString(), ivRoadPicture, 500); AWMp4ParserHelper.getInstance().loadFirstWithGlide(getActivity(), Uri.fromFile(videoFile).toString(), ivRoadPicture, 500);
List<File> videoFileListByUUID = AWMp4ParserHelper.getInstance().getVideoFileListByUUID(showPoiEntity.getId()); List<File> fileListByUUID = AWMp4ParserHelper.getInstance().getFileListByUUID(showPoiEntity.getId());
fmRoadPic.setTag(videoFileListByUUID); fmRoadPic.setTag(fileListByUUID);
} }
} }
@ -571,7 +602,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
//表示文件名系统将会在/dada/dada/包名/shared_prefs目录下生成 //表示文件名系统将会在/dada/dada/包名/shared_prefs目录下生成
//一个以该参数命名的.xml文件第二个mode表示创建的模式通过查看 //一个以该参数命名的.xml文件第二个mode表示创建的模式通过查看
//方法注释得知建议以0或者MODE_PRIVATE为默认值 //方法注释得知建议以0或者MODE_PRIVATE为默认值
SharedPreferences poi = getActivity().getSharedPreferences(Constant.DATA_FILE, 0); SharedPreferences poi = Objects.requireNonNull(getActivity()).getSharedPreferences(Constant.DATA_FILE, 0);
//获取Editor对象 //获取Editor对象
SharedPreferences.Editor edit = poi.edit(); SharedPreferences.Editor edit = poi.edit();
//根据要保存的数据的类型调用对应的put方法, //根据要保存的数据的类型调用对应的put方法,
@ -580,7 +611,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
//以键值对的形式添加新值 //以键值对的形式添加新值
edit.putString("poiEntity", newPoiEntity); edit.putString("poiEntity", newPoiEntity);
//提交新值必须执行否则前面的操作都无效 //提交新值必须执行否则前面的操作都无效
edit.commit(); edit.apply();
Log.d("TAG", "initRoadSharePre: " + newPoiEntity); Log.d("TAG", "initRoadSharePre: " + newPoiEntity);
} }
@ -617,7 +648,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
if (showPoiEntity != null) { if (showPoiEntity != null) {
if (showPoiEntity.getTaskStatus() == 5) { if (showPoiEntity.getTaskStatus() == 5) {
initEndReceiveTask(HttpInterface.UNRECEIVED_POLYGON_TASK, showPoiEntity); initEndReceiveTask(HttpInterface.UNRECEIVED_POLYGON_TASK, showPoiEntity);
}else { } else {
Message obtain = Message.obtain(); Message obtain = Message.obtain();
obtain.what = Constant.JOB_WORD_MONITOR; obtain.what = Constant.JOB_WORD_MONITOR;
obtain.obj = true; obtain.obj = true;
@ -627,6 +658,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
} }
} }
@Override @Override
public void onDestroy() { public void onDestroy() {
if (EventBus.getDefault().isRegistered(this))//加上判断 if (EventBus.getDefault().isRegistered(this))//加上判断
@ -683,7 +715,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
@Override @Override
protected PoiEntity initPoiEntityByUI(PoiEntity poiEntity) { protected PoiEntity initPoiEntityByUI(PoiEntity poiEntity) {
String roadName = etRoadName.getText().toString().trim(); String roadName = etRoadName.getText().toString().trim();
if (roadName != null && !roadName.equals("")) { if (!roadName.equals("")) {
poiEntity.setName(roadName); poiEntity.setName(roadName);
} else { } else {
DateFormat formatters = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); DateFormat formatters = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
@ -702,7 +734,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
} }
sb.append("-").append(formats); sb.append("-").append(formats);
poiEntity.setName(sb.toString()); poiEntity.setName(sb.toString());
getActivity().runOnUiThread(new Runnable() { Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
etRoadName.setText(sb); etRoadName.setText(sb);
@ -715,7 +747,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
poiEntity.setWork_type(pictureType); poiEntity.setWork_type(pictureType);
} }
String desc = etDesc.getText().toString().trim(); String desc = etDesc.getText().toString().trim();
if (desc != null && !desc.equals("")) { if (!desc.equals("")) {
poiEntity.setMemo(desc); poiEntity.setMemo(desc);
} }
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@ -726,14 +758,14 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
poiEntity.setType(4); poiEntity.setType(4);
poiEntity.setTaskStatus(2); poiEntity.setTaskStatus(2);
if (fmRoadPic.getTag() == null) { if (fmRoadPic.getTag() == null) {
List<File> videoFileListByUUID = AWMp4ParserHelper.getInstance().getVideoFileListByUUID(showPoiEntity.getId()); List<File> fileListByUUID = AWMp4ParserHelper.getInstance().getFileListByUUID(showPoiEntity.getId());
if (videoFileListByUUID != null) { if (fileListByUUID != null) {
fmRoadPic.setTag(videoFileListByUUID); fmRoadPic.setTag(fileListByUUID);
} }
} }
if (fmRoadPic.getTag() != null && !((List<File>) fmRoadPic.getTag()).isEmpty()) { if (fmRoadPic.getTag() != null && !((List<File>) fmRoadPic.getTag()).isEmpty()) {
List<LatLng> lineStringByVideoFileList = AWMp4ParserHelper.getInstance().getLineStringByVideoFileList((List<File>) fmRoadPic.getTag()); List<LatLng> lineStringByFileList = AWMp4ParserHelper.getInstance().getLineStringByFileList((List<File>) fmRoadPic.getTag());
String lineString = GeometryTools.getLineString(lineStringByVideoFileList); String lineString = GeometryTools.getLineString(lineStringByFileList);
Log.d("TAG", "onGranted: " + lineString); Log.d("TAG", "onGranted: " + lineString);
String photoStr = AWMp4ParserHelper.getInstance().getVideoFileListStr((List<File>) fmRoadPic.getTag()); String photoStr = AWMp4ParserHelper.getInstance().getVideoFileListStr((List<File>) fmRoadPic.getTag());
poiEntity.setPhoto(photoStr); poiEntity.setPhoto(photoStr);

View File

@ -1,20 +1,29 @@
package com.navinfo.outdoor.fragment; package com.navinfo.outdoor.fragment;
import android.os.Bundle; import android.os.Bundle;
import android.os.Message;
import android.view.KeyEvent;
import android.view.View; import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast;
import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.navinfo.outdoor.R; import com.navinfo.outdoor.R;
import com.navinfo.outdoor.adapter.PhotoAdapter;
import com.navinfo.outdoor.adapter.VideoAdapter; import com.navinfo.outdoor.adapter.VideoAdapter;
import com.navinfo.outdoor.api.Constant;
import com.navinfo.outdoor.base.BaseFragment; import com.navinfo.outdoor.base.BaseFragment;
import com.navinfo.outdoor.bean.FileBean;
import com.navinfo.outdoor.room.PoiEntity; import com.navinfo.outdoor.room.PoiEntity;
import com.navinfo.outdoor.util.AWMp4ParserHelper; import com.navinfo.outdoor.util.AWMp4ParserHelper;
import org.greenrobot.eventbus.EventBus;
import java.io.File; import java.io.File;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -23,7 +32,10 @@ import java.util.Objects;
*/ */
public class VideoFragment extends BaseFragment implements View.OnClickListener { public class VideoFragment extends BaseFragment implements View.OnClickListener {
private List<File> fileListByUUID;
private ArrayList<FileBean> fileBeans;
private ArrayList<FileBean> deleteFiles;
private VideoAdapter videoAdapter;
public static VideoFragment newInstance(Bundle bundle) { public static VideoFragment newInstance(Bundle bundle) {
VideoFragment fragment = new VideoFragment(); VideoFragment fragment = new VideoFragment();
@ -35,28 +47,77 @@ public class VideoFragment extends BaseFragment implements View.OnClickListener
protected int getLayout() { protected int getLayout() {
return R.layout.fragment_video; return R.layout.fragment_video;
} }
@Override
public void onResume() {
super.onResume();
getFocus();
}
//主界面获取焦点
private void getFocus() {
Objects.requireNonNull(getView()).setFocusableInTouchMode(true);
getView().requestFocus();
getView().setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {
Message message = new Message();
message.what= Constant.VIDEO_FINISH_ROAD;
EventBus.getDefault().post(message);
Objects.requireNonNull(getActivity()).finish();
return true;
}
return false;
}
});
}
@Override @Override
protected void initView() { protected void initView() {
super.initView(); super.initView();
PoiEntity showPoiEntity = (PoiEntity) Objects.requireNonNull(getActivity()).getIntent().getSerializableExtra("showPoiEntity"); PoiEntity showPoiEntity = (PoiEntity) Objects.requireNonNull(getActivity()).getIntent().getSerializableExtra("showPoiEntity");
deleteFiles = new ArrayList<>();
ArrayList<File> textFile = new ArrayList<>();
if (showPoiEntity != null) { if (showPoiEntity != null) {
String id = showPoiEntity.getId(); String id = showPoiEntity.getId();
if (showPoiEntity.getRecord_way() == 2) { if (showPoiEntity.getRecord_way() == 1) {
fileListByUUID = AWMp4ParserHelper.getInstance().getVideoFileListByUUID(id); fileBeans = new ArrayList<>();
List<File> fileListByUUID = AWMp4ParserHelper.getInstance().getFileListByUUID(id);
for (int i = 0; i < fileListByUUID.size(); i++) {
if (!fileListByUUID.get(i).getPath().contains(".txt")) {
FileBean fileBean = new FileBean(fileListByUUID.get(i), false);
fileBeans.add(fileBean);
}else {
textFile.add(fileListByUUID.get(i));
}
}
} }
} }
ImageView ivPhotoFinal =(ImageView) findViewById(R.id.iv_video_final); ImageView ivPhotoFinal = (ImageView) findViewById(R.id.iv_video_final);
ivPhotoFinal.setOnClickListener(this); ivPhotoFinal.setOnClickListener(this);
TextView tvPhotoChoose =(TextView) findViewById(R.id.tv_video_choose); TextView tvPhotoAlbumDelete = (TextView) findViewById(R.id.tv_video_album_delete);
tvPhotoChoose.setOnClickListener(this);
TextView tvPhotoAlbumDelete =(TextView) findViewById(R.id.tv_video_album_delete);
tvPhotoAlbumDelete.setOnClickListener(this); tvPhotoAlbumDelete.setOnClickListener(this);
RecyclerView videoRecycler = findViewById(R.id.video_album_recycler); RecyclerView videoRecycler = findViewById(R.id.video_album_recycler);
videoRecycler.setLayoutManager(new GridLayoutManager(getContext(), 2)); videoRecycler.setLayoutManager(new GridLayoutManager(getContext(), 2));
VideoAdapter videoAdapter = new VideoAdapter(fileListByUUID, getContext()); videoAdapter = new VideoAdapter(fileBeans, getContext());
videoAdapter.setTextFile(textFile);
videoRecycler.setAdapter(videoAdapter); videoRecycler.setAdapter(videoAdapter);
videoAdapter.setPhotoClickItem(new VideoAdapter.photoClickItem() {
@Override
public void item(boolean isBoolean, FileBean fileBean) {
if (isBoolean) {
deleteFiles.add(fileBean);
} else {
if (deleteFiles != null) {
for (int i = 0; i < deleteFiles.size(); i++) {
if (fileBean.getFile().getPath().equals(deleteFiles.get(i).getFile().getPath())) {
deleteFiles.remove(fileBean);
}
}
}
}
}
});
} }
@Override @Override
@ -68,8 +129,21 @@ public class VideoFragment extends BaseFragment implements View.OnClickListener
public void onClick(View v) { public void onClick(View v) {
switch (v.getId()) { switch (v.getId()) {
case R.id.iv_video_final: case R.id.iv_video_final:
Message message = new Message();
message.what= Constant.VIDEO_FINISH_ROAD;
EventBus.getDefault().post(message);
Objects.requireNonNull(getActivity()).finish(); Objects.requireNonNull(getActivity()).finish();
break; break;
case R.id.tv_video_album_delete:
if (fileBeans != null) {
for (int i = 0; i < fileBeans.size(); i++) {
videoAdapter.deleteFile(fileBeans.get(i));
}
} else {
Toast.makeText(getContext(), "请选择要删除的数据后才可以删除", Toast.LENGTH_SHORT).show();
}
break;
} }
} }

View File

@ -295,39 +295,22 @@ public class AWMp4ParserHelper {
/** /**
* 根据提供的uuid获取指定目录下所有的视频文件 * 根据提供的uuid获取指定目录下所有的视频文件
* */ * */
public List<File> getVideoFileListByUUID(String uuid) { public List<File> getFileListByUUID(String uuid) {
List<File> videoFileList = new ArrayList<>(); List<File> fileList = new ArrayList<>();
if (StringUtils.isEmpty(uuid)) { if (StringUtils.isEmpty(uuid)) {
return videoFileList; return fileList;
} }
File folderFile = new File(Constant.PICTURE_FOLDER+"/"+uuid+"/"); File folderFile = new File(Constant.PICTURE_FOLDER+"/"+uuid+"/");
if (!folderFile.exists()) { if (!folderFile.exists()) {
folderFile.mkdirs(); folderFile.mkdirs();
return videoFileList; return fileList;
} }
for (File videoFile: folderFile.listFiles()) { for (File videoFile: folderFile.listFiles()) {
videoFileList.add(videoFile); fileList.add(videoFile);
} }
return videoFileList; return fileList;
}
/**
* 根据提供的uuid获取指定目录下所有的视频文件
* */
public List<File> getJPGFileListByUUID(String uuid) {
List<File> videoFileList = new ArrayList<>();
if (StringUtils.isEmpty(uuid)) {
return videoFileList;
}
File folderFile = new File(Constant.PICTURE_FOLDER+"/"+uuid+"/");
if (!folderFile.exists()) {
folderFile.mkdirs();
return videoFileList;
}
for (File videoFile: folderFile.listFiles()) {
videoFileList.add(videoFile);
}
return videoFileList;
} }
public String getVideoFileListStr(List<File> videoFileList) { public String getVideoFileListStr(List<File> videoFileList) {
StringBuilder resultStrBuilder = new StringBuilder(""); StringBuilder resultStrBuilder = new StringBuilder("");
if (videoFileList == null || videoFileList.size()<=0){ if (videoFileList == null || videoFileList.size()<=0){
@ -347,37 +330,7 @@ public class AWMp4ParserHelper {
/** /**
* 根据视频文件列表获取到对应的轨迹数据 * 根据视频文件列表获取到对应的轨迹数据
* */ * */
public List<LatLng> getLineStringByVideoFileList(List<File> videoFileList) { public List<LatLng> getLineStringByFileList(List<File> videoFileList) {
List<LatLng> latLngs = new ArrayList<>();
if (videoFileList == null || videoFileList.isEmpty()) {
return latLngs;
}
for (int m = 0; m < videoFileList.size(); m++) {
File videoFile = videoFileList.get(m);
String path = videoFile.getPath() + ".txt";
List<String> strings = FileUtils.readFileToList(path, "utf-8");
if (strings!=null) {
for (int i = 0; i < strings.size(); i++) {
String[] split = strings.get(i).split(",");
LatLng latLng = new LatLng();
latLng.setLatitude(Double.valueOf(split[2]));
latLng.setLongitude(Double.valueOf(split[3]));
latLngs.add(latLng);
}
if (strings.size() == 1) {
LatLng latLng = latLngs.get(0);
latLngs.add(latLng);
}
}
}
return latLngs;
}
/**
* 根据视频文件列表获取到对应的轨迹数据
* */
public List<LatLng> getLineStringByPictureFileList(List<File> videoFileList) {
List<LatLng> latLngs = new ArrayList<>(); List<LatLng> latLngs = new ArrayList<>();
if (videoFileList == null || videoFileList.isEmpty()) { if (videoFileList == null || videoFileList.isEmpty()) {
return latLngs; return latLngs;

View File

@ -75,7 +75,7 @@ public class PoiSaveUtils {
} }
} }
} }
}else {//其他类型 } else {//其他类型
if (savePoiNet(poiEntity) == 200) { // 网络保存成功 if (savePoiNet(poiEntity) == 200) { // 网络保存成功
//走上传流程 //走上传流程
uploadPoiNet(poiEntity); uploadPoiNet(poiEntity);
@ -257,13 +257,7 @@ public class PoiSaveUtils {
} }
} }
} }
List<File> videoFileList=null; List<File> videoFileList = AWMp4ParserHelper.getInstance().getFileListByUUID(poiEntity.getId());
if (poiEntity.getRecord_way()==1){
videoFileList = AWMp4ParserHelper.getInstance().getVideoFileListByUUID(poiEntity.getId());
}else if (poiEntity.getRecord_way()==2){
videoFileList = AWMp4ParserHelper.getInstance().getJPGFileListByUUID(poiEntity.getId());
}
if (videoFileList != null && !videoFileList.isEmpty()) { if (videoFileList != null && !videoFileList.isEmpty()) {
List<File> txtFileList = new ArrayList<>(); List<File> txtFileList = new ArrayList<>();
for (File videoFile : videoFileList) { for (File videoFile : videoFileList) {
@ -273,7 +267,7 @@ public class PoiSaveUtils {
videoFileList.addAll(txtFileList); videoFileList.addAll(txtFileList);
File fileZip = new File(Constant.PICTURE_FOLDER, "files" + ".zip"); File fileZip = new File(Constant.PICTURE_FOLDER, "files" + ".zip");
ZipUtil.zipFiles(videoFileList, fileZip, null); ZipUtil.zipFiles(videoFileList, fileZip, null);
if (fileZip!=null){ if (fileZip != null) {
photoFile.add(fileZip); photoFile.add(fileZip);
} }
} }
@ -313,11 +307,11 @@ public class PoiSaveUtils {
OtherUploadPicBean otherUploadPicBean = gson.fromJson(bodyStr, OtherUploadPicBean.class); OtherUploadPicBean otherUploadPicBean = gson.fromJson(bodyStr, OtherUploadPicBean.class);
if (otherUploadPicBean.getCode() == 200) { if (otherUploadPicBean.getCode() == 200) {
PoiDatabase.getInstance(mContext).getPoiDao().deletePoiEntity(poiEntity); PoiDatabase.getInstance(mContext).getPoiDao().deletePoiEntity(poiEntity);
Log.d("TAGss", "uploadPoiNet: 成功"+anInt); Log.d("TAGss", "uploadPoiNet: 成功" + anInt);
anInt++; anInt++;
return; return;
} else { } else {
Log.d("TAGss", "uploadPoiNet: 失败"+bInt); Log.d("TAGss", "uploadPoiNet: 失败" + bInt);
bInt++; bInt++;
return; return;
} }
@ -360,7 +354,7 @@ public class PoiSaveUtils {
// 依次上传充电桩数据如果有一条数据未上传成功则返回false // 依次上传充电桩数据如果有一条数据未上传成功则返回false
for (ChargingPileEntity pileEntity : chargingPileEntityList) { for (ChargingPileEntity pileEntity : chargingPileEntityList) {
if (pileEntity.getBodyId() == 0) { if (pileEntity.getBodyId() == 0) {
int saveResult = saveChargingPile2NetWork(pileEntity,poiEntity.getBodyId()); int saveResult = saveChargingPile2NetWork(pileEntity, poiEntity.getBodyId());
if (saveResult == 200) { if (saveResult == 200) {
result = result & true; result = result & true;
} else { } else {
@ -398,7 +392,7 @@ public class PoiSaveUtils {
.url(HttpInterface.SUBMIT_CSTASK) .url(HttpInterface.SUBMIT_CSTASK)
.token(Constant.ACCESS_TOKEN) .token(Constant.ACCESS_TOKEN)
.params(httpParams).getSynchronization(); .params(httpParams).getSynchronization();
if (execute==null){ if (execute == null) {
return -1; return -1;
} }
if (execute.code() != 200) { if (execute.code() != 200) {
@ -472,15 +466,15 @@ public class PoiSaveUtils {
} }
try { try {
HttpParams httpParams=new HttpParams(); HttpParams httpParams = new HttpParams();
httpParams.put("auditId",chargingPileEntity.getBodyId()); httpParams.put("auditId", chargingPileEntity.getBodyId());
Response execute = OkGoBuilder.getInstance() Response execute = OkGoBuilder.getInstance()
.Builder(mContext) .Builder(mContext)
.url(HttpInterface.CS_TASK_UP_LOAD_PIC) .url(HttpInterface.CS_TASK_UP_LOAD_PIC)
.token(Constant.ACCESS_TOKEN) .token(Constant.ACCESS_TOKEN)
.params(httpParams) .params(httpParams)
.fileList(chargingPileFileList).postFileSynchronization(); .fileList(chargingPileFileList).postFileSynchronization();
if (execute==null){ if (execute == null) {
return -1; return -1;
} }
if (execute.code() != 200) { if (execute.code() != 200) {

View File

@ -2,8 +2,7 @@
android:width="24dp" android:width="24dp"
android:height="24dp" android:height="24dp"
android:viewportWidth="24" android:viewportWidth="24"
android:viewportHeight="24" android:viewportHeight="24">
android:tint="?attr/colorControlNormal">
<path <path
android:fillColor="@android:color/white" android:fillColor="@android:color/white"
android:pathData="M11.67,3.87L9.9,2.1 0,12l9.9,9.9 1.77,-1.77L3.54,12z"/> android:pathData="M11.67,3.87L9.9,2.1 0,12l9.9,9.9 1.77,-1.77L3.54,12z"/>

View File

@ -0,0 +1,5 @@
<vector android:alpha="1" android:height="40dp"
android:tint="#ffff" android:viewportHeight="40"
android:viewportWidth="40" android:width="40dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M10,16.5l6,-4.5 -6,-4.5v9zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8z"/>
</vector>

View File

@ -1,32 +1,43 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/full_image_root" android:id="@+id/full_image_root"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:background="#F4EEEE" > android:background="#F4EEEE">
<LinearLayout
android:id="@+id/rl_image_show"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#1BA5F1"
android:paddingTop="@dimen/top_pind_sp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/iv_image_show"
android:layout_width="wrap_content"
android:layout_height="45dp"
android:layout_marginStart="15dp"
android:src="@drawable/icon_arrow"
/>
<TextView
android:id="@+id/tv_image_show"
android:layout_width="wrap_content"
style="@style/text_style_toolbar_title"
android:text="图片详情" />
</LinearLayout>
<androidx.viewpager.widget.ViewPager <androidx.viewpager.widget.ViewPager
android:id="@+id/image_pager" android:id="@+id/image_pager"
android:layout_width="fill_parent" android:layout_width="match_parent"
android:layout_height="fill_parent" /> android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/rl_image_show" />
<ImageView </androidx.constraintlayout.widget.ConstraintLayout>
android:id="@+id/download"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="15.0dip"
android:layout_marginRight="15.0dip"
android:src="@drawable/ic_baseline_arrow_back" />
<TextView
android:id="@+id/page_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/download"
android:layout_marginLeft="15.0dip"
android:textColor="#ffeeeeee"
android:textSize="12.0sp" />
</RelativeLayout>

View File

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/rl_video"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#1BA5F1"
android:paddingTop="@dimen/top_pind_sp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/iv_video"
android:layout_width="wrap_content"
android:layout_height="45dp"
android:layout_marginStart="15dp"
android:src="@drawable/icon_arrow"
/>
<TextView
android:id="@+id/tv_video"
android:layout_width="wrap_content"
style="@style/text_style_toolbar_title"
android:text="查看视频" />
</LinearLayout>
<cn.jzvd.JzvdStd
android:id="@+id/jz_video"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/rl_user" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<LinearLayout <RelativeLayout
android:id="@+id/rl_photo_album" android:id="@+id/rl_photo_album"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -25,32 +25,20 @@
<TextView <TextView
android:id="@+id/tv_event" android:id="@+id/tv_event"
android:layout_toEndOf="@id/iv_photo_final"
style="@style/text_style_toolbar_title" style="@style/text_style_toolbar_title"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:text="查看图片" /> android:text="查看图片" />
</LinearLayout> <TextView
android:id="@+id/tv_photo_album_delete"
android:layout_width="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginEnd="10dp"
style="@style/text_style_toolbar_title"
android:text="删除" />
<TextView </RelativeLayout>
android:id="@+id/tv_photo_choose"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="选择"
android:textColor="@color/black"
android:textSize="16sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/rl_photo_album"/>
<TextView
android:id="@+id/tv_photo_album_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="删除"
android:textColor="@color/black"
android:textSize="16sp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/rl_photo_album"/>
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/photo_album_recycler" android:id="@+id/photo_album_recycler"
@ -59,5 +47,5 @@
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_photo_album_delete" /> app:layout_constraintTop_toBottomOf="@+id/rl_photo_album" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -157,6 +157,16 @@
android:text="点击录像" android:text="点击录像"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="15sp" /> android:textSize="15sp" />
<TextView
android:id="@+id/tv_video_album"
style="@style/user_style"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:gravity="center"
android:text="点击查看成果"
android:textColor="@color/white"
android:textSize="15sp" />
</LinearLayout> </LinearLayout>

View File

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<LinearLayout
<RelativeLayout
android:id="@+id/rl_video_album" android:id="@+id/rl_video_album"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -25,32 +25,19 @@
<TextView <TextView
android:id="@+id/tv_event" android:id="@+id/tv_event"
android:layout_toEndOf="@id/iv_video_final"
style="@style/text_style_toolbar_title" style="@style/text_style_toolbar_title"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:text="查看視頻" /> android:text="查看視頻" />
</LinearLayout> <TextView
android:id="@+id/tv_video_album_delete"
android:layout_width="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginEnd="10dp"
style="@style/text_style_toolbar_title"
android:text="删除" />
<TextView </RelativeLayout>
android:id="@+id/tv_video_choose"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="选择"
android:textColor="@color/black"
android:textSize="16sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/rl_video_album"/>
<TextView
android:id="@+id/tv_video_album_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="删除"
android:textColor="@color/black"
android:textSize="16sp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/rl_video_album"/>
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/video_album_recycler" android:id="@+id/video_album_recycler"
@ -59,5 +46,5 @@
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_video_album_delete" /> app:layout_constraintTop_toBottomOf="@+id/rl_video_album" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -2,27 +2,27 @@
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<ImageView
android:id="@+id/iv_photo"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_margin="5dp"
android:scaleType="fitXY"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<CheckBox <CheckBox
android:id="@+id/check_photo" android:id="@+id/check_photo"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="5dp" android:layout_margin="2dp"
app:layout_constraintBottom_toBottomOf="parent" android:buttonTint="@color/white"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintBottom_toBottomOf="@+id/iv_photo"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintEnd_toEndOf="@+id/iv_photo" />
<ImageView
android:id="@+id/iv_photo"
android:layout_width="0dp"
android:layout_height="150dp"
android:layout_margin="5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toEndOf="@+id/check_photo"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -4,25 +4,34 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<ImageView
android:id="@+id/iv_video"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_margin="5dp"
android:scaleType="fitXY"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@drawable/ic_baseline_play"
app:layout_constraintBottom_toBottomOf="@+id/iv_video"
app:layout_constraintEnd_toEndOf="@+id/iv_video"
app:layout_constraintStart_toStartOf="@+id/iv_video"
app:layout_constraintTop_toTopOf="@+id/iv_video" />
<CheckBox <CheckBox
android:id="@+id/check_video" android:id="@+id/check_video"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="5dp" android:layout_margin="2dp"
app:layout_constraintBottom_toBottomOf="parent" android:buttonTint="@color/white"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintBottom_toBottomOf="@id/iv_video"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintEnd_toEndOf="@id/iv_video" />
<ImageView
android:id="@+id/iv_video"
android:layout_width="0dp"
android:layout_height="150dp"
android:layout_margin="5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toEndOf="@+id/check_video"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>