【实例简介】软件打开时,会加载本地的视频,所以可能会慢点,加载完毕后就可以 编辑视频了

【实例截图】

【核心代码】

package net.video.trimmer.view;

import net.video.trimmer.R;

import net.video.trimmer.model.VideoPlayerState;

import net.video.trimmer.service.VideoTrimmingService;

import net.video.trimmer.util.FileUtils;

import net.video.trimmer.util.TimeUtils;

import android.app.Activity;

import android.app.AlertDialog;

import android.app.Dialog;

import android.app.ProgressDialog;

import android.content.DialogInterface;

import android.content.Intent;

import android.content.res.Configuration;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.os.Messenger;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.MediaController;

import android.widget.TextView;

import android.widget.VideoView;

public class ViewVideo extends Activity {

protected final int LOADING_DIALOG = 1;

protected final int MESSAGE_DIALOG = 2;

protected final int VALIDATION_DIALOG = 3;

private VideoView videoView;

private TextView detailView;

private VideoPlayerState videoPlayerState = new VideoPlayerState();

protected Handler completionHander = new Handler() {

@Override

public void handleMessage(Message msg) {

Log.e("VideoView", "VideoView Recieved message");

videoPlayerState.setMessageText(msg.getData().getString("text"));

removeDialog(LOADING_DIALOG);

showDialog(MESSAGE_DIALOG);

stopService(videoTrimmingServiceIntent());

}

};

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Log.e("VideoView", "VideoView In on create");

setContentView(R.layout.video_player);

Object lastState = getLastNonConfigurationInstance();

if (lastState != null) {

videoPlayerState = (VideoPlayerState) lastState;

} else {

Bundle extras = getIntent().getExtras();

videoPlayerState.setFilename(extras.getString("videofilename"));

}

videoView = (VideoView) findViewById(R.id.VideoView);

videoView.setVideoPath(videoPlayerState.getFilename());

MediaController mediaController = new MediaController(this);

videoView.setMediaController(mediaController);

videoView.requestFocus();

videoView.start();

Button startButton = (Button) findViewById(R.id.Start);

startButton.setOnClickListener(startClickListener());

Button stopButton = (Button) findViewById(R.id.Stop);

stopButton.setOnClickListener(stopClickListener());

Button resetButton = (Button) findViewById(R.id.Reset);

resetButton.setOnClickListener(resetClickListener());

Button trimButton = (Button) findViewById(R.id.Trim);

trimButton.setOnClickListener(trimClickListener());

detailView = (TextView) findViewById(R.id.Details);

refreshDetailView();

}

@Override

public Object onRetainNonConfigurationInstance() {

Log.e("VideoView", "VideoView In on retain");

return videoPlayerState;

}

@Override

protected void onResume() {

super.onResume();

Log.e("VideoView", "VideoView In on resume");

videoView.seekTo(videoPlayerState.getCurrentTime());

}

@Override

protected void onPause() {

super.onPause();

Log.e("VideoView", "VideoView In on pause");

videoPlayerState.setCurrentTime(videoView.getCurrentPosition());

}

private OnClickListener trimClickListener() {

return new OnClickListener() {

@Override

public void onClick(View arg0) {

videoView.pause();

if(!videoPlayerState.isValid()) {

showDialog(VALIDATION_DIALOG);

return;

}

Intent intent = videoTrimmingServiceIntent();

String inputFileName = videoPlayerState.getFilename();

intent.putExtra("inputFileName", inputFileName);

intent.putExtra("outputFileName", FileUtils.getTargetFileName(inputFileName));

intent.putExtra("start", videoPlayerState.getStart()/1000);

intent.putExtra("duration", videoPlayerState.getDuration()/1000);

intent.putExtra("messenger", new Messenger(completionHander));

startService(intent);

showDialog(LOADING_DIALOG);

}

};

}

private Intent videoTrimmingServiceIntent() {

return new Intent(ViewVideo.this, VideoTrimmingService.class);

}

private OnClickListener resetClickListener() {

return new OnClickListener() {

@Override

public void onClick(View arg0) {

videoPlayerState.reset();

refreshDetailView();

}

};

}

private OnClickListener stopClickListener() {

return new OnClickListener() {

@Override

public void onClick(View arg0) {

int stop = videoView.getCurrentPosition();

videoPlayerState.setStop(stop);

refreshDetailView();

}

};

}

private OnClickListener startClickListener() {

return new OnClickListener() {

@Override

public void onClick(View arg0) {

videoPlayerState

.setStart(videoView.getCurrentPosition());

refreshDetailView();

}

};

}

@Override

protected void onPrepareDialog(int id, Dialog dialog) {

Log.e("VideoView", "VideoView In on prepare dialog");

switch (id) {

case MESSAGE_DIALOG:

((AlertDialog) dialog).setMessage(videoPlayerState.getMessageText());

break;

}

}

@Override

protected Dialog onCreateDialog(int id) {

Log.e("VideoView", "VideoView In on create dialog");

Dialog dialog;

switch (id) {

case VALIDATION_DIALOG:

dialog = simpleAlertDialog("Invalid video timings selected for trimming. Please make sure your start time is less than the stop time.");

break;

case LOADING_DIALOG:

dialog = ProgressDialog.show(ViewVideo.this, "", "Trimming...",true, true);

break;

case MESSAGE_DIALOG:

dialog = simpleAlertDialog("");

break;

default:

dialog = null;

}

return dialog;

}

private Dialog simpleAlertDialog(String message) {

Dialog dialog;

AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setMessage(message).setCancelable(true)

.setPositiveButton("Ok",

new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int id) {

ViewVideo.this.removeDialog(MESSAGE_DIALOG);

ViewVideo.this.removeDialog(LOADING_DIALOG);

}

});

dialog = builder.create();

return dialog;

}

private void refreshDetailView() {

String start = TimeUtils.toFormattedTime(videoPlayerState.getStart());

String stop = TimeUtils.toFormattedTime(videoPlayerState.getStop());

detailView.setText("Start at " start "\nEnd at " stop);

}

}

android编辑视频,android 视频剪辑(亲测可用)相关推荐

  1. Android FFmpeg移植总攻略——获取视频帧数(亲测可用)

    第一次尝试使用Android 移植FFmpeg算法,一路坎坷,最终做如下总结,适用于Android手机.Android开发板.亲测可用. 一.下载组件 在Android Studio中下载所需组件:C ...

  2. Android 手势返回上一界面 亲测可用

    在现如今,Android使用越来越便捷,也对Android开发提出更高要求,便捷体现在开发的每一处. 这里介绍Android使用手势返回上一界面.亲测可用! 一.思考: 1. 监听可手势返回上一界面的 ...

  3. android获取详细地址,Android获取当前子网掩码地址(亲测可用)

    Android 获取当前子网掩码地址(亲测可用),现在网上好多都是通过 DhcpInfo 来获取,但是通过这种方法有 Bug,很多人用 DhcpInfo 的方式都是获取不到,都是为 0.0.0.0. ...

  4. 使用H5Stream实现rtsp视频流播放,在Vue项目中 (无插件、可多视频源播放、亲测可用)

    本文主要介绍用H5Stream 在Web页面播放摄像头的RTSP视频流,从0到1的过程.包括WebSocket代理.h5ss.bat文件 运行一会就自己卡死了.H5ss服务死掉自动定时重启的脚本 等可 ...

  5. OpenCV 标定摄像头(Python 版本代码,视频中标定,亲测可用)

    在机器视觉领域,摄像头的标定指通过技术手段拿到相机的内参.外参及畸变参数. 相机内参长这样,利用针孔模型,将 3d 物体透视投影到 2d 的相机屏幕上. P = [ f x 0 c x 0 f y c ...

  6. 打电话android代码,android 拨打电话例子源码(亲测可用)

    [实例简介] [实例截图] [核心代码] package androidCall.pack; import java.util.regex.Matcher; import java.util.rege ...

  7. Java服务器、android连接小票打印机打印(亲测可用)

    优声云打印机JAVA SDK 使用教程 安装 下载下来放到项目中的某一位置 优声云打印对接准备工作 注册一个开发者帐号 注册地址(https://console.ushengyun.com) 获取开发 ...

  8. 教给大家怎么跟好友一起看视频?亲测可用

    教给大家怎么跟好友一起看视频?亲测可用. 薯片APP 哈喽,大家好.最近很多朋友在后台留言咨询薯片小姐姐怎么跟好友一起看视频,相信大家在日常生活中都会遇到这样的问题,想找可用邀请好友一起同步观看视频的 ...

  9. Android音乐播放器悬浮窗功能,亲测可用

    最近公司要开发一项语音播报新闻的功能.要求是: 1.语音播报时有一个悬浮窗,能滑动,退出当前页面后能继续播放: 2.松手后滑向靠近的边: 于是我临时学了Window,WindowManager,onT ...

  10. Android屏蔽HOME键亲测可用

    转载请标明原文地址谢谢: 之前遇到过需要屏蔽HOME键的场景,百度搜了很多根本不好使,Framework层又不能动.后来找到了,亲测可用,今天抽空贴出来: 下面不废话,直接上代码 @Overridep ...

最新文章

  1. MySQL基础之select基本查询
  2. 编译原理上机实习c语言小子集编译程序的实现报告,编译原理上机实习指导书(2015-11修改).pdf...
  3. java 2维数据便利_计算机等级考试二级java数组辅导
  4. Webstorm中提示Can't use Subversion command line
  5. PS命令总结-实战经验
  6. sed 分隔符打印_字符截取:cut,格式化输出:printf,字符截取:awk,文件或命令输出编辑:sed...
  7. 寻找最小的k个数(四种方法)
  8. 驱动精灵w8ndows xp sp2,惠普打印机驱动官方正式版下载,适用于winxp,win2003,winvista,win7,win8,win10,win2008,win2012-驱动精灵...
  9. 摄像头防水性能测试软件,手机摄像头防水测试/气密性检测方法分享
  10. ROS-Navigation之map_server笔记及程序解析
  11. 最强的优化器:把RAdam和LookAhead协同组合
  12. lange耦合器设计步骤_耦合器设计--基本理论.ppt
  13. 【专利】如何画专利流程图(逻辑图)
  14. CNN应用之性别、年龄识别
  15. excel的隔行插入
  16. lazada各国家站点讲解
  17. RAM、ROM、FLASH的存储原理及区别
  18. 利用Python+opencv进行视频文件的读取和保存,打开笔记本摄像头拍照保存、图像在窗口显示等操作
  19. 亲爱的老狼-定位position的应用
  20. IDEA的Project与Structure依赖jar包的方式

热门文章

  1. THUSC2021游记
  2. 大二下学习资料的整理
  3. D3 二维图表的绘制系列(十七)树图
  4. 第2章 藏书阁签到,修为突破
  5. Rstudio图片保存方式
  6. 如何解决“数据错误,循环冗余检查”
  7. 金山wps支持java接口开发吗_金山wps开放平台使用踩坑实录
  8. intel android 平板,IT百科之英特尔芯平板
  9. 印刷纸张都有哪些类型?
  10. 火狐下载文件名乱码问题