From c2c902a3bf998632ffffa9c1508aceba7b5a7b45 Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期五, 10 一月 2025 11:14:09 +0800 Subject: [PATCH] 1.添加网络视频的显示功能相关 --- app/src/main/res/drawable/play.xml | 18 +++ app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java | 7 + app/src/main/java/com/dayu/pipirrapp/adapter/ImageAdapter.java | 16 ++ app/src/main/java/com/dayu/pipirrapp/bean/net/IssueResult.java | 10 ++ app/src/main/java/com/dayu/pipirrapp/net/RetrofitClient.java | 2 app/src/main/java/com/dayu/pipirrapp/bean/net/DealDetailResult.java | 39 +++++-- app/src/main/java/com/dayu/pipirrapp/bean/ImageBean.java | 38 +++++++ app/src/main/java/com/dayu/pipirrapp/activity/IssueDetailActivity.java | 39 ++++++- app/src/main/java/com/dayu/pipirrapp/bean/net/AddProcessingRequest.java | 8 + app/src/main/res/layout/item_image.xml | 10 ++ app/src/main/java/com/dayu/pipirrapp/bean/net/AddIssueRequest.java | 10 + app/build.gradle | 8 + app/src/main/java/com/dayu/pipirrapp/activity/OrderDetailActivity.java | 39 ++++++- 13 files changed, 210 insertions(+), 34 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 7cd0c47..054a484 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,7 +12,7 @@ } } namespace 'com.dayu.pipirrapp' - compileSdk 33 + compileSdk 34 defaultConfig { applicationId "com.dayu.pipirrapp" @@ -189,12 +189,14 @@ implementation 'io.github.lucksiege:compress:v3.11.2' // 鍥剧墖鏌ョ湅 - implementation('com.github.SherlockGougou:BigImageViewPager:androidx-7.2.3') { + implementation('com.github.SherlockGougou:BigImageViewPager:androidx-8.0.0') { exclude group: 'androidx.appcompat'; exclude group: 'com.google.android.material'; exclude group: 'androidx.core'; } - + implementation "androidx.media3:media3-exoplayer:1.4.1" + implementation "androidx.media3:media3-exoplayer-dash:1.4.1" + implementation "androidx.media3:media3-ui:1.4.1" //杩涘害鍔犺浇 implementation 'com.github.jenly1314:circleprogressview:1.1.3' diff --git a/app/src/main/java/com/dayu/pipirrapp/activity/IssueDetailActivity.java b/app/src/main/java/com/dayu/pipirrapp/activity/IssueDetailActivity.java index ce34a36..bc529df 100644 --- a/app/src/main/java/com/dayu/pipirrapp/activity/IssueDetailActivity.java +++ b/app/src/main/java/com/dayu/pipirrapp/activity/IssueDetailActivity.java @@ -13,8 +13,10 @@ import com.dayu.pipirrapp.MyApplication; import com.dayu.pipirrapp.R; import com.dayu.pipirrapp.adapter.ImageAdapter; +import com.dayu.pipirrapp.bean.ImageBean; import com.dayu.pipirrapp.bean.net.ImageResult; import com.dayu.pipirrapp.bean.net.IssueResult; +import com.dayu.pipirrapp.bean.net.UplodFileState; import com.dayu.pipirrapp.databinding.ActivityIssueDetailBinding; import com.dayu.pipirrapp.fragment.OrderFragment; import com.dayu.pipirrapp.net.ApiManager; @@ -34,6 +36,8 @@ import java.util.Map; import cc.shinichi.library.ImagePreview; +import cc.shinichi.library.bean.ImageInfo; +import cc.shinichi.library.bean.Type; /** * IssueDetailActivity - 闂涓婃姤璇︽儏鐣岄潰 @@ -47,8 +51,8 @@ RecyclerView mRecyclerView; ActivityIssueDetailBinding binding; ImageAdapter mAdapter; - List<String> imageInfoList = new ArrayList<>(); - List<ImageResult> images = new ArrayList<>(); + List<ImageInfo> imageInfoList = new ArrayList<>(); + List<ImageBean> images = new ArrayList<>(); int state; String issueReportId; @@ -75,8 +79,7 @@ // 娣诲姞闂磋窛瑁呴グ锛岀‘淇濆浘鐗囨湁鍚堥�傜殑闂撮殧 mRecyclerView.addItemDecoration(new GridSpacingItemDecoration(4, DensityUtil.dip2px(this, 8), false)); mAdapter = new ImageAdapter(this, images, (v, position) -> { - ImagePreview.getInstance().setContext(IssueDetailActivity.this).setImageList(imageInfoList).start(); - + ImagePreview.getInstance().with(IssueDetailActivity.this).setIndex(position).setMediaInfoList(imageInfoList).start(); }); mRecyclerView.setAdapter(mAdapter); } @@ -94,9 +97,31 @@ binding.setData(orderDetailResult); binding.setItemclidk(IssueDetailActivity.this); state = orderDetailResult.getStateId(); - images.addAll(t.getContent().getImages()); - for (ImageResult imageResult : images) { - imageInfoList.add(imageResult.getWebPath()); + if (!t.getContent().getImages().isEmpty()){ + for (ImageResult imageResult:t.getContent().getImages()){ + ImageBean imageBean=new ImageBean(); + imageBean.setId(imageResult.getId()); + imageBean.setWebPath(imageResult.getWebPath()); + imageBean.setType(UplodFileState.IMG_TYPE); + images.add(imageBean); + ImageInfo info=new ImageInfo(); + info.setOriginUrl(imageResult.getWebPath()); + info.setType(Type.IMAGE); + imageInfoList.add(info); + } + } + if (!t.getContent().getVideos().isEmpty()){ + for (ImageResult imageResult:t.getContent().getVideos()){ + ImageBean imageBean=new ImageBean(); + imageBean.setId(imageResult.getId()); + imageBean.setWebPath(imageResult.getWebPath()); + imageBean.setType(UplodFileState.VIDEO_TYPE); + images.add(imageBean); + ImageInfo info=new ImageInfo(); + info.setOriginUrl(imageResult.getWebPath()); + info.setType(Type.VIDEO); + imageInfoList.add(info); + } } mAdapter.notifyDataSetChanged(); switch (state) { diff --git a/app/src/main/java/com/dayu/pipirrapp/activity/OrderDetailActivity.java b/app/src/main/java/com/dayu/pipirrapp/activity/OrderDetailActivity.java index 091139a..acf9e3a 100644 --- a/app/src/main/java/com/dayu/pipirrapp/activity/OrderDetailActivity.java +++ b/app/src/main/java/com/dayu/pipirrapp/activity/OrderDetailActivity.java @@ -19,9 +19,11 @@ import com.dayu.pipirrapp.MyApplication; import com.dayu.pipirrapp.R; import com.dayu.pipirrapp.adapter.ImageAdapter; +import com.dayu.pipirrapp.bean.ImageBean; import com.dayu.pipirrapp.bean.net.DealDetailResult; import com.dayu.pipirrapp.bean.net.ImageResult; import com.dayu.pipirrapp.bean.net.OrderDetailResult; +import com.dayu.pipirrapp.bean.net.UplodFileState; import com.dayu.pipirrapp.databinding.ActivityOrderDetailBinding; import com.dayu.pipirrapp.fragment.OrderFragment; import com.dayu.pipirrapp.net.ApiManager; @@ -43,6 +45,8 @@ import java.util.Map; import cc.shinichi.library.ImagePreview; +import cc.shinichi.library.bean.ImageInfo; +import cc.shinichi.library.bean.Type; /** * OrderDetailActivity - @@ -57,9 +61,9 @@ String workOrderId; String proResultId; ImageAdapter mAdapter; - List<ImageResult> images = new ArrayList<>(); + List<ImageBean> images = new ArrayList<>(); RecyclerView mRecyclerView; - final List<String> imageInfoList = new ArrayList<>(); + List<ImageInfo> imageInfoList = new ArrayList<>(); int ProResultStateId; private ActivityResultLauncher<Intent> activityResultLauncher = registerForActivityResult( @@ -120,7 +124,7 @@ // 娣诲姞闂磋窛瑁呴グ锛岀‘淇濆浘鐗囨湁鍚堥�傜殑闂撮殧 mRecyclerView.addItemDecoration(new GridSpacingItemDecoration(4, DensityUtil.dip2px(this, 8), false)); mAdapter = new ImageAdapter(this, images, (v, position) -> { - ImagePreview.getInstance().setContext(OrderDetailActivity.this).setImageList(imageInfoList).start(); + ImagePreview.getInstance().with(OrderDetailActivity.this).setIndex(position).setMediaInfoList(imageInfoList).start(); }); mRecyclerView.setAdapter(mAdapter); @@ -218,9 +222,32 @@ if (t.getContent() != null) { binding.orderDealLL.setVisibility(View.VISIBLE); binding.setDealData(t.getContent()); - images.addAll(t.getContent().getImages()); - for (ImageResult imageResult : images) { - imageInfoList.add(imageResult.getWebPath()); + + if (!t.getContent().getImages().isEmpty()){ + for (ImageResult imageResult:t.getContent().getImages()){ + ImageBean imageBean=new ImageBean(); + imageBean.setId(imageResult.getId()); + imageBean.setWebPath(imageResult.getWebPath()); + imageBean.setType(UplodFileState.IMG_TYPE); + images.add(imageBean); + ImageInfo info=new ImageInfo(); + info.setOriginUrl(imageResult.getWebPath()); + info.setType(Type.IMAGE); + imageInfoList.add(info); + } + } + if (!t.getContent().getVideos().isEmpty()){ + for (ImageResult imageResult:t.getContent().getVideos()){ + ImageBean imageBean=new ImageBean(); + imageBean.setId(imageResult.getId()); + imageBean.setWebPath(imageResult.getWebPath()); + imageBean.setType(UplodFileState.VIDEO_TYPE); + images.add(imageBean); + ImageInfo info=new ImageInfo(); + info.setOriginUrl(imageResult.getWebPath()); + info.setType(Type.VIDEO); + imageInfoList.add(info); + } } mAdapter.notifyDataSetChanged(); } else { diff --git a/app/src/main/java/com/dayu/pipirrapp/adapter/ImageAdapter.java b/app/src/main/java/com/dayu/pipirrapp/adapter/ImageAdapter.java index 956b92b..b4ad6cd 100644 --- a/app/src/main/java/com/dayu/pipirrapp/adapter/ImageAdapter.java +++ b/app/src/main/java/com/dayu/pipirrapp/adapter/ImageAdapter.java @@ -12,7 +12,9 @@ import com.bumptech.glide.load.resource.bitmap.CenterCrop; import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.dayu.pipirrapp.R; +import com.dayu.pipirrapp.bean.ImageBean; import com.dayu.pipirrapp.bean.net.ImageResult; +import com.dayu.pipirrapp.bean.net.UplodFileState; import com.dayu.pipirrapp.tool.GlideEngine; import java.util.List; @@ -25,12 +27,12 @@ * @since 2024-11-27 */ public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ImageViewHolder> { - private List<ImageResult> imageUrls; // 鍥剧墖鐨� URL 鎴栨湰鍦拌矾寰� + private List<ImageBean> imageUrls; // 鍥剧墖鐨� URL 鎴栨湰鍦拌矾寰� private Context mContext; private OnItemClickListener onItemClickListener; // 鏋勯�犳柟娉� - public ImageAdapter(Context context, List<ImageResult> imageUrls, OnItemClickListener onItemClickListener) { + public ImageAdapter(Context context, List<ImageBean> imageUrls, OnItemClickListener onItemClickListener) { this.imageUrls = imageUrls; this.mContext = context; this.onItemClickListener = onItemClickListener; @@ -46,9 +48,15 @@ @Override public void onBindViewHolder(ImageViewHolder holder, int position) { + ImageBean imageBean=imageUrls.get(position); + if (imageBean.getType()== UplodFileState.VIDEO_TYPE){ + holder.play.setVisibility(View.VISIBLE); + }else { + holder.play.setVisibility(View.GONE); + } // 浣跨敤 Glide 鍔犺浇鍥剧墖鍒� ImageView 涓� Glide.with(holder.itemView.getContext()) - .load(imageUrls.get(position).getWebPath()) // 鍔犺浇鍥剧墖鐨� URL 鎴栬矾寰� + .load(imageBean.getWebPath()) // 鍔犺浇鍥剧墖鐨� URL 鎴栬矾寰� .thumbnail(0.1f) // 璁剧疆缂╃暐鍥炬瘮渚�' .transform(new CenterCrop(), new RoundedCorners(8)) .placeholder(R.drawable.ps_image_placeholder) @@ -70,10 +78,12 @@ public static class ImageViewHolder extends RecyclerView.ViewHolder { ImageView imageView; + ImageView play; public ImageViewHolder(View itemView) { super(itemView); imageView = itemView.findViewById(R.id.thumbnailImageView); + play=itemView.findViewById(R.id.item_play); } } diff --git a/app/src/main/java/com/dayu/pipirrapp/bean/ImageBean.java b/app/src/main/java/com/dayu/pipirrapp/bean/ImageBean.java new file mode 100644 index 0000000..0b88082 --- /dev/null +++ b/app/src/main/java/com/dayu/pipirrapp/bean/ImageBean.java @@ -0,0 +1,38 @@ +package com.dayu.pipirrapp.bean; + +/** + * ImageBean -鍥剧墖鏄剧ずadapter + * + * @author zuoxiao + * @version 1.0 + * @since 2025-01-09 + */ +public class ImageBean { + String id; + String webPath; + int type; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWebPath() { + return webPath; + } + + public void setWebPath(String webPath) { + this.webPath = webPath; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } +} diff --git a/app/src/main/java/com/dayu/pipirrapp/bean/net/AddIssueRequest.java b/app/src/main/java/com/dayu/pipirrapp/bean/net/AddIssueRequest.java index 0f353e3..7fd7638 100644 --- a/app/src/main/java/com/dayu/pipirrapp/bean/net/AddIssueRequest.java +++ b/app/src/main/java/com/dayu/pipirrapp/bean/net/AddIssueRequest.java @@ -5,7 +5,7 @@ import java.util.Map; /** - * AddIssueRequest - + * AddIssueRequest - 娣诲姞闂涓婃姤 * * @author zuoxiao * @version 1.0 @@ -16,6 +16,7 @@ String inspectorId;//宸℃鍛業D String content;//缁撴灉鍐呭 List<ImageRequest> images = new ArrayList<>(); + List<ImageRequest> videos = new ArrayList<>(); String completeTime;//浠诲姟瀹屾垚鏃堕棿 String lng; String lat; @@ -54,7 +55,12 @@ ImageRequest image = new ImageRequest(); image.setWebPath(data.getWebPath()); image.setId(data.getPostId()); - images.add(image); + if (data.getUploadType()==UplodFileState.IMG_TYPE){ + images.add(image); + }else { + videos.add(image); + } + } } diff --git a/app/src/main/java/com/dayu/pipirrapp/bean/net/AddProcessingRequest.java b/app/src/main/java/com/dayu/pipirrapp/bean/net/AddProcessingRequest.java index 1e2f91e..b72a0b5 100644 --- a/app/src/main/java/com/dayu/pipirrapp/bean/net/AddProcessingRequest.java +++ b/app/src/main/java/com/dayu/pipirrapp/bean/net/AddProcessingRequest.java @@ -16,6 +16,7 @@ String inspectorId;//宸℃鍛業D String content;//缁撴灉鍐呭 List<ImageRequest> images = new ArrayList<>(); + List<ImageRequest> videos = new ArrayList<>(); String completeTime;//浠诲姟瀹屾垚鏃堕棿 String lng; String lat; @@ -79,7 +80,12 @@ ImageRequest image = new ImageRequest(); image.setWebPath(data.getWebPath()); image.setId(data.getPostId()); - images.add(image); + if (data.getUploadType()==UplodFileState.IMG_TYPE){ + images.add(image); + }else { + videos.add(image); + } + } } diff --git a/app/src/main/java/com/dayu/pipirrapp/bean/net/DealDetailResult.java b/app/src/main/java/com/dayu/pipirrapp/bean/net/DealDetailResult.java index e8800b8..0b07a9d 100644 --- a/app/src/main/java/com/dayu/pipirrapp/bean/net/DealDetailResult.java +++ b/app/src/main/java/com/dayu/pipirrapp/bean/net/DealDetailResult.java @@ -10,18 +10,37 @@ * @since 2024-12-06 */ public class DealDetailResult { - String proResultId;//澶勭悊缁撴灉ID - String workOrderId;// - String inspector;// 宸℃鍛� - String content;//缁撴灉鍐呭 - double lng;// 缁忓害 - double lat;// 绾害 - String completeTime;// 浠诲姟瀹屾垚鏃堕棿 绮剧‘鍒板垎 - String reportTime;//涓婃姤鏃堕棿 - int state;//鐘舵�� 1-宸蹭笂鎶ワ紝2-宸查�氳繃锛�3-宸查┏鍥� - String stateName;// 鐘舵�佸悕绉� + //澶勭悊缁撴灉ID + String proResultId; + String workOrderId; + // 宸℃鍛� + String inspector; + //缁撴灉鍐呭 + String content; + // 缁忓害 + double lng; + // 绾害 + double lat; + // 浠诲姟瀹屾垚鏃堕棿 绮剧‘鍒板垎 + String completeTime; + //涓婃姤鏃堕棿 + String reportTime; + //鐘舵�� 1-宸蹭笂鎶ワ紝2-宸查�氳繃锛�3-宸查┏鍥� + int state; + // 鐘舵�佸悕绉� + String stateName; List<ImageResult> images; + List<ImageResult> videos; + + + public List<ImageResult> getVideos() { + return videos; + } + + public void setVideos(List<ImageResult> videos) { + this.videos = videos; + } public List<ImageResult> getImages() { return images; diff --git a/app/src/main/java/com/dayu/pipirrapp/bean/net/IssueResult.java b/app/src/main/java/com/dayu/pipirrapp/bean/net/IssueResult.java index b5e2419..7d0703f 100644 --- a/app/src/main/java/com/dayu/pipirrapp/bean/net/IssueResult.java +++ b/app/src/main/java/com/dayu/pipirrapp/bean/net/IssueResult.java @@ -20,11 +20,21 @@ //String audios: [], //String videos: [], public List<ImageResult> images; + public List<ImageResult> videos; public String replyTime;//涓婃姤鍥炲鏃堕棿 null, public String replyContent;//鍥炲鍐呭 public int stateId;// public String state;//鏈彈鐞� + + public List<ImageResult> getVideos() { + return videos; + } + + public void setVideos(List<ImageResult> videos) { + this.videos = videos; + } + public String getIssueReportId() { return issueReportId; } diff --git a/app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java b/app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java index 742f9d3..d80da85 100644 --- a/app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java +++ b/app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java @@ -313,13 +313,18 @@ int progress = (int) (100 * bytesWritten / contentLength); // 渚嬪锛氭洿鏂� ProgressBar 鎴栨樉绀鸿繘搴� runOnUiThread(() -> { + if (progress <5) { + uplodData.setProgress(0); + } // 杩涘害鏉℃洿鏂颁唬鐮� if (adapter != null && uplodData.getAdapterPosition() != -1) { //浼樺寲涓嶉绻佹洿鏂拌繘搴� - if (progress - uplodData.getProgress() > 5 || progress == 100){ + if (progress - uplodData.getProgress() > 5 || progress == 100) { uplodData.setProgress(progress); adapter.updateProgress(uplodData); + } + } MyLog.d("progressRequestBodyHolder>>>path" + "adapterPosition:" + uplodData.getAdapterPosition() + ">>>涓婁紶杩涘害: " + progress + "%"); }); diff --git a/app/src/main/java/com/dayu/pipirrapp/net/RetrofitClient.java b/app/src/main/java/com/dayu/pipirrapp/net/RetrofitClient.java index c0cdaee..114316c 100644 --- a/app/src/main/java/com/dayu/pipirrapp/net/RetrofitClient.java +++ b/app/src/main/java/com/dayu/pipirrapp/net/RetrofitClient.java @@ -36,7 +36,7 @@ //娣诲姞鏃ュ織鎷︽埅鍣� //娣诲姞鏁版嵁璇锋眰缁熶竴澶勭悊鎷︽埅鍣� // if (BuildConfig.DEBUG) { -// builder.addInterceptor(loggingInterceptor); + builder.addInterceptor(loggingInterceptor); // } OkHttpClient client = builder.build(); diff --git a/app/src/main/res/drawable/play.xml b/app/src/main/res/drawable/play.xml new file mode 100644 index 0000000..df62a19 --- /dev/null +++ b/app/src/main/res/drawable/play.xml @@ -0,0 +1,18 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="48" + android:viewportHeight="48"> + <path + android:pathData="M24,44C35.046,44 44,35.046 44,24C44,12.954 35.046,4 24,4C12.954,4 4,12.954 4,24C4,35.046 12.954,44 24,44Z" + android:strokeLineJoin="round" + android:strokeWidth="4" + android:fillColor="#00000000" + android:strokeColor="#FFFFFF"/> + <path + android:pathData="M20,24V17.072L26,20.536L32,24L26,27.464L20,30.928V24Z" + android:strokeLineJoin="round" + android:strokeWidth="4" + android:fillColor="#00000000" + android:strokeColor="#FFFFFF"/> +</vector> diff --git a/app/src/main/res/layout/item_image.xml b/app/src/main/res/layout/item_image.xml index 67a51d5..f0fd6b5 100644 --- a/app/src/main/res/layout/item_image.xml +++ b/app/src/main/res/layout/item_image.xml @@ -3,6 +3,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="8dp" + android:layout_gravity="center" android:elevation="4dp"> <ImageView @@ -11,4 +12,13 @@ android:layout_height="match_parent" android:scaleType="centerCrop" /> + <ImageView + android:id="@+id/item_play" + android:layout_width="30dp" + android:layout_height="30dp" + android:layout_gravity="center" + android:src="@drawable/play"/> + + + </androidx.cardview.widget.CardView> \ No newline at end of file -- Gitblit v1.8.0