diff --git a/README-ZH.md b/README-ZH.md
index 1731cb9d5..c8c42ad0d 100644
--- a/README-ZH.md
+++ b/README-ZH.md
@@ -1,7 +1,7 @@
#节操视频播放器
[![Platform](https://img.shields.io/badge/platform-android-green.svg)](http://developer.android.com/index.html)
-[![Maven Central](https://img.shields.io/badge/Maven%20Central-2.0_final-green.svg)](http://search.maven.org/#artifactdetails%7Cfm.jiecao%7Cjiecaovideoplayer%7C2.0_final%7Caar)
+[![Maven Central](https://img.shields.io/badge/Maven%20Central-3.0_preview-green.svg)](http://search.maven.org/#artifactdetails%7Cfm.jiecao%7Cjiecaovideoplayer%7C3.0_preview%7Caar)
[![Licenses](https://img.shields.io/badge/license-MIT-green.svg)](http://choosealicense.com/licenses/mit/)
[![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-jiecaovideoplayer-green.svg?style=true)](https://android-arsenal.com/details/1/3269)
[![GitHub stars](https://img.shields.io/github/stars/lipangit/jiecaovideoplayer.svg?style=social&label=Star)]()
@@ -14,54 +14,50 @@
3. `ListView`的拖拽和`ViewPager`的滑动时如果划出屏幕会自动重置视频
4. 视频大小的屏幕适配,宽或长至少有两个对边是充满屏幕的,另外两个方向居中
5. 可以在加载、暂停、播放等各种状态中正常进入全屏和退出全屏
-6. 根据自己应用的颜色风格换肤
+6. 可以完全自定义UI
7. 播放MP3时显示缩略图片
8. 占用空间非常小,不到50k
##效果
-**[jiecaovideoplayer-2.0_final-demo.apk](https://raw.githubusercontent.com/lipangit/jiecaovideoplayer/develop/downloads/jiecaovideoplayer-2.0_final-demo.apk)**
+**[jiecaovideoplayer-3.0_preview-demo.apk](https://raw.githubusercontent.com/lipangit/jiecaovideoplayer/develop/downloads/jiecaovideoplayer-3.0_preview-demo.apk)**
![Demo Screenshot][1]
视频演示 : http://v.youku.com/v_show/id_XMTQ2NzUwOTcyNA==.html?firsttime=0&from=y1.4-2
##使用
-1.添加类库
+1.添加类库,稳定版是 fm.jiecao:jiecaovideoplayer:2.0_final
```gradle
-compile 'fm.jiecao:jiecaovideoplayer:2.0_final'
+compile 'fm.jiecao:jiecaovideoplayer:3.0_preview'
```
或直接下载
-* [jiecaovideoplayer-2.0_final.aar](https://raw.githubusercontent.com/lipangit/jiecaovideoplayer/develop/downloads/jiecaovideoplayer-2.0_final.aar)
-* [jiecaovideoplayer-2.0_final-javadoc.jar](https://raw.githubusercontent.com/lipangit/jiecaovideoplayer/develop/downloads/jiecaovideoplayer-2.0_final-javadoc.jar)
-* [jiecaovideoplayer-2.0_final-sources.jar](https://raw.githubusercontent.com/lipangit/jiecaovideoplayer/develop/downloads/jiecaovideoplayer-2.0_final-sources.jar)
+* [jiecaovideoplayer-3.0_preview.aar](https://raw.githubusercontent.com/lipangit/jiecaovideoplayer/develop/downloads/jiecaovideoplayer-3.0_preview.aar)
+* [jiecaovideoplayer-3.0_preview-javadoc.jar](https://raw.githubusercontent.com/lipangit/jiecaovideoplayer/develop/downloads/jiecaovideoplayer-3.0_preview-javadoc.jar)
+* [jiecaovideoplayer-3.0_preview-sources.jar](https://raw.githubusercontent.com/lipangit/jiecaovideoplayer/develop/downloads/jiecaovideoplayer-3.0_preview-sources.jar)
2.添加布局
```xml
-
全屏的activity
*fullscreen activity
@@ -17,11 +19,12 @@ */ public class JCFullScreenActivity extends Activity { - static void toActivityFromNormal(Context context, int state, String url, String title) { - STATE = state; + static void toActivityFromNormal(Context context, int state, String url, Class videoPlayClass, Object... obj) { + CURRENT_STATE = state; + DIRECT_FULLSCREEN = false; URL = url; - TITLE = title; - start = false; + VIDEO_PLAYER_CLASS = videoPlayClass; + OBJECTS = obj; Intent intent = new Intent(context, JCFullScreenActivity.class); context.startActivity(intent); } @@ -30,15 +33,17 @@ static void toActivityFromNormal(Context context, int state, String url, String *直接进入全屏播放
*Full screen play video derictly
* - * @param context context - * @param url video url - * @param title video title + * @param context context + * @param url video url + * @param videoPlayClass your videoplayer extends JCAbstraceVideoPlayer + * @param obj custom param */ - public static void toActivity(Context context, String url, String title) { - STATE = JCVideoPlayer.CURRENT_STATE_NORMAL; + public static void toActivity(Context context, String url, Class videoPlayClass, Object... obj) { + CURRENT_STATE = JCVideoPlayer.CURRENT_STATE_NORMAL; URL = url; - TITLE = title; - start = true; + DIRECT_FULLSCREEN = true; + VIDEO_PLAYER_CLASS = videoPlayClass; + OBJECTS = obj; Intent intent = new Intent(context, JCFullScreenActivity.class); context.startActivity(intent); } @@ -47,11 +52,11 @@ public static void toActivity(Context context, String url, String title) { /** * 刚启动全屏时的播放状态 */ - public static int STATE = -1; + static int CURRENT_STATE = -1; public static String URL; - public static String TITLE; - public static boolean manualQuit = false; - static boolean start = false; + static boolean DIRECT_FULLSCREEN = false;//this is should be in videoplayer + static Class VIDEO_PLAYER_CLASS; + static Object[] OBJECTS; @Override protected void onCreate(Bundle savedInstanceState) { @@ -61,37 +66,42 @@ protected void onCreate(Bundle savedInstanceState) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); View decor = this.getWindow().getDecorView(); decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); - setContentView(R.layout.activity_fullscreen); + setContentView(R.layout.jc_activity_fullscreen);//or here setJcVideoPlayer derictly + + try { + Constructor节操视频播放器,库的外面所有使用的接口也在这里
- *Jiecao video player,all outside the library interface is here
- * - * @see JiecaoVideoplayer Github + * Manage MediaPlayer * Created by Nathen - * On 2015/11/30 11:59 + * On 2016/04/10 15:45 */ -public class JCVideoPlayer extends FrameLayout implements View.OnClickListener, SeekBar.OnSeekBarChangeListener, SurfaceHolder.Callback, View.OnTouchListener, JCMediaManager.JCMediaPlayerListener { - - public ImageView ivStart; - ProgressBar pbLoading, pbBottom; - ImageView ivFullScreen; - SeekBar skProgress; - TextView tvTimeCurrent, tvTimeTotal; - ResizeSurfaceView surfaceView; - SurfaceHolder surfaceHolder; - TextView tvTitle; - ImageView ivBack; - public ImageView ivThumb; - RelativeLayout rlParent; - LinearLayout llTitleContainer, llBottomControl; - ImageView ivCover; - - private String url; - private String title; - private boolean ifFullScreen = false; - private boolean ifShowTitle = false; - private boolean ifMp3 = false; - - private int enlargRecId = 0; - private int shrinkRecId = 0; - - private int surfaceId; +public abstract class JCVideoPlayer extends FrameLayout implements View.OnClickListener, View.OnTouchListener, SeekBar.OnSeekBarChangeListener, SurfaceHolder.Callback, JCMediaManager.JCMediaPlayerListener { + public static final String TAG = "JCAbstractVideoPlayer"; public int CURRENT_STATE = -1;//-1相当于null public static final int CURRENT_STATE_PREPAREING = 0; public static final int CURRENT_STATE_PAUSE = 1; @@ -63,514 +33,166 @@ public class JCVideoPlayer extends FrameLayout implements View.OnClickListener, public static final int CURRENT_STATE_OVER = 3; public static final int CURRENT_STATE_NORMAL = 4; public static final int CURRENT_STATE_ERROR = 5; + private boolean touchingProgressBar = false; + protected boolean IF_CURRENT_IS_FULLSCREEN = false; + protected boolean IF_FULLSCREEN_IS_DIRECTLY = false;//IF_CURRENT_IS_FULLSCREEN should be true first + private static boolean IF_FULLSCREEN_FROM_NORMAL = false; + public static boolean IF_RELEASE_WHEN_ON_PAUSE = true; - private OnTouchListener mSeekbarOnTouchListener; - private static Timer mDismissControlViewTimer; - private static Timer mUpdateProgressTimer; - private static long clickfullscreentime; - private static final int FULL_SCREEN_NORMAL_DELAY = 5000; + ImageView ivStart; + SeekBar skProgress; + ImageView ivFullScreen; + TextView tvTimeCurrent, tvTimeTotal; + ViewGroup rlSurfaceContainer; - private boolean touchingProgressBar = false; - public static boolean isClickFullscreen = false;//一会调试一下,看是不是需要这个 - public boolean isFullscreenFromNormal = false; + ViewGroup llTopContainer, llBottomControl; + + JCResizeSurfaceView surfaceView; + SurfaceHolder surfaceHolder; + int surfaceId;// for onClick() + + String url; + Object[] obj; - private static ImageView.ScaleType speScalType = null; + private static Timer mUpdateProgressTimer; - private static JCBuriedPoint JC_BURIED_POINT; + public JCVideoPlayer(Context context) { + super(context); + init(context); + } public JCVideoPlayer(Context context, AttributeSet attrs) { super(context, attrs); init(context); } - private void init(Context context) { - View.inflate(context, R.layout.video_control_view, this); + protected void init(Context context) { + View.inflate(context, getLayoutId(), this); ivStart = (ImageView) findViewById(R.id.start); - pbLoading = (ProgressBar) findViewById(R.id.loading); - pbBottom = (ProgressBar) findViewById(R.id.bottom_progressbar); ivFullScreen = (ImageView) findViewById(R.id.fullscreen); skProgress = (SeekBar) findViewById(R.id.progress); tvTimeCurrent = (TextView) findViewById(R.id.current); tvTimeTotal = (TextView) findViewById(R.id.total); - llBottomControl = (LinearLayout) findViewById(R.id.bottom_control); - tvTitle = (TextView) findViewById(R.id.title); - ivBack = (ImageView) findViewById(R.id.back); - ivThumb = (ImageView) findViewById(R.id.thumb); - rlParent = (RelativeLayout) findViewById(R.id.parentview); - llTitleContainer = (LinearLayout) findViewById(R.id.title_container); - ivCover = (ImageView) findViewById(R.id.cover); + llBottomControl = (ViewGroup) findViewById(R.id.layout_bottom); + rlSurfaceContainer = (RelativeLayout) findViewById(R.id.surface_container); + llTopContainer = (ViewGroup) findViewById(R.id.layout_top); ivStart.setOnClickListener(this); - ivThumb.setOnClickListener(this); ivFullScreen.setOnClickListener(this); skProgress.setOnSeekBarChangeListener(this); llBottomControl.setOnClickListener(this); - rlParent.setOnClickListener(this); - ivBack.setOnClickListener(this); + rlSurfaceContainer.setOnClickListener(this); skProgress.setOnTouchListener(this); - if (speScalType != null) { - ivThumb.setScaleType(speScalType); - } } - /** - *配置要播放的内容
- *Configuring the Content to Play
- * - * @param url 视频地址 | Video address - * @param title 标题 | title - */ - public void setUp(String url, String title) { - setUp(url, title, true); - } + public abstract int getLayoutId(); - /** - *配置要播放的内容
- *Configuring the Content to Play
- * - * @param url 视频地址 | Video address - * @param title 标题 | title - * @param ifShowTitle 是否在非全屏下显示标题 | The title is displayed in full-screen under - */ - public void setUp(String url, String title, boolean ifShowTitle) { - this.ifShowTitle = ifShowTitle; - if ((System.currentTimeMillis() - clickfullscreentime) < FULL_SCREEN_NORMAL_DELAY) return; - this.url = url; - this.title = title; - this.ifFullScreen = false; + public void setUp(String url, Object... obj) { CURRENT_STATE = CURRENT_STATE_NORMAL; - if (ifFullScreen) { - ivFullScreen.setImageResource(enlargRecId == 0 ? R.drawable.shrink_video : enlargRecId); - } else { - ivFullScreen.setImageResource(shrinkRecId == 0 ? R.drawable.enlarge_video : shrinkRecId); - ivBack.setVisibility(View.GONE); - } - if (!TextUtils.isEmpty(url) && url.contains(".mp3")) { - ifMp3 = true; - ivFullScreen.setVisibility(View.GONE); - } - tvTitle.setText(title); - - changeUiToNormal(); - - if (JCMediaManager.intance().listener == this) { - JCMediaManager.intance().mediaPlayer.stop(); - } - - } - - /** - *只在全全屏中调用的方法
- *Only in fullscreen can call this
- * - * @param url 视频地址 | Video address - * @param title 标题 | title - */ - public void setUpForFullscreen(String url, String title) { this.url = url; - this.title = title; - ifShowTitle = true; - ifFullScreen = true; - CURRENT_STATE = CURRENT_STATE_NORMAL; - if (ifFullScreen) { - ivFullScreen.setImageResource(shrinkRecId == 0 ? R.drawable.shrink_video : shrinkRecId); - } else { - ivFullScreen.setImageResource(enlargRecId == 0 ? R.drawable.enlarge_video : enlargRecId); - } - tvTitle.setText(title); - if (!TextUtils.isEmpty(url) && url.contains(".mp3")) { - ifMp3 = true; - } - changeUiToNormal(); - } + resetProgressAndTime(); + this.obj = obj; + setStateAndUi(CURRENT_STATE_NORMAL); + } + +// public void setUpForFullscreen() { +// if (IF_FULLSCREEN_IS_DIRECTLY) { +// ivStart.performClick(); +// } else { +// JCMediaManager.intance().listener = this; +// jcVideoPlayer.setUpUI();//can not set ui +// } +// +// } - /** - *只在全全屏中调用的方法
- *Only in fullscreen can call this
- * - * @param state int state - */ - public void setState(int state) { - this.CURRENT_STATE = state; - //全屏或取消全屏时继续原来的状态 - if (CURRENT_STATE == CURRENT_STATE_PREPAREING) { - changeUiToShowUiPrepareing(); - setProgressAndTime(0, 0, 0); - setProgressBuffered(0); - } else if (CURRENT_STATE == CURRENT_STATE_PLAYING) { - changeUiToShowUiPlaying(); - } else if (CURRENT_STATE == CURRENT_STATE_PAUSE) { - changeUiToShowUiPause(); - } else if (CURRENT_STATE == CURRENT_STATE_NORMAL) { - changeUiToNormal(); - cancelDismissControlViewTimer(); - cancelProgressTimer(); - } else if (CURRENT_STATE == CURRENT_STATE_ERROR) { - JCMediaManager.intance().mediaPlayer.release(); - changeUiToError(); + //set ui + protected void setStateAndUi(int state) { + CURRENT_STATE = state; + switch (CURRENT_STATE) { + case CURRENT_STATE_NORMAL: + cancelProgressTimer(); + if (rlSurfaceContainer.getChildCount() > 0) { + rlSurfaceContainer.removeAllViews(); + } + if (JCMediaManager.intance().listener == this) { + JCMediaManager.intance().mediaPlayer.stop(); + } + break; + case CURRENT_STATE_PREPAREING: + + break; + case CURRENT_STATE_PLAYING: + break; + case CURRENT_STATE_PAUSE: + break; } } - /** - * 目前认为详细的判断和重复的设置是有相当必要的,也可以包装成方法 - */ @Override public void onClick(View v) { int i = v.getId(); - if (i == R.id.start || i == R.id.thumb) { + if (i == R.id.start) { if (TextUtils.isEmpty(url)) { - Toast.makeText(getContext(), "视频地址为空", Toast.LENGTH_SHORT).show(); + Toast.makeText(getContext(), "No url", Toast.LENGTH_SHORT).show(); return; } - if (i == R.id.thumb) { - if (CURRENT_STATE != CURRENT_STATE_NORMAL) { - onClickUiToggle(); - return; - } - } if (CURRENT_STATE == CURRENT_STATE_NORMAL || CURRENT_STATE == CURRENT_STATE_ERROR) { - touchingProgressBar = false;//This should not be here , but this can improve accident bug . - - addSurfaceView(); - if (JCMediaManager.intance().listener != null) { JCMediaManager.intance().listener.onCompletion(); } JCMediaManager.intance().listener = this; - - JCMediaManager.intance().clearWidthAndHeight(); - CURRENT_STATE = CURRENT_STATE_PREPAREING; - changeUiToShowUiPrepareing(); - llBottomControl.setVisibility(View.INVISIBLE); - llTitleContainer.setVisibility(View.INVISIBLE); - setProgressAndTime(0, 0, 0); - setProgressBuffered(0); + addSurfaceView(); JCMediaManager.intance().prepareToPlay(getContext(), url); - Log.i("JCVideoPlayer", "play video"); - - surfaceView.requestLayout(); - setKeepScreenOn(true); - - if (JC_BURIED_POINT != null && JCMediaManager.intance().listener == this) { - if (i == R.id.start) { - JC_BURIED_POINT.POINT_START_ICON(title, url); - } else { - JC_BURIED_POINT.POINT_START_THUMB(title, url); - } - } + setStateAndUi(CURRENT_STATE_PREPAREING); } else if (CURRENT_STATE == CURRENT_STATE_PLAYING) { - CURRENT_STATE = CURRENT_STATE_PAUSE; - - changeUiToShowUiPause(); - JCMediaManager.intance().mediaPlayer.pause(); - Log.i("JCVideoPlayer", "pause video"); - - setKeepScreenOn(false); - cancelDismissControlViewTimer(); - - if (JC_BURIED_POINT != null && JCMediaManager.intance().listener == this) { - if (ifFullScreen) { - JC_BURIED_POINT.POINT_STOP_FULLSCREEN(title, url); - } else { - JC_BURIED_POINT.POINT_STOP(title, url); - } - } + setStateAndUi(CURRENT_STATE_PAUSE); } else if (CURRENT_STATE == CURRENT_STATE_PAUSE) { - CURRENT_STATE = CURRENT_STATE_PLAYING; - - changeUiToShowUiPlaying(); JCMediaManager.intance().mediaPlayer.start(); - Log.i("JCVideoPlayer", "go on video"); - - setKeepScreenOn(true); - startDismissControlViewTimer(); - - if (JC_BURIED_POINT != null && JCMediaManager.intance().listener == this) { - if (ifFullScreen) { - JC_BURIED_POINT.POINT_RESUME_FULLSCREEN(title, url); - } else { - JC_BURIED_POINT.POINT_RESUME(title, url); - } - } + setStateAndUi(CURRENT_STATE_PLAYING); } - } else if (i == R.id.fullscreen) { - if (ifFullScreen) { - isClickFullscreen = false; - quitFullScreen(); + if (IF_CURRENT_IS_FULLSCREEN) { + //quit fullscreen } else { - JCMediaManager.intance().mediaPlayer.pause(); + //to fullscreen JCMediaManager.intance().mediaPlayer.setDisplay(null); JCMediaManager.intance().lastListener = this; JCMediaManager.intance().listener = null; - isClickFullscreen = true; - JCFullScreenActivity.toActivityFromNormal(getContext(), CURRENT_STATE, url, title); - - if (JC_BURIED_POINT != null && JCMediaManager.intance().listener == this) { - JC_BURIED_POINT.POINT_ENTER_FULLSCREEN(title, url); - } + IF_FULLSCREEN_FROM_NORMAL = true; + IF_RELEASE_WHEN_ON_PAUSE = false; + JCFullScreenActivity.toActivityFromNormal(getContext(), CURRENT_STATE, url, JCVideoPlayer.this.getClass(), this.obj); } - clickfullscreentime = System.currentTimeMillis(); - } else if (i == surfaceId || i == R.id.parentview) { - if (CURRENT_STATE == CURRENT_STATE_ERROR) { - ivStart.performClick(); - } else { - onClickUiToggle(); - startDismissControlViewTimer(); - - if (JC_BURIED_POINT != null && JCMediaManager.intance().listener == this) { - if (ifFullScreen) { - JC_BURIED_POINT.POINT_CLICK_BLANK_FULLSCREEN(title, url); - } else { - JC_BURIED_POINT.POINT_CLICK_BLANK(title, url); - } - } - } - } else if (i == R.id.bottom_control) { - //JCMediaPlayer.intance().mediaPlayer.setDisplay(surfaceHolder); - } else if (i == R.id.back) { - quitFullScreen(); } } - void addSurfaceView() { - if (rlParent.getChildAt(0) instanceof ResizeSurfaceView) { - rlParent.removeViewAt(0); + public void addSurfaceView() { + if (rlSurfaceContainer.getChildCount() > 0) { + rlSurfaceContainer.removeAllViews(); } - surfaceView = new ResizeSurfaceView(getContext()); + surfaceView = new JCResizeSurfaceView(getContext()); surfaceId = surfaceView.getId(); surfaceHolder = surfaceView.getHolder(); surfaceHolder.addCallback(this); - surfaceView.setOnClickListener(this); +// surfaceView.setOnClickListener(this); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT); - rlParent.addView(surfaceView, 0, layoutParams); - } - - private void startDismissControlViewTimer() { - cancelDismissControlViewTimer(); - mDismissControlViewTimer = new Timer(); - mDismissControlViewTimer.schedule(new TimerTask() { - @Override - public void run() { - if (getContext() != null && getContext() instanceof Activity) { - ((Activity) getContext()).runOnUiThread(new Runnable() { - @Override - public void run() { - if (CURRENT_STATE != CURRENT_STATE_NORMAL) { - llBottomControl.setVisibility(View.INVISIBLE); - pbBottom.setVisibility(View.VISIBLE); - setTitleVisibility(View.INVISIBLE); - ivStart.setVisibility(View.INVISIBLE); - } - } - }); - } - } - }, 2500); - } - - private void cancelDismissControlViewTimer() { - if (mDismissControlViewTimer != null) { - mDismissControlViewTimer.cancel(); - } - } - - private void onClickUiToggle() { - if (CURRENT_STATE == CURRENT_STATE_PREPAREING) { - if (llBottomControl.getVisibility() == View.VISIBLE) { - changeUiToClearUiPrepareing(); - } else { - changeUiToShowUiPrepareing(); - } - } else if (CURRENT_STATE == CURRENT_STATE_PLAYING) { - if (llBottomControl.getVisibility() == View.VISIBLE) { - changeUiToClearUiPlaying(); - } else { - changeUiToShowUiPlaying(); - } - } else if (CURRENT_STATE == CURRENT_STATE_PAUSE) { - if (llBottomControl.getVisibility() == View.VISIBLE) { - changeUiToClearUiPause(); - } else { - changeUiToShowUiPause(); - } - } - } - - //Unified management Ui - private void changeUiToNormal() { - setTitleVisibility(View.VISIBLE); - llBottomControl.setVisibility(View.INVISIBLE); - ivStart.setVisibility(View.VISIBLE); - pbLoading.setVisibility(View.INVISIBLE); - setThumbVisibility(View.VISIBLE); - ivCover.setVisibility(View.VISIBLE); - pbBottom.setVisibility(View.INVISIBLE); - updateStartImage(); - } - - private void changeUiToShowUiPrepareing() { - setTitleVisibility(View.VISIBLE); - llBottomControl.setVisibility(View.VISIBLE); - ivStart.setVisibility(View.INVISIBLE); - pbLoading.setVisibility(View.VISIBLE); - setThumbVisibility(View.INVISIBLE); - ivCover.setVisibility(View.VISIBLE); - pbBottom.setVisibility(View.INVISIBLE); - } - - private void changeUiToClearUiPrepareing() { -// changeUiToClearUi(); - setTitleVisibility(View.INVISIBLE); - llBottomControl.setVisibility(View.INVISIBLE); - ivStart.setVisibility(View.INVISIBLE); - setThumbVisibility(View.INVISIBLE); - pbBottom.setVisibility(View.INVISIBLE); -// pbLoading.setVisibility(View.VISIBLE); - ivCover.setVisibility(View.VISIBLE); - } - - private void changeUiToShowUiPlaying() { - setTitleVisibility(View.VISIBLE); - llBottomControl.setVisibility(View.VISIBLE); - ivStart.setVisibility(View.VISIBLE); - pbLoading.setVisibility(View.INVISIBLE); - setThumbVisibility(View.INVISIBLE); - ivCover.setVisibility(View.INVISIBLE); - pbBottom.setVisibility(View.INVISIBLE); - updateStartImage(); - } - - private void changeUiToClearUiPlaying() { - changeUiToClearUi(); - pbBottom.setVisibility(View.VISIBLE); - } - - private void changeUiToShowUiPause() { - setTitleVisibility(View.VISIBLE); - llBottomControl.setVisibility(View.VISIBLE); - ivStart.setVisibility(View.VISIBLE); - pbLoading.setVisibility(View.INVISIBLE); - setThumbVisibility(View.INVISIBLE); - ivCover.setVisibility(View.INVISIBLE); - pbBottom.setVisibility(View.INVISIBLE); - updateStartImage(); - } - - private void changeUiToClearUiPause() { - changeUiToClearUi(); - pbBottom.setVisibility(View.VISIBLE); - } - - private void changeUiToClearUi() { - setTitleVisibility(View.INVISIBLE); - llBottomControl.setVisibility(View.INVISIBLE); - ivStart.setVisibility(View.INVISIBLE); - pbLoading.setVisibility(View.INVISIBLE); - setThumbVisibility(View.INVISIBLE); - ivCover.setVisibility(View.INVISIBLE); - pbBottom.setVisibility(View.INVISIBLE); - } - - private void changeUiToError() { - setTitleVisibility(View.INVISIBLE); - llBottomControl.setVisibility(View.INVISIBLE); - ivStart.setVisibility(View.VISIBLE); - pbLoading.setVisibility(View.INVISIBLE); - setThumbVisibility(View.INVISIBLE); - ivCover.setVisibility(View.VISIBLE); - pbBottom.setVisibility(View.INVISIBLE); - updateStartImage(); - } - - private void startProgressTimer() { - cancelProgressTimer(); - mUpdateProgressTimer = new Timer(); - mUpdateProgressTimer.schedule(new TimerTask() { - @Override - public void run() { - if (getContext() != null && getContext() instanceof Activity) { - ((Activity) getContext()).runOnUiThread(new Runnable() { - @Override - public void run() { - if (CURRENT_STATE == CURRENT_STATE_PLAYING) { - setProgressAndTimeFromTimer(); - } - } - }); - } - } - }, 0, 300); - } - - private void cancelProgressTimer() { - if (mUpdateProgressTimer != null) { - mUpdateProgressTimer.cancel(); - } - } - - //if show title in top level logic - private void setTitleVisibility(int visable) { - if (ifShowTitle) { - llTitleContainer.setVisibility(visable); - } else { - if (ifFullScreen) { - llTitleContainer.setVisibility(visable); - } else { - llTitleContainer.setVisibility(View.INVISIBLE); - } - } - } - - //if show thumb in top level logic - private void setThumbVisibility(int visable) { - if (ifMp3) { - ivThumb.setVisibility(View.VISIBLE); - } else { - ivThumb.setVisibility(visable); - } - } - - private void updateStartImage() { - if (CURRENT_STATE == CURRENT_STATE_PLAYING) { - ivStart.setImageResource(R.drawable.click_video_pause_selector); - } else if (CURRENT_STATE == CURRENT_STATE_ERROR) { - ivStart.setImageResource(R.drawable.click_video_error_selector); - } else { - ivStart.setImageResource(R.drawable.click_video_play_selector); - } - } - - private void setProgressBuffered(int secProgress) { - if (secProgress >= 0) { - skProgress.setSecondaryProgress(secProgress); - pbBottom.setSecondaryProgress(secProgress); - } - } - - private void setProgressAndTimeFromTimer() { - int position = JCMediaManager.intance().mediaPlayer.getCurrentPosition(); - int duration = JCMediaManager.intance().mediaPlayer.getDuration(); - // if duration == 0 (e.g. in HLS streams) avoids ArithmeticException - int progress = position * 100 / (duration == 0 ? 1 : duration); - setProgressAndTime(progress, position, duration); + rlSurfaceContainer.addView(surfaceView, layoutParams); } - private void setProgressAndTime(int progress, int currentTime, int totalTime) { - if (!touchingProgressBar) { - skProgress.setProgress(progress); - pbBottom.setProgress(progress); + @Override + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + touchingProgressBar = true; + cancelProgressTimer(); + break; + case MotionEvent.ACTION_UP: + touchingProgressBar = false; + startProgressTimer(); + break; } - tvTimeCurrent.setText(Utils.stringForTime(currentTime)); - tvTimeTotal.setText(Utils.stringForTime(totalTime)); - } - - public void release() { - if ((System.currentTimeMillis() - clickfullscreentime) < FULL_SCREEN_NORMAL_DELAY) return; - setState(CURRENT_STATE_NORMAL); - //回收surfaceview + return false; } @Override @@ -578,8 +200,6 @@ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (fromUser) { int time = progress * JCMediaManager.intance().mediaPlayer.getDuration() / 100; JCMediaManager.intance().mediaPlayer.seekTo(time); - pbLoading.setVisibility(View.VISIBLE); - ivStart.setVisibility(View.INVISIBLE); } } @@ -593,244 +213,64 @@ public void onStopTrackingTouch(SeekBar seekBar) { } - //这两段根本就没过来,列表重置靠的setUp复用 -// @Override -// protected void onDetachedFromWindow() { -// super.onDetachedFromWindow(); -//// cancelDismissControlViewTimer(); -//// if (uuid.equals(JCMediaManager.intance().uuid)) { -//// if (JCMediaManager.intance().listener == this) { -// JCMediaManager.intance().mediaPlayer.stop(); -//// } -//// } -// } -// -// @Override -// protected void onAttachedToWindow() { -// super.onAttachedToWindow(); -// } - - public void quitFullScreen() { - JCFullScreenActivity.manualQuit = true; - clickfullscreentime = System.currentTimeMillis(); - JCMediaManager.intance().mediaPlayer.pause(); - JCMediaManager.intance().mediaPlayer.setDisplay(null); - //这个view释放了, - JCMediaManager.intance().lastState = CURRENT_STATE; - - if (JCMediaManager.intance().lastListener != null) { - JCMediaManager.intance().listener = JCMediaManager.intance().lastListener; - JCMediaManager.intance().listener.onBackFullscreen(); - } - - if (getContext() instanceof JCFullScreenActivity) { - ((JCFullScreenActivity) getContext()).finish(); - } - - if (JC_BURIED_POINT != null && JCMediaManager.intance().listener == this) { - JC_BURIED_POINT.POINT_QUIT_FULLSCREEN(title, url); - } - } - - private void stopToFullscreenOrQuitFullscreenShowDisplay() { - if (CURRENT_STATE == CURRENT_STATE_PAUSE) { - JCMediaManager.intance().mediaPlayer.start(); - CURRENT_STATE = CURRENT_STATE_PLAYING; - new Thread(new Runnable() { - @Override - public void run() { - ((Activity) getContext()).runOnUiThread(new Runnable() { - @Override - public void run() { - JCMediaManager.intance().mediaPlayer.pause(); - CURRENT_STATE = CURRENT_STATE_PAUSE; - } - }); - } - }).start(); - surfaceView.requestLayout(); - } else if (CURRENT_STATE == CURRENT_STATE_PLAYING) { - JCMediaManager.intance().mediaPlayer.start(); - } - } - @Override public void surfaceCreated(SurfaceHolder holder) { - //TODO MediaPlayer set holder,MediaPlayer prepareToPlay - if (ifFullScreen) { - JCMediaManager.intance().mediaPlayer.setDisplay(surfaceHolder); - stopToFullscreenOrQuitFullscreenShowDisplay(); - } - if (CURRENT_STATE != CURRENT_STATE_NORMAL) { - startDismissControlViewTimer(); - startProgressTimer(); - } - - if (JCMediaManager.intance().lastListener == this) { - JCMediaManager.intance().mediaPlayer.setDisplay(surfaceHolder); - stopToFullscreenOrQuitFullscreenShowDisplay(); - startDismissControlViewTimer(); - } +// if (!IF_FULLSCREEN_IS_DIRECTLY) {//fullscreen from normal + JCMediaManager.intance().mediaPlayer.setDisplay(surfaceHolder); + ifNeedCreateSurfaceView = false; +// } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { - } @Override public void surfaceDestroyed(SurfaceHolder holder) { - - } - - /** - *停止所有音频的播放
- *release all videos
- */ - public static void releaseAllVideos() { - if (!isClickFullscreen) { - JCMediaManager.intance().mediaPlayer.stop(); - if (JCMediaManager.intance().listener != null) { - JCMediaManager.intance().listener.onCompletion(); - } - if (mUpdateProgressTimer != null) { - mUpdateProgressTimer.cancel(); - } - } + ifNeedCreateSurfaceView = true; } - /** - *有特殊需要的客户端
- *Clients with special needs
- * - * @param onClickListener 开始按钮点击的回调函数 | Click the Start button callback function - */ - @Deprecated - public void setStartListener(OnClickListener onClickListener) { - if (onClickListener != null) { - ivStart.setOnClickListener(onClickListener); - ivThumb.setOnClickListener(onClickListener); - } else { - ivStart.setOnClickListener(this); - ivThumb.setOnClickListener(this); - } - } - - private void sendPointEvent(int type) { - } - - public void setSeekbarOnTouchListener(OnTouchListener listener) { - mSeekbarOnTouchListener = listener; - } - - @Override - public boolean onTouch(View v, MotionEvent event) { - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - touchingProgressBar = true; - cancelDismissControlViewTimer(); - cancelProgressTimer(); - break; - case MotionEvent.ACTION_UP: - touchingProgressBar = false; - startDismissControlViewTimer(); - startProgressTimer(); - - if (JC_BURIED_POINT != null && JCMediaManager.intance().listener == this) { - if (ifFullScreen) { - JC_BURIED_POINT.POINT_CLICK_SEEKBAR_FULLSCREEN(title, url); - } else { - JC_BURIED_POINT.POINT_CLICK_SEEKBAR(title, url); - } - } - break; - } - - if (mSeekbarOnTouchListener != null) { - mSeekbarOnTouchListener.onTouch(v, event); - } - return false; - } - - /** - *默认的缩略图的scaleType是fitCenter,这时候图片如果和屏幕尺寸不同的话左右或上下会有黑边,可以根据客户端需要改成fitXY或这其他模式
- *The default thumbnail scaleType is fitCenter, and this time the picture if different screen sizes up and down or left and right, then there will be black bars, or it may need to change fitXY other modes based on the client
- * - * @param thumbScaleType 缩略图的scalType | Thumbnail scaleType - */ - public static void setThumbImageViewScalType(ImageView.ScaleType thumbScaleType) { - speScalType = thumbScaleType; - } - - /** - * In demo is ok, but in other project This will class not access exception,How to solve the problem - * - * @param context Context - * @param url video url - * @param title video title - */ - @Deprecated - public static void toFullscreenActivity(Context context, String url, String title) { - JCFullScreenActivity.toActivity(context, url, title); - } + private boolean ifNeedCreateSurfaceView = false; @Override public void onPrepared() { - if (surfaceHolder.getSurface() == null || !surfaceHolder.getSurface().isValid()) return; if (CURRENT_STATE != CURRENT_STATE_PREPAREING) return; - JCMediaManager.intance().mediaPlayer.setDisplay(surfaceHolder); JCMediaManager.intance().mediaPlayer.start(); - CURRENT_STATE = CURRENT_STATE_PLAYING; - - changeUiToShowUiPlaying(); - ivStart.setVisibility(View.INVISIBLE); - - startDismissControlViewTimer(); startProgressTimer(); + setStateAndUi(CURRENT_STATE_PLAYING); } @Override public void onCompletion() { - CURRENT_STATE = CURRENT_STATE_NORMAL; + //make me normal first cancelProgressTimer(); - cancelDismissControlViewTimer(); - setKeepScreenOn(false); - changeUiToNormal(); + resetProgressAndTime(); + setStateAndUi(CURRENT_STATE_NORMAL); - if (JC_BURIED_POINT != null && JCMediaManager.intance().listener == this) { - if (ifFullScreen) { - JC_BURIED_POINT.POINT_AUTO_COMPLETE_FULLSCREEN(title, url); - } else { - JC_BURIED_POINT.POINT_AUTO_COMPLETE(title, url); - } - } + //if fullscreen finish activity what ever the activity is directly or click fullscreen + finishMyFullscreen(); - if (getContext() instanceof JCFullScreenActivity) { - ((JCFullScreenActivity) getContext()).finish(); - } - if (isFullscreenFromNormal) {//如果在进入全屏后播放完就初始化自己非全屏的控件 - isFullscreenFromNormal = false; + if (IF_FULLSCREEN_FROM_NORMAL) {//如果在进入全屏后播放完就初始化自己非全屏的控件 + IF_FULLSCREEN_FROM_NORMAL = false; JCMediaManager.intance().lastListener.onCompletion(); } } @Override public void onBufferingUpdate(int percent) { - if (CURRENT_STATE != CURRENT_STATE_NORMAL || CURRENT_STATE != CURRENT_STATE_PREPAREING) { - setProgressBuffered(percent); + if (CURRENT_STATE != CURRENT_STATE_NORMAL && CURRENT_STATE != CURRENT_STATE_PREPAREING) { + setTextAndProgress(percent); } } @Override public void onSeekComplete() { - pbLoading.setVisibility(View.INVISIBLE); + } @Override public void onError(int what, int extra) { - if (what != -38) { - setState(CURRENT_STATE_ERROR); - } + } @Override @@ -846,11 +286,104 @@ public void onVideoSizeChanged() { @Override public void onBackFullscreen() { CURRENT_STATE = JCMediaManager.intance().lastState; - addSurfaceView(); - setState(CURRENT_STATE); +// if (ifNeedCreateSurfaceView) { +// addSurfaceView(); +// Log.i(TAG, "onBackFullscreen: addview"); +// } + setStateAndUi(CURRENT_STATE); +// JCMediaManager.intance().mediaPlayer.setDisplay(surfaceHolder); + //set ui , but ui function is on child class } - public static void setJcBuriedPoint(JCBuriedPoint jcBuriedPoint) { - JC_BURIED_POINT = jcBuriedPoint; + protected void startProgressTimer() { + cancelProgressTimer(); + mUpdateProgressTimer = new Timer(); + mUpdateProgressTimer.schedule(new TimerTask() { + @Override + public void run() { + if (getContext() != null && getContext() instanceof Activity) { + ((Activity) getContext()).runOnUiThread(new Runnable() { + @Override + public void run() { + if (CURRENT_STATE == CURRENT_STATE_PLAYING) { + setTextAndProgress(0); + } + } + }); + } + } + }, 0, 300); + } + + protected void cancelProgressTimer() { + if (mUpdateProgressTimer != null) { + mUpdateProgressTimer.cancel(); + } + } + + protected void setTextAndProgress(int secProgress) { + int position = JCMediaManager.intance().mediaPlayer.getCurrentPosition(); + int duration = JCMediaManager.intance().mediaPlayer.getDuration(); + // if duration == 0 (e.g. in HLS streams) avoids ArithmeticException + int progress = position * 100 / (duration == 0 ? 1 : duration); + setProgressAndTime(progress, secProgress, position, duration); + } + + protected void setProgressAndTime(int progress, int secProgress, int currentTime, int totalTime) { + if (!touchingProgressBar) { + if (progress != 0) skProgress.setProgress(progress); + } + if (secProgress != 0) skProgress.setSecondaryProgress(secProgress); + tvTimeCurrent.setText(JCUtils.stringForTime(currentTime)); + tvTimeTotal.setText(JCUtils.stringForTime(totalTime)); + } + + protected void resetProgressAndTime() { + skProgress.setProgress(0); + skProgress.setSecondaryProgress(0); + tvTimeCurrent.setText(JCUtils.stringForTime(0)); + tvTimeTotal.setText(JCUtils.stringForTime(0)); + } + + // only dispose IF_FULLSCREEN_IS_DIRECTLY=false , + // bacause IF_FULLSCREEN_IS_DIRECTLY=true + // will stop directly and finish fullscreenActivity directly + protected void quitFullcreenGoToNormal() { + JCMediaManager.intance().mediaPlayer.setDisplay(null); +// if (IF_FULLSCREEN_IS_DIRECTLY) {// it is all over +// +// } else {// go back and go on play or pause + JCMediaManager.intance().listener = JCMediaManager.intance().lastListener; + JCMediaManager.intance().lastState = CURRENT_STATE;//save state + JCMediaManager.intance().listener.onBackFullscreen(); +// } + finishMyFullscreen(); + } + + protected void finishMyFullscreen() { + if (getContext() instanceof JCFullScreenActivity) { + ((JCFullScreenActivity) getContext()).finish(); + } + } + + public void backFullscreen() { + if (IF_FULLSCREEN_IS_DIRECTLY) { + JCMediaManager.intance().mediaPlayer.stop(); + finishMyFullscreen(); + } else { + IF_RELEASE_WHEN_ON_PAUSE = false; + quitFullcreenGoToNormal(); + } + } + + public static void releaseAllVideos() { + if (IF_RELEASE_WHEN_ON_PAUSE) { + JCMediaManager.intance().mediaPlayer.stop(); + if (JCMediaManager.intance().listener != null) { + JCMediaManager.intance().listener.onCompletion(); + } + } else { + IF_RELEASE_WHEN_ON_PAUSE = true; + } } } diff --git a/jcvideoplayer-lib/src/main/java/fm/jiecao/jcvideoplayer_lib/JCVideoPlayerSimple.java b/jcvideoplayer-lib/src/main/java/fm/jiecao/jcvideoplayer_lib/JCVideoPlayerSimple.java new file mode 100644 index 000000000..39a9dae3a --- /dev/null +++ b/jcvideoplayer-lib/src/main/java/fm/jiecao/jcvideoplayer_lib/JCVideoPlayerSimple.java @@ -0,0 +1,76 @@ +package fm.jiecao.jcvideoplayer_lib; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; + +/** + * Manage UI + * Created by Nathen + * On 2016/04/10 15:45 + */ +public class JCVideoPlayerSimple extends JCVideoPlayer { + + public JCVideoPlayerSimple(Context context) { + super(context); + } + + public JCVideoPlayerSimple(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected void init(Context context) { + super.init(context); + //init my video + + } + + @Override + public void onClick(View v) { + super.onClick(v); + } + + @Override + public int getLayoutId() { + return R.layout.jc_layout_base; + } + + @Override + public void setUp(String url, Object... objects) { + super.setUp(url, objects); + if (IF_CURRENT_IS_FULLSCREEN) { + ivFullScreen.setImageResource(R.drawable.jc_shrink); + } else { + ivFullScreen.setImageResource(R.drawable.jc_enlarge); + } + } + + @Override + public void setStateAndUi(int state) { + super.setStateAndUi(state); + switch (CURRENT_STATE) { + case CURRENT_STATE_NORMAL: + break; + case CURRENT_STATE_PREPAREING: + ivStart.setVisibility(View.INVISIBLE); + break; + case CURRENT_STATE_PLAYING: + ivStart.setVisibility(View.VISIBLE); + break; + case CURRENT_STATE_PAUSE: + break; + } + updateStartImage(); + } + + private void updateStartImage() { + if (CURRENT_STATE == CURRENT_STATE_PLAYING) { + ivStart.setImageResource(R.drawable.jc_click_pause_selector); + } else if (CURRENT_STATE == CURRENT_STATE_ERROR) { + ivStart.setImageResource(R.drawable.jc_click_error_selector); + } else { + ivStart.setImageResource(R.drawable.jc_click_play_selector); + } + } +} diff --git a/jcvideoplayer-lib/src/main/java/fm/jiecao/jcvideoplayer_lib/JCVideoPlayerStandard.java b/jcvideoplayer-lib/src/main/java/fm/jiecao/jcvideoplayer_lib/JCVideoPlayerStandard.java new file mode 100644 index 000000000..194aa2f30 --- /dev/null +++ b/jcvideoplayer-lib/src/main/java/fm/jiecao/jcvideoplayer_lib/JCVideoPlayerStandard.java @@ -0,0 +1,270 @@ +package fm.jiecao.jcvideoplayer_lib; + +import android.app.Activity; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.TextView; + +import java.util.Timer; +import java.util.TimerTask; + +/** + * Created by Nathen + * On 2016/04/18 16:15 + */ +public class JCVideoPlayerStandard extends JCVideoPlayer { + + ImageView ivBack; + ProgressBar pbBottom, pbLoading; + TextView tvTitle; + public ImageView ivThumb; + ImageView ivCover; + + private static Timer mDismissControlViewTimer; + + public JCVideoPlayerStandard(Context context) { + super(context); + } + + public JCVideoPlayerStandard(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected void init(Context context) { + super.init(context); + pbBottom = (ProgressBar) findViewById(R.id.bottom_progressbar); + tvTitle = (TextView) findViewById(R.id.title); + ivBack = (ImageView) findViewById(R.id.back); + ivThumb = (ImageView) findViewById(R.id.thumb); + ivCover = (ImageView) findViewById(R.id.cover); + pbLoading = (ProgressBar) findViewById(R.id.loading); + + ivThumb.setOnClickListener(this); + ivBack.setOnClickListener(this); + + } + + @Override + public void setUp(String url, Object... objects) { + super.setUp(url, objects); + tvTitle.setText(objects[0].toString()); + if (IF_CURRENT_IS_FULLSCREEN) { + ivFullScreen.setImageResource(R.drawable.jc_shrink); + } else { + ivFullScreen.setImageResource(R.drawable.jc_enlarge); + ivBack.setVisibility(View.GONE); + } + } + + @Override + public int getLayoutId() { + return R.layout.jc_layout_standard; + } + + @Override + public void setStateAndUi(int state) { + super.setStateAndUi(state); + switch (CURRENT_STATE) { + case CURRENT_STATE_NORMAL: + changeUiToNormal(); + cancelDismissControlViewTimer(); + break; + case CURRENT_STATE_PREPAREING: + changeUiToShowUiPrepareing(); + startDismissControlViewTimer(); + break; + case CURRENT_STATE_PLAYING: + changeUiToShowUiPlaying(); + startDismissControlViewTimer(); + break; + case CURRENT_STATE_PAUSE: + changeUiToShowUiPause(); + cancelDismissControlViewTimer(); + break; + } + } + + @Override + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + cancelDismissControlViewTimer(); + break; + case MotionEvent.ACTION_UP: + startDismissControlViewTimer(); + break; + } + return super.onTouch(v, event); + } + + @Override + public void onClick(View v) { + super.onClick(v); + int i = v.getId(); + if (i == R.id.thumb) { + if (CURRENT_STATE == CURRENT_STATE_NORMAL) { + ivStart.performClick(); + } + } else if (i == R.id.surface_container) { + onClickUiToggle(); + startDismissControlViewTimer(); + } else if (i == R.id.back) { + backFullscreen(); + } + } + + private void onClickUiToggle() { + if (CURRENT_STATE == CURRENT_STATE_PREPAREING) { + if (llBottomControl.getVisibility() == View.VISIBLE) { + changeUiToClearUiPrepareing(); + } else { + changeUiToShowUiPrepareing(); + } + } else if (CURRENT_STATE == CURRENT_STATE_PLAYING) { + if (llBottomControl.getVisibility() == View.VISIBLE) { + changeUiToClearUiPlaying(); + } else { + changeUiToShowUiPlaying(); + } + } else if (CURRENT_STATE == CURRENT_STATE_PAUSE) { + if (llBottomControl.getVisibility() == View.VISIBLE) { + changeUiToClearUiPause(); + } else { + changeUiToShowUiPause(); + } + } + } + + @Override + protected void setProgressAndTime(int progress, int secProgress, int currentTime, int totalTime) { + super.setProgressAndTime(progress, secProgress, currentTime, totalTime); + if (progress != 0) pbBottom.setProgress(progress); + if (secProgress != 0) pbBottom.setSecondaryProgress(secProgress); + } + + @Override + protected void resetProgressAndTime() { + super.resetProgressAndTime(); + pbBottom.setProgress(0); + pbBottom.setSecondaryProgress(0); + } + + //Unified management Ui + private void changeUiToNormal() { + llTopContainer.setVisibility(View.VISIBLE); + llBottomControl.setVisibility(View.INVISIBLE); + ivStart.setVisibility(View.VISIBLE); + pbLoading.setVisibility(View.INVISIBLE); + ivThumb.setVisibility(View.VISIBLE); + ivCover.setVisibility(View.VISIBLE); + pbBottom.setVisibility(View.INVISIBLE); + updateStartImage(); + } + + private void changeUiToShowUiPrepareing() { + llTopContainer.setVisibility(View.VISIBLE); + llBottomControl.setVisibility(View.VISIBLE); + ivStart.setVisibility(View.INVISIBLE); + pbLoading.setVisibility(View.VISIBLE); + ivThumb.setVisibility(View.INVISIBLE); + ivCover.setVisibility(View.VISIBLE); + pbBottom.setVisibility(View.INVISIBLE); + } + + private void changeUiToClearUiPrepareing() { +// changeUiToClearUi(); + llTopContainer.setVisibility(View.INVISIBLE); + llBottomControl.setVisibility(View.INVISIBLE); + ivStart.setVisibility(View.INVISIBLE); + ivThumb.setVisibility(View.INVISIBLE); + pbBottom.setVisibility(View.INVISIBLE); +// pbLoading.setVisibility(View.VISIBLE); + ivCover.setVisibility(View.VISIBLE); + } + + private void changeUiToShowUiPlaying() { + llTopContainer.setVisibility(View.VISIBLE); + llBottomControl.setVisibility(View.VISIBLE); + ivStart.setVisibility(View.VISIBLE); + pbLoading.setVisibility(View.INVISIBLE); + ivThumb.setVisibility(View.INVISIBLE); + ivCover.setVisibility(View.INVISIBLE); + pbBottom.setVisibility(View.INVISIBLE); + updateStartImage(); + } + + private void changeUiToClearUiPlaying() { + changeUiToClearUi(); + pbBottom.setVisibility(View.VISIBLE); + } + + private void changeUiToShowUiPause() { + llTopContainer.setVisibility(View.VISIBLE); + llBottomControl.setVisibility(View.VISIBLE); + ivStart.setVisibility(View.VISIBLE); + pbLoading.setVisibility(View.INVISIBLE); + ivThumb.setVisibility(View.INVISIBLE); + ivCover.setVisibility(View.INVISIBLE); + pbBottom.setVisibility(View.INVISIBLE); + updateStartImage(); + } + + private void changeUiToClearUiPause() { + changeUiToClearUi(); + pbBottom.setVisibility(View.VISIBLE); + } + + private void changeUiToClearUi() { + llTopContainer.setVisibility(View.INVISIBLE); + llBottomControl.setVisibility(View.INVISIBLE); + ivStart.setVisibility(View.INVISIBLE); + pbLoading.setVisibility(View.INVISIBLE); + ivThumb.setVisibility(View.INVISIBLE); + ivCover.setVisibility(View.INVISIBLE); + pbBottom.setVisibility(View.INVISIBLE); + } + + private void updateStartImage() { + if (CURRENT_STATE == CURRENT_STATE_PLAYING) { + ivStart.setImageResource(R.drawable.jc_click_pause_selector); + } else if (CURRENT_STATE == CURRENT_STATE_ERROR) { + ivStart.setImageResource(R.drawable.jc_click_error_selector); + } else { + ivStart.setImageResource(R.drawable.jc_click_play_selector); + } + } + + private void startDismissControlViewTimer() { + cancelDismissControlViewTimer(); + mDismissControlViewTimer = new Timer(); + mDismissControlViewTimer.schedule(new TimerTask() { + @Override + public void run() { + if (getContext() != null && getContext() instanceof Activity) { + ((Activity) getContext()).runOnUiThread(new Runnable() { + @Override + public void run() { + if (CURRENT_STATE != CURRENT_STATE_NORMAL) { + llBottomControl.setVisibility(View.INVISIBLE); + llTopContainer.setVisibility(View.INVISIBLE); + pbBottom.setVisibility(View.VISIBLE); + ivStart.setVisibility(View.INVISIBLE); + } + } + }); + } + } + }, 2500); + } + + private void cancelDismissControlViewTimer() { + if (mDismissControlViewTimer != null) { + mDismissControlViewTimer.cancel(); + } + } +} diff --git a/jcvideoplayer-lib/src/main/res/drawable-xhdpi/biz_video_expand.png b/jcvideoplayer-lib/src/main/res/drawable-xhdpi/biz_video_expand.png deleted file mode 100644 index 162269857..000000000 Binary files a/jcvideoplayer-lib/src/main/res/drawable-xhdpi/biz_video_expand.png and /dev/null differ diff --git a/jcvideoplayer-lib/src/main/res/drawable-xhdpi/ic_back_white.png b/jcvideoplayer-lib/src/main/res/drawable-xhdpi/jc_back.png similarity index 100% rename from jcvideoplayer-lib/src/main/res/drawable-xhdpi/ic_back_white.png rename to jcvideoplayer-lib/src/main/res/drawable-xhdpi/jc_back.png diff --git a/jcvideoplayer-lib/src/main/res/drawable-xhdpi/enlarge_video.png b/jcvideoplayer-lib/src/main/res/drawable-xhdpi/jc_enlarge.png similarity index 100% rename from jcvideoplayer-lib/src/main/res/drawable-xhdpi/enlarge_video.png rename to jcvideoplayer-lib/src/main/res/drawable-xhdpi/jc_enlarge.png diff --git a/jcvideoplayer-lib/src/main/res/drawable-xhdpi/new_play_error.png b/jcvideoplayer-lib/src/main/res/drawable-xhdpi/jc_error_normal.png similarity index 100% rename from jcvideoplayer-lib/src/main/res/drawable-xhdpi/new_play_error.png rename to jcvideoplayer-lib/src/main/res/drawable-xhdpi/jc_error_normal.png diff --git a/jcvideoplayer-lib/src/main/res/drawable-xhdpi/new_play_error_press.png b/jcvideoplayer-lib/src/main/res/drawable-xhdpi/jc_error_pressed.png similarity index 100% rename from jcvideoplayer-lib/src/main/res/drawable-xhdpi/new_play_error_press.png rename to jcvideoplayer-lib/src/main/res/drawable-xhdpi/jc_error_pressed.png diff --git a/jcvideoplayer-lib/src/main/res/drawable-xhdpi/video_loading_icon.png b/jcvideoplayer-lib/src/main/res/drawable-xhdpi/jc_loading_bg.png similarity index 100% rename from jcvideoplayer-lib/src/main/res/drawable-xhdpi/video_loading_icon.png rename to jcvideoplayer-lib/src/main/res/drawable-xhdpi/jc_loading_bg.png diff --git a/jcvideoplayer-lib/src/main/res/drawable-xhdpi/new_pause_video.png b/jcvideoplayer-lib/src/main/res/drawable-xhdpi/jc_pause_normal.png similarity index 100% rename from jcvideoplayer-lib/src/main/res/drawable-xhdpi/new_pause_video.png rename to jcvideoplayer-lib/src/main/res/drawable-xhdpi/jc_pause_normal.png diff --git a/jcvideoplayer-lib/src/main/res/drawable-xhdpi/new_pause_video_press.png b/jcvideoplayer-lib/src/main/res/drawable-xhdpi/jc_pause_pressed.png similarity index 100% rename from jcvideoplayer-lib/src/main/res/drawable-xhdpi/new_pause_video_press.png rename to jcvideoplayer-lib/src/main/res/drawable-xhdpi/jc_pause_pressed.png diff --git a/jcvideoplayer-lib/src/main/res/drawable-xhdpi/new_play_video.png b/jcvideoplayer-lib/src/main/res/drawable-xhdpi/jc_play_normal.png similarity index 100% rename from jcvideoplayer-lib/src/main/res/drawable-xhdpi/new_play_video.png rename to jcvideoplayer-lib/src/main/res/drawable-xhdpi/jc_play_normal.png diff --git a/jcvideoplayer-lib/src/main/res/drawable-xhdpi/new_play_video_press.png b/jcvideoplayer-lib/src/main/res/drawable-xhdpi/jc_play_pressed.png similarity index 100% rename from jcvideoplayer-lib/src/main/res/drawable-xhdpi/new_play_video_press.png rename to jcvideoplayer-lib/src/main/res/drawable-xhdpi/jc_play_pressed.png diff --git a/jcvideoplayer-lib/src/main/res/drawable-xhdpi/shrink_video.png b/jcvideoplayer-lib/src/main/res/drawable-xhdpi/jc_shrink.png similarity index 100% rename from jcvideoplayer-lib/src/main/res/drawable-xhdpi/shrink_video.png rename to jcvideoplayer-lib/src/main/res/drawable-xhdpi/jc_shrink.png diff --git a/jcvideoplayer-lib/src/main/res/drawable/click_video_error_selector.xml b/jcvideoplayer-lib/src/main/res/drawable/click_video_error_selector.xml deleted file mode 100644 index 3f88ce38a..000000000 --- a/jcvideoplayer-lib/src/main/res/drawable/click_video_error_selector.xml +++ /dev/null @@ -1,6 +0,0 @@ - -