当前位置: 首页 > news >正文

如何做服装微商城网站建设福建住房与城乡建设厅网站

如何做服装微商城网站建设,福建住房与城乡建设厅网站,设计创意网站推荐,国内优秀网页设计欣赏需求描述 实现截取Android应用当前界面的功能#xff0c;需包含界面中视频#xff08;此博客的参考代码以存储在设备本地的视频为例#xff0c;未检验在线视频的情况#xff09;当前的播放帧截图。 调研准备 首先应用需要获取设备存储的读写权限#xff0c;需要在Andro…需求描述 实现截取Android应用当前界面的功能需包含界面中视频此博客的参考代码以存储在设备本地的视频为例未检验在线视频的情况当前的播放帧截图。 调研准备 首先应用需要获取设备存储的读写权限需要在AndroidManifest.xml中加上请求权限的配置代码 uses-permission android:nameandroid.permission.READ_EXTERNAL_STORAGE/ uses-permission android:nameandroid.permission.WRITE_EXTERNAL_STORAGE/此外Android原生的视频播放组件VideoView不支持修改视频的分辨率视频分辨率与容器宽高不一致时需要让视频拉伸填充容器因此需要自己封装一个继承了VideoView的组件在项目中新建一个MyVideoView.java内容如下 package XXX;import android.content.Context; import android.media.MediaPlayer; import android.util.AttributeSet; import android.util.Log; import android.widget.VideoView; import com.lzy.okgo.utils.HttpUtils; import java.io.File; import java.util.ArrayList; import java.util.List;public class MyVideoView extends VideoView {private static final String TAG ####MyVideoView ;// 记录当前播放视频的路径用于截取播放帧private String currentVideoUrl;public MyVideoView(Context paramContext) {super(paramContext);}public MyVideoView(Context paramContext, AttributeSet paramAttributeSet) {super(paramContext, paramAttributeSet);}public MyVideoView(Context paramContext, AttributeSet paramAttributeSet, int paramInt) {super(paramContext, paramAttributeSet, paramInt);}// 判断是否为视频文件public static boolean isVideo(String filePath) {filePath filePath.toLowerCase();String[] vFiles {.mov, .mkv, .mp4, .avi};for (byte vIdx 0; vIdx vFiles.length; vIdx) {if (filePath.endsWith(vFiles[vIdx])) return true; } return false;}// 循环播放视频public void LoopPlayBack(final String videoPath) {File file new File(videoPath);if (!file.exists() || !isVideo(videoPath)) return;// 开始播放视频this.currentVideoUrl videoPath;setVideoPath(videoPath);start();// 视频播放完成重新开始播放setOnCompletionListener(new MediaPlayer.OnCompletionListener() { Overridepublic void onCompletion(MediaPlayer mp) {MyVideoView.this.start();}});// 视频播放报错监听setOnErrorListener(new MediaPlayer.OnErrorListener() {Overridepublic boolean onError(MediaPlayer mp) {Log.d(TAG, 播放错误..);return false;}});}public String getCurrentVideoUrl() { // 获取视频文件路径用于截取播放帧return this.currentVideoUrl;}protected void onMeasure(int paramInt1, int paramInt2) { // 调整视频分辨率使视频拉伸填充容器setMeasuredDimension(getDefaultSize(getWidth(), paramInt1), getDefaultSize(getHeight(), paramInt2));} } 在相应的布局.xml中使用MyVideoView视频组件 P.S.如果要实现圆角视频效果可以在MyVideoView外再套一层CardView可参考CardView-卡片布局 LinearLayoutandroid:orientationhorizontalandroid:layout_width800.0pxandroid:layout_height600.0px XXX.MyVideoViewandroid:idid/videoandroid:visibilityvisibleandroid:layout_widthfill_parentandroid:layout_heightfill_parentandroid:layout-align-parent-toptrue/ /LinearLayout参考代码 如果界面中有视频播放使用getDrawingCache截取整个应用界面时视频区域会显示为黑屏因此要另外获取视频当前的播放帧再通过Canvas绘制Bitmap将视频截图“粘贴”到界面截图相应区域从而实现截取整个界面包括视频的效果 import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Rect; import android.media.MediaMetadataRetriever;// 调用此函数进行完整截屏参数本地视频路径 private void taskScreenshot(String videoPath) {try {Bitmap screenPic takeScreenBitmap(); // 屏幕截图Bitmap videoPic getCurrentVideoBitmap(this.myVideoView); // 视频截图if (screenPic ! null) {Bitmap wholePic screenPic; // 完整截图默认取屏幕截图if (videoPic ! null) // 如果获取到了视频截图完整截图由屏幕截图“粘贴”视频截图得到wholePic mergeBitmap(screenPic, scaleBitmap(videoPic, 2), 0, 2); // 获取截图保存路径String picPath Environment.getExternalStorageDirectory().getPath() /screenshot/testPic.png;File picFile new File(picPath);if (picFile.exists())picFile.delete(); FileOutputStream fileOutputStream new FileOutputStream();// 保存截图wholePic.compress(Bitmap.CompressFormat.PNG, 80, fileOutputStream);fileOutputStream.flush();fileOutputStream.close();} } catch (Exception e) {} }// 截屏不包含视频 private Bitmap takeScreenBitmap() {int width getWindow().getDecorView().getRootView().getWidth();int height getWindow().getDecorView().getRootView().getHeight();View view getWindow().getDecorView().getRootView();view.setDrawingCacheEnabled(false);view.buildDrawingCache();Bitmap bitmap Bitmap.createBitmap(view.getDrawingCache(), 0, 0, width, height);view.destroyDrawingCache();return bitmap; }// 截取视频关键帧 public static Bitmap getCurrentVideoBitmap(MyVideoView paramMyVideoView) {Bitmap bitmap null;MediaMetadataRetriever mediaMetadataRetriever new MediaMetadataRetriever();String videoPath paramMyVideoView.getCurrentVideoUrl();try {if (Build.VERSION.SDK_INT 24) {Uri uri Uri.parse(videoPath);mediaMetadataRetriever.setDataSource(this, uri);} else {FileInputStream fileInputStream new FileInputStream();File file new File();this(videoPath);this(file.getAbsolutePath());mediaMetadataRetriever.setDataSource(fileInputStream.getFD());} bitmap mediaMetadataRetriever.getFrameAtTime((paramMyVideoView.getCurrentPosition() * 1000), MediaMetadataRetriever.OPTION_CLOSEST);}catch (Exception e) { }finally {try {mediaMetadataRetriever.release();} catch (RuntimeException runtimeException1) {stringBuilder new StringBuilder();stringBuilder.append(getCurrentVideoBitmap-RuntimeException2:);stringBuilder.append(runtimeException1.getMessage());StoreData.appendLogFile(####FullscreenActivity , stringBuilder.toString());}return (bitmap null) ? null : Bitmap.createBitmap(bitmap);} }// bitmap变换截取的视频截图尺寸和页面容器可能不一致需拉伸为容器尺寸 private Bitmap scaleBitmap(Bitmap paramBitmap, float cWidth, float cHeight) {if (paramBitmap null)return null; int vWidth paramBitmap.getWidth();int vHeight paramBitmap.getHeight();Matrix matrix new Matrix();matrix.postScale(cWidth / vWidth, cHeight / vHeight);Bitmap bitmap Bitmap.createBitmap(paramBitmap, 0, 0, vWidth, vHeight, matrix, false);if (!paramBitmap.isRecycled()) paramBitmap.recycle(); return bitmap; }// bitmap变换将视频截图“粘贴”到屏幕截图的对应区域 private Bitmap mergeBitmap(Bitmap paramBitmap1, Bitmap paramBitmap2, int[] size1, int[] size2) {int width1 size1[0], height1 size1[1];int width2 size2[0], height2 size2[1];// 创建与屏幕截图大小一样的画布然后分别将屏幕截图、视频截图绘制到画布对应位置Bitmap bitmap Bitmap.createBitmap(width1, height1, Bitmap.Config.RGB_565);Canvas canvas new Canvas(bitmap);canvas.drawBitmap(paramBitmap1, new Rect(0, 0, width1, height1), new Rect(0, 0, width1, height1), null);canvas.drawBitmap(paramBitmap2, new Rect(0, 0, width2, height2), new Rect(0, 0, width2, height2), null);return bitmap; } 参考文档 [1] Android播放网络视频截图 [2] setDataSource RuntimeException 0xFFFFFFEA [3] Android Bitmap相关操作 [4] Android使用Canvas绘制Bitmap相关 [5] CardView-卡片布局
http://www.hkea.cn/news/14414184/

相关文章:

  • 抖音分享小程序怎么赚钱合肥网络优化公司有几家
  • 营销型网站模板免费下载WordPress站内跳转设置
  • aspit网站源码带手机版14个seo小技巧
  • 做网站的课题背景介绍做塑胶材料的网站
  • 石家庄常规网站建设私人定做东莞凤岗
  • WordPress手机站插件wordpress 购物 插件
  • 制作一个网站大概要多少钱网站上线倒计时页面
  • 龙岗建设网站长沙it公司排名
  • 设立网站网站更换域名多少钱
  • 手机网站 建设安徽网新科技有限公司网站开发
  • 制作网站编程国家市场监督局官网入口
  • 营销型网站设计价格外贸跨境电商网站建设开发
  • 怎样为企业设计网站用备案的网站做违法网站
  • 网站优化公司收费flash网站教程
  • 网站充值平台怎么做的公司注册地址是营业执照上的地址吗
  • 网站建设及制作教程无锡网络营销推广软件
  • 空调维修网站建设西安高端模板建站
  • 手机网站 设置建设小学瓯江小区网站
  • 海南网站制做的公司自己做app
  • 网站开发模板系统怎么修改网站网页的背景图片
  • ps做ppt模板怎么下载网站网站怎么登陆后台
  • 宝安网站制作需要多少钱想做游戏推广怎么找游戏公司
  • 泉州建设公司网站建站开发软件
  • 酒吧网站模板哈尔滨互联网公司
  • 申请网站空间就是申请域名app网站开发费用
  • 建立一平台个网站需要多少钱阿里巴巴网站域名注册
  • 山东中恒建设集团网站西乡专业网站建设
  • 佛山做网站需要多少钱iis7搭建asp网站
  • 兴宁网站设计网站开发公司创业
  • 怎么建设自己网站首页ip做网站需要过白名单吗