package com.play.pro.player;
import java.io.File;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
import com.play.pro.R;
import com.play.pro.constants.FinalConstants;
import com.play.pro.utils.ProUtils;
import com.play.pro.utils.ScreenUtils;
import com.play.pro.utils.TimerUtils;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.media.MediaPlayer;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
/**
* 播放控制器
*/
public class PlayerControl implements OnClickListener,
SurfaceHolder.Callback, MediaManager.MediaListener, OnSeekBarChangeListener {
// ========= 外部回调 =========
/** 日志Tag */
private final String TAG = "PlayerControl";
/** 平常一些信息打印日志TAG */
private final String OP_TAG = "PlayerOperate";
/** 上下文 */
private Context mContext;
/** 当前页面 */
private Window window;
/** 外部Handler,改变View */
private Handler vHandler;
// ========= 其他变量 =========
// --
/** 上次离开时间 */
private long lastExitTime = -1l;
/** 上次触发完成回调时间 */
private long lastCompletionTime = -1l;
// --
/** 当前加载索引 */
private int cLoadPos = -1;
/** 是否经过 onPrepared*/
private boolean isPrepared = false;
/** 是否全屏播放 */
private boolean isFullScreen = false;
/** 是否默认设置SurfaceView背景 */
private boolean isLoadSurCover = true;
/** 是否切换全屏(临时状态) - 作用,用于判断是否pause MediaPlayer*/
private boolean isToggleFullScreen = false;
/** 是否暂停 */
private boolean isPause = false;
/** 是否结束销毁 */
private boolean isDestroy = false;
/** 是否本地视频 */
private boolean isLocalVideo = false;
/** 是否恢复播放 */
private boolean isReStart = false;
/** 是否滑动加载 */
private boolean isTouchLoadIng = false;
/** 是否时间改变进行通知 */
private boolean isTimeChangeNotify = false;
/** 封面图片 */
private Drawable drawable;
/** 加载定时器 */
private TimerUtils loadTimeUtils;
/** 播放时间定时器工具类 */
private TimerUtils playTimeUtils;
// --
/** 画面预览回调 */
private SurfaceHolder surfaceHolder;
// ========= View ===========
/** 最外层FrameLayout */
private FrameLayout ip_frame;
/** 封面背景 IgView*/
private ImageView ip_bg_igview;
// --
/** 播放载体SurfaceView */
private SurfaceView ip_surfaceview;
// --
/** 加载最外层Linear */
private LinearLayout ip_loading_linear;
/** 第一个加载点IgView */
private ImageView ip_one_igview;
/** 第二个加载点IgView */
private ImageView ip_two_igview;
/** 第三个加载点IgView */
private ImageView ip_three_igview;
// --
/** 底部功能Linear */
private LinearLayout ip_function_linear;
/** 播放、暂停IgView */
private ImageView ip_play_igview;
/** 当前播放时间Tv */
private TextView ip_ctime_tv;
/** 进度滑动SeekBar */
private SeekBar ip_seekbar;
/** 视频总时间Tv */
private TextView ip_ttime_tv;
/** 全屏IgView */
private ImageView ip_fullscreen_igview;
/**
* 初始化构造函数
* @param activity 当前Activity
* @param vHandler 点击触发修改
*/
public PlayerControl(Activity activity, Handler vHandler) {
this.mContext = activity;
this.window = activity.getWindow();
this.vHandler = vHandler;
// 初始化View、Values、Listeners
initViews();
initValues();
initListeners();
}
/** 初始化View */
private void initViews(){
// 初始化View
if(window != null){
// 初始化View
ip_frame = (FrameLayout) window.findViewById(R.id.ip_frame);
ip_surfaceview = (SurfaceView) window.findViewById(R.id.ip_surfaceview);
ip_bg_igview = (ImageView) window.findViewById(R.id.ip_bg_igview);
ip_loading_linear = (LinearLayout) window.findViewById(R.id.ip_loading_linear);
ip_one_igview = (ImageView) window.findViewById(R.id.ip_one_igview);
ip_two_igview = (ImageView) window.findViewById(R.id.ip_two_igview);
ip_three_igview = (ImageView) window.findViewById(R.id.ip_three_igview);
ip_function_linear = (LinearLayout) window.findViewById(R.id.ip_function_linear);
ip_play_igview = (ImageView) window.findViewById(R.id.ip_play_igview);
ip_ctime_tv = (TextView) window.findViewById(R.id.ip_ctime_tv);
ip_seekbar = (SeekBar) window.findViewById(R.id.ip_seekbar);
ip_ttime_tv = (TextView) window.findViewById(R.id.ip_ttime_tv);
ip_fullscreen_igview = (ImageView) window.findViewById(R.id.ip_fullscreen_igview);
}
}
/**
* 初始化操作
*/
private void initValues(){
// 默认标识非切换全屏
this.isToggleFullScreen = false;
}
/** 初始化事件 */
private void initListeners(){
// 设置点击事件
ip_frame.setOnClickListener(this);
ip_play_igview.setOnClickListener(this);
ip_seekbar.setOnSeekBarChangeListener(this);
// 设置全屏点击事件
ip_fullscreen_igview.setOnClickListener(this);
// 初始化MediaManager 回调事件类
MediaManager.getInstance().setMeidaListener(this);
}
/** 点击事件 */
@Override
public void onClick(View v) {
switch(v.getId()){
/** 点击最外层 */
case R.id.ip_frame:
// --
if(ip_loading_linear.getVisibility() == View.VISIBLE){
return; // 属于加载中则不显示
}
// --
// 判断是否显示底部功能(取反)
boolean isVisibie = !(ip_function_linear.getVisibility() == View.VISIBLE);
// 设置对应的状态,是否显示
ip_function_linear.setVisibility(isVisibie ? View.VISIBLE : View.GONE);
break;
/** 播放点击操作 */
case R.id.ip_play_igview:
// 如果播放中,则显示暂停
boolean isPlaying = MediaManager.getInstance().isPlaying();
// 进行取反设置
playerView(!isPlaying);
// 如果播放中则进行暂停
if(isPlaying){
// 暂停定时器
playTimer(false);
// 暂停视频
MediaManager.getInstance().pause();
// --
if(vHandler != null){
vHandler.sendEmptyMessage(FinalConstants.PLAY_PAUSE);
}
} else {
// 刷新定时器
//resetTime(MediaManager.getInstance().getMediaPlayer());
// 启动定时器
playTimer(true);
// 如果重新播放,则重置时间
MediaManager.getInstance().getMediaPlayer().start();
}
break;
/** 点击全屏 */
case R.id.ip_fullscreen_igview:
if(vHandler != null){
vHandler.sendEmptyMessage(FinalConstants.FULL_SCREEN);
}
break;
}
}
// --
/** 内部Handler */
private Handler iHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch(msg.what){
case FinalConstants.COUNT_DOWN: // 倒计时加载
// 如果加载View,没有进行显示了,则隐藏
if(ip_loading_linear.getVisibility() != View.VISIBLE){
loadTimer(false); // 关闭加载定时器
return;
}
cLoadPos++; // 递增加载索引
// 判断当前进度点
switch(cLoadPos){
case 0:
case 1:
case 2:
break;
default: // 其他情况
cLoadPos = 0;
break;
}
// ==== 设置图
没有合适的资源?快使用搜索试试~ 我知道了~
android视频剪裁demo
共73个文件
xml:33个
png:17个
java:11个
需积分: 50 8 下载量 17 浏览量
2017-03-09
13:51:50
上传
评论
收藏 163KB ZIP 举报
温馨提示
一个视频裁剪功能的demo(功能已经完善)、但是由于功能和自己需求不符合、修改之后地址为:http://download.csdn.net/detail/u012901683/9775328
资源推荐
资源详情
资源评论
收起资源包目录
PlaySeekbar_DEMO.zip (73个子文件)
PlaySeekbar
gradlew.bat 2KB
gradlew 5KB
gradle.properties 747B
app
proguard-rules.pro 692B
src
test
java
androidTest
java
main
res
mipmap-xxxhdpi
ic_launcher.png 10KB
drawable
seekbar_media_paly.xml 752B
ic_back_wy_selector.xml 517B
mipmap-hdpi
ic_launcher.png 3KB
values
strings.xml 114B
styles.xml 370B
color.xml 540B
mipmap-xxhdpi
ic_launcher.png 8KB
mipmap-mdpi
ic_launcher.png 2KB
mipmap-xhdpi
ic_seekbar_thumb.png 1KB
ic_launcher.png 5KB
ic_back_white.png 1KB
ic_back_yellow.png 1KB
ic_slider_left.png 1002B
ic_slider_right.png 1004B
ic_loading_point_white.png 1KB
ic_loading_point_grey.png 1KB
ic_media_fullscreen_stretch_white.png 277B
ic_media_fullscreen_shrink_white.png 283B
ic_logo.png 5KB
ic_media_play.png 1KB
ic_media_stop.png 895B
layout
activity_main.xml 629B
activity_full_screen.xml 692B
include_player.xml 5KB
java
com
play
pro
constants
FinalConstants.java 1KB
BaseApplication.java 3KB
FullScreenActivity.java 6KB
MainActivity.java 8KB
player
PlayerControl.java 36KB
MediaManager.java 7KB
utils
ProUtils.java 9KB
ScreenUtils.java 9KB
ToastUtils.java 1KB
TimerUtils.java 3KB
widgets
VideoSeekBar.java 23KB
AndroidManifest.xml 1KB
build.gradle 931B
libs
gradle
wrapper
gradle-wrapper.jar 52KB
gradle-wrapper.properties 233B
.idea
gradle.xml 730B
runConfigurations.xml 564B
misc.xml 2KB
copyright
profiles_settings.xml 76B
modules.xml 359B
compiler.xml 686B
workspace.xml 150KB
libraries
javawriter_2_1_1.xml 330B
jsr305_2_0_1.xml 330B
rules_0_5.xml 745B
javax_annotation_api_1_2.xml 358B
universal_image_loader_1_9_5.xml 623B
support_v4_23_0_0.xml 927B
runner_0_5.xml 751B
hamcrest_library_1_3.xml 342B
espresso_idling_resource_2_2_2.xml 706B
appcompat_v7_23_0_0.xml 785B
support_annotations_23_0_0.xml 543B
hamcrest_core_1_3.xml 526B
junit_4_12.xml 477B
hamcrest_integration_1_3.xml 354B
espresso_core_2_2_2.xml 651B
javax_inject_1.xml 324B
exposed_instrumentation_api_publish_0_5.xml 724B
.gitignore 127B
local.properties 460B
PlaySeekbar.iml 865B
settings.gradle 16B
build.gradle 521B
共 73 条
- 1
资源评论
TomorrowIsCrazy
- 粉丝: 3
- 资源: 22
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功