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 - + android:layout_height="200dp"/> ``` 3.设置视频地址、缩略图地址、标题 ```java -JCVideoPlayer jCVideoPlayer = (JCVideoPlayer) findViewById(R.id.videocontroller); -videoController.setUp("http://2449.vod.myqcloud.com/2449_43b6f696980311e59ed467f22794e792.f20.mp4","嫂子别摸我"); -videoController.ivThumb.setThumbInCustomProject("http://p.qpic.cn/videoyun/0/2449_43b6f696980311e59ed467f22794e792_1/640"); +JCVideoPlayerStandard jcVideoPlayerStandard = (JCVideoPlayerStandard) findViewById(R.id.custom_videoplayer_standard); +jcVideoPlayerStandard.setUp("http://2449.vod.myqcloud.com/2449_bfbbfa3cea8f11e5aac3db03cda99974.f20.mp4" + , "嫂子想我没"); +jcVideoPlayerStandard.ivThumb.setThumbInCustomProject("http://p.qpic.cn/videoyun/0/2449_43b6f696980311e59ed467f22794e792_1/640"); ``` 4.在包含播放器的`Fragment`或`Activity`的`onPause()`方法中调用`JCVideoPlayer.releaseAllVideos();` ####其他接口 -修改缩略图的scalType,默认的缩略图的scaleType是fitCenter,这时候图片如果和屏幕尺寸不同的话左右或上下会有黑边,可以根据客户端需要改成fitXY或者其他模式 -```java -JCVideoPlayer.setThumbImageViewScalType(ImageView.ScaleType.FIT_XY); -``` - 直接进入全屏,比如在webview中视频播放的适配很麻烦很无头绪,调用此接口直接全屏播放 ```java JCFullScreenActivity.toActivity(this, @@ -69,26 +65,19 @@ JCFullScreenActivity.toActivity(this, "嫂子别摸我"); ``` -不显示标题 -```java -jCVideoPlayer.setUp("http://2449.vod.myqcloud.com/2449_ded7b566b37911e5942f0b208e48548d.f20.mp4", - "嫂子还摸我", false); -``` - - 在ListView和ViewPager中将视频移除屏幕外,会在onDetachedFromWindow时重置视频。 - 目标是在库外只需要添加布局,添加配置,其他的问题都在库内判断和操作。 - 用代码控制播放按钮的点击,如果是普通状态会播放视频,如果是播放中会暂停视频 ```java -jCVideoPlayer.ivStart.performClick(); +jcVideoPlayerStandard.ivStart.performClick(); ``` -混淆 +####混淆 ``` 无需添加 ``` -####贡献者 +##[自定义UI](./README_CUSTOM_UI-ZH.md) + +##贡献者 节操精选Android小组([Nathen](https://github.com/lipangit) [Derlio](https://github.com/derlio)) [zhangzzqq](https://github.com/zhangzzqq) [carmelo-ruota](https://github.com/carmelo-ruota) @@ -102,4 +91,4 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -[1]: ./screenshots/j2.jpg +[1]: ./screenshots/j3.jpg diff --git a/README.md b/README.md index 6196d135d..e58f76490 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@ # Jiecao Video Player [![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)]() -This is the real android video player view with fullscreen function, we are dedicated to make it to be the most popular video play widget on android. Branch develop is the latest version, although it is not stable for now. +Android truly full-screen capabilities, the Android platform to become the most widely used video playback controls [中文文档](README-ZH.md) @@ -16,75 +16,70 @@ This is the real android video player view with fullscreen function, we are dedi 3. Video will be reset(pause) when it's scrolled out of the screen in `ListView` and `ViewPager` 4. Adaptive to the screen size, where at least the width or length of the video is adaptive while the other is centered on the screen 5. It will not disturb or change the playing state when entering or exiting fullscreen -6. Support to customize view controller’s skin +6. Completely custom ui 7. Support to display thumbnails when playing mp3 8. With limited storage, less than 50 kb ## Effect -**[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] Demo video : http://v.youku.com/v_show/id_XMTQ2NzUwOTcyNA==.html ## Usage -1.Import library +1.Import library,stable version is fm.jiecao:jiecaovideoplayer:2.0_final ```gradle -compile 'fm.jiecao:jiecaovideoplayer:2.0_final' +compile 'fm.jiecao:jiecaovideoplayer:3.0_preview' ``` Or download lib -* [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.Add JCVideoPlayer in your layout ```xml - + android:layout_height="200dp"/> ``` 3.Set the video uri, video thumb url and video title ```java -JCVideoPlayer jCVideoPlayer = (JCVideoPlayer) findViewById(R.id.videocontroller); -videoController.setUp("http://2449.vod.myqcloud.com/2449_43b6f696980311e59ed467f22794e792.f20.mp4","嫂子别摸我"); -videoController.ivThumb.setThumbInCustomProject("http://p.qpic.cn/videoyun/0/2449_43b6f696980311e59ed467f22794e792_1/640"); +JCVideoPlayerStandard jcVideoPlayerStandard = (JCVideoPlayerStandard) findViewById(R.id.custom_videoplayer_standard); +jcVideoPlayerStandard.setUp("http://2449.vod.myqcloud.com/2449_bfbbfa3cea8f11e5aac3db03cda99974.f20.mp4" + , "嫂子想我没"); +jcVideoPlayerStandard.ivThumb.setThumbInCustomProject("http://p.qpic.cn/videoyun/0/2449_43b6f696980311e59ed467f22794e792_1/640"); ``` 4.Remember to invoke `JCVideoPlayer.releaseAllVideos();` in `onPause()` of `Fragment` or `Activity` #### Other APIs -Modify the thumb image view's scaleType property, default value is fitCenter. There will be black padding if the size of thumb is not compatible with screen size, try to use fitXY or other scaleType. -```java -JCVideoPlayer.setThumbImageViewScalType(ImageView.ScaleType.FIT_XY); -``` - Invoke `JCFullScreenActivity.toActivity(...)` to enter fullscreen directly. ```java JCFullScreenActivity.toActivity(this, "http://2449.vod.myqcloud.com/2449_43b6f696980311e59ed467f22794e792.f20.mp4", "嫂子别摸我"); ``` -Show title after fullscreen + +Control play button,if state is normal it will play, if state is playing it will pause ```java -jCVideoPlayer.setUp("http://2449.vod.myqcloud.com/2449_ded7b566b37911e5942f0b208e48548d.f20.mp4", - "嫂子还摸我", false); +jcVideoPlayerStandard.ivStart.performClick(); ``` - If videoview move out from screen in ListView or ViewPager,there will onDetachedFromWindow() reset the videoplayer. - The goal is to add just outside the library layout, adding configuration, other problems in judgment and library operations. - ProGuard ``` Need nothing ``` -####Contributors +##[Custom UI](./README_CUSTOM_UI.md) + +##Contributors 节操精选Android小组([Nathen](https://github.com/lipangit) [Derlio](https://github.com/derlio)) [zhangzzqq](https://github.com/zhangzzqq) [carmelo-ruota](https://github.com/carmelo-ruota) @@ -98,5 +93,5 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -[1]: ./screenshots/j2.jpg +[1]: ./screenshots/j3.jpg diff --git a/README_CUSTOM_UI-ZH.md b/README_CUSTOM_UI-ZH.md new file mode 100644 index 000000000..f232c7118 --- /dev/null +++ b/README_CUSTOM_UI-ZH.md @@ -0,0 +1,28 @@ +#自定义UI + + 参照JCVideoPlayerSimple,JCVideoPlayerStandard,JCVideoPlayerStandardWithShareButton + +1. 继承JCVideoPlayer,JCVideoPlayer中包含所有关于播放的代码,不包含任何UI的代码 +2. getLayoutId();布局的id +3. Override init(Context context);这里初始化自定义控件 +4. Override setStateAndUi(int state);是重点,自定义各个状态的UI,如果在其他地方修改UI应该保持谨慎 +5. Override onTouch(),onClick();如果有需要 +6. 在自定义UI之后,应该依然按照[README.md](./README-ZH.md)中的4步骤来调用播放器 + +关于控件id的问题,在Base simple ui example中的所有最基础的id是写死在JCVideoPlayer中的,下面的控件id已经findViewById过了不需要再findViewById + +| 控件 | id | +| ------------- |:-------------:| +| 开始按钮 | start | +| 全屏按钮 | fullscreen | +| 进度条 | progress | +| 总共时间 | total | +| 下方layout | layout_bottom | +| 上方layout | layout_top | +| SurfaceView的容器 | surface_container | + +如果想快速的集成视频播放功能,建议参照JCVideoPlayerStandardWithShareButton来做,它继承JCVideoPlayerStandard,JCVideoPlayerStandard的目标是和今日头条的细节保持一致 + +如果想完全自定义UI,参照JCVideoPlayerStandard + +如果在JCVideoPlayer之外写任何关于控制视频的代码不是我们的初衷,请提issue \ No newline at end of file diff --git a/README_CUSTOM_UI.md b/README_CUSTOM_UI.md new file mode 100644 index 000000000..dfd6cecdd --- /dev/null +++ b/README_CUSTOM_UI.md @@ -0,0 +1,29 @@ +#Custom ui + + Referring JCVideoPlayerSimple, JCVideoPlayerStandard JCVideoPlayerStandardWith ShareButton + +1. Inheritance JCVideoPlayer, JCVideoPlayer contains all the code on the player and does not contain any UI code +2. getLayoutId (); id layout +3. Override init (Context context); custom initialized here +4. Override setStateAndUi (int state); the focus, customize each state UI, if you modify the UI in other places should remain cautious +5. Override onTouch (), onClick (); if necessary +6. After the custom UI, you should still follow [README.md](./README.md) 4 steps to invoke Player + +Control id on the problem, all in the most basic id Base simple ui example of death is written in JCVideoPlayer the following controls id has findViewById past do not need to findViewById + +| control | id | +| ------------- |:-------------:| +| start button | start | +| fullscreen button | fullscreen | +| progress | progress | +| current time | current | +| total time | total | +| bottom layout | layout_bottom | +| top layout | layout_top | +| SurfaceView container | surface_container | + +If you want to quickly integrate video playback, we recommend referring JCVideoPlayerStandardWithShareButton do, it inherits JCVideoPlayerStandard, JCVideoPlayerStandard goal is and details of today's headlines are consistent + +If you want to fully customize the UI, referring JCVideoPlayerStandard + +If you write any code on the control of the video outside JCVideoPlayer not our intention, please mention the issue \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 8b235f1cf..6136805f4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,8 +8,8 @@ android { applicationId "fm.jiecao.jiecaovideoplayer" minSdkVersion 16 targetSdkVersion 23 - versionCode 22 - versionName "2.0_final" + versionCode 23 + versionName "3.0_preview" } buildTypes { release { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c6747025..eec296172 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,8 +1,8 @@ + package="fm.jiecao.jiecaovideoplayer"> - + - + - + + android:screenOrientation="portrait"/> - - + android:screenOrientation="portrait"/> + android:screenOrientation="portrait"/> + diff --git a/app/src/main/java/fm/jiecao/jiecaovideoplayer/DemoApplication.java b/app/src/main/java/fm/jiecao/jiecaovideoplayer/DemoApplication.java index 32d72f8a6..a4afc6a74 100644 --- a/app/src/main/java/fm/jiecao/jiecaovideoplayer/DemoApplication.java +++ b/app/src/main/java/fm/jiecao/jiecaovideoplayer/DemoApplication.java @@ -24,8 +24,6 @@ public void onCreate() { super.onCreate(); initUniversalImageLoader(); - //这里将会改变所有缩略图的ScaleType | Here will change all thumbnails ScaleType -// JCVideoPlayer.setThumbImageViewScalType(ImageView.ScaleType.FIT_XY); } private void initUniversalImageLoader() { @@ -35,7 +33,7 @@ private void initUniversalImageLoader() { config.diskCacheFileNameGenerator(new Md5FileNameGenerator()); config.diskCacheSize(50 * 1024 * 1024); // 50 MiB config.tasksProcessingOrder(QueueProcessingType.LIFO); - config.writeDebugLogs(); // Remove for release app + config.writeDebugLogs(); // Remove for releaseAllVideos app config.defaultDisplayImageOptions(getDefaultDisplayImageOption()); // Initialize ImageLoader with configuration. ImageLoader.getInstance().init(config.build()); diff --git a/app/src/main/java/fm/jiecao/jiecaovideoplayer/LoadImageActivity.java b/app/src/main/java/fm/jiecao/jiecaovideoplayer/LoadImageActivity.java index 42f9b030c..bc5b68f0d 100644 --- a/app/src/main/java/fm/jiecao/jiecaovideoplayer/LoadImageActivity.java +++ b/app/src/main/java/fm/jiecao/jiecaovideoplayer/LoadImageActivity.java @@ -13,6 +13,7 @@ import com.squareup.picasso.Picasso; import fm.jiecao.jcvideoplayer_lib.JCVideoPlayer; +import fm.jiecao.jcvideoplayer_lib.JCVideoPlayerStandard; /** * Created by Nathen @@ -20,7 +21,7 @@ */ public class LoadImageActivity extends AppCompatActivity { - JCVideoPlayer videoController1, videoController2, videoController3, videoController4; + JCVideoPlayerStandard videoController1, videoController2, videoController3, videoController4; @Override protected void onCreate(Bundle savedInstanceState) { @@ -31,27 +32,27 @@ protected void onCreate(Bundle savedInstanceState) { getSupportActionBar().setDisplayShowTitleEnabled(true); getSupportActionBar().setDisplayUseLogoEnabled(false); - videoController1 = (JCVideoPlayer) findViewById(R.id.videocontroller1); + videoController1 = (JCVideoPlayerStandard) findViewById(R.id.videocontroller1); videoController1.setUp("http://2449.vod.myqcloud.com/2449_22ca37a6ea9011e5acaaf51d105342e3.f20.mp4", "嫂子张嘴"); ImageLoader.getInstance().displayImage("http://cos.myqcloud.com/1000264/qcloud_video_attachment/842646334/vod_cover/cover1458036374.jpg", videoController1.ivThumb); - videoController2 = (JCVideoPlayer) findViewById(R.id.videocontroller2); + videoController2 = (JCVideoPlayerStandard) findViewById(R.id.videocontroller2); videoController2.setUp("http://2449.vod.myqcloud.com/2449_22ca37a6ea9011e5acaaf51d105342e3.f20.mp4", "嫂子抬头"); Glide.with(this) .load("http://cos.myqcloud.com/1000264/qcloud_video_attachment/842646334/vod_cover/cover1458036374.jpg") .into(videoController2.ivThumb); - videoController3 = (JCVideoPlayer) findViewById(R.id.videocontroller3); + videoController3 = (JCVideoPlayerStandard) findViewById(R.id.videocontroller3); videoController3.setUp("http://2449.vod.myqcloud.com/2449_22ca37a6ea9011e5acaaf51d105342e3.f20.mp4", "嫂子不困"); Picasso.with(this) .load("http://cos.myqcloud.com/1000264/qcloud_video_attachment/842646334/vod_cover/cover1458036374.jpg") .into(videoController3.ivThumb); - videoController4 = (JCVideoPlayer) findViewById(R.id.videocontroller4); + videoController4 = (JCVideoPlayerStandard) findViewById(R.id.videocontroller4); videoController4.setUp("http://2449.vod.myqcloud.com/2449_22ca37a6ea9011e5acaaf51d105342e3.f20.mp4", "嫂子你个死猪"); // Picasso.with(this) diff --git a/app/src/main/java/fm/jiecao/jiecaovideoplayer/MainActivity.java b/app/src/main/java/fm/jiecao/jiecaovideoplayer/MainActivity.java index 95626cbac..e11b58b3a 100644 --- a/app/src/main/java/fm/jiecao/jiecaovideoplayer/MainActivity.java +++ b/app/src/main/java/fm/jiecao/jiecaovideoplayer/MainActivity.java @@ -3,166 +3,89 @@ import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; -import android.util.Log; import android.view.View; import android.widget.Button; -import android.widget.Toast; import com.nostra13.universalimageloader.core.ImageLoader; -import fm.jiecao.jcvideoplayer_lib.JCBuriedPoint; -import fm.jiecao.jcvideoplayer_lib.JCFullScreenActivity; import fm.jiecao.jcvideoplayer_lib.JCVideoPlayer; - - +import fm.jiecao.jcvideoplayer_lib.JCFullScreenActivity; +import fm.jiecao.jcvideoplayer_lib.JCVideoPlayerSimple; +import fm.jiecao.jcvideoplayer_lib.JCVideoPlayerStandard; +import fm.jiecao.jiecaovideoplayer.View.JCVideoPlayerStandardWithShareButton; + +/** + * Created by Nathen + * On 2016/04/15 11:25 + */ public class MainActivity extends AppCompatActivity implements View.OnClickListener { - JCVideoPlayer videoController1, videoController2, videoController3; - Button btnToList, btnToListViewpager, btnToFullscreen, btnToChangecolor, btnToLoadImage; + JCVideoPlayerSimple jcVideoPlayerSimple; + JCVideoPlayerStandard jcVideoPlayerStandard; + JCVideoPlayerStandardWithShareButton jcVideoPlayerStandardWithShareButton; + Button btnToFullscreen_simple, btnToFullscreen_standard, + btnToListActivity, btnToListViewPagerActivity, btnToImageLoadActivity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - videoController1 = (JCVideoPlayer) findViewById(R.id.videocontroller1); - videoController1.setUp("http://2449.vod.myqcloud.com/2449_22ca37a6ea9011e5acaaf51d105342e3.f20.mp4", - "嫂子别摸我"); - ImageLoader.getInstance().displayImage("http://cos.myqcloud.com/1000264/qcloud_video_attachment/842646334/vod_cover/cover1458036374.jpg", - videoController1.ivThumb); - - videoController2 = (JCVideoPlayer) findViewById(R.id.videocontroller2); - videoController2.setUp("http://2449.vod.myqcloud.com/2449_bfbbfa3cea8f11e5aac3db03cda99974.f20.mp4",// - "嫂子还摸我", false); + btnToFullscreen_simple = (Button) findViewById(R.id.to_fullscreen_simple); + btnToFullscreen_standard = (Button) findViewById(R.id.to_fullscreen_standard); + btnToListActivity = (Button) findViewById(R.id.to_list_activity); + btnToListViewPagerActivity = (Button) findViewById(R.id.to_list_viewpager_activity); + btnToImageLoadActivity = (Button) findViewById(R.id.to_loadimage_activity); + btnToFullscreen_simple.setOnClickListener(this); + btnToFullscreen_standard.setOnClickListener(this); + btnToListActivity.setOnClickListener(this); + btnToListViewPagerActivity.setOnClickListener(this); + btnToImageLoadActivity.setOnClickListener(this); + + jcVideoPlayerSimple = (JCVideoPlayerSimple) findViewById(R.id.custom_videoplayer); + jcVideoPlayerSimple.setUp("http://2449.vod.myqcloud.com/2449_22ca37a6ea9011e5acaaf51d105342e3.f20.mp4"); + + jcVideoPlayerStandard = (JCVideoPlayerStandard) findViewById(R.id.custom_videoplayer_standard); + jcVideoPlayerStandard.setUp("http://2449.vod.myqcloud.com/2449_bfbbfa3cea8f11e5aac3db03cda99974.f20.mp4" + , "嫂子想我没"); ImageLoader.getInstance().displayImage("http://p.qpic.cn/videoyun/0/2449_bfbbfa3cea8f11e5aac3db03cda99974_1/640", - videoController2.ivThumb); - - videoController3 = (JCVideoPlayer) findViewById(R.id.videocontroller3); - videoController3.setUp("http://121.40.64.47/resource/mp3/music_yangguang3.mp3", - "嫂子别闹"); - ImageLoader.getInstance().displayImage("http://p.qpic.cn/videoyun/0/2449_38e65894d9e211e5b0e0a3699ca1d490_1/640", - videoController3.ivThumb); - - btnToList = (Button) findViewById(R.id.to_list_activity); - btnToListViewpager = (Button) findViewById(R.id.to_list_viewpager_activity); - btnToFullscreen = (Button) findViewById(R.id.to_fullscreen); - btnToChangecolor = (Button) findViewById(R.id.to_changecolor_activity); - btnToLoadImage = (Button) findViewById(R.id.to_list_loadimage_activity); + jcVideoPlayerStandard.ivThumb); - btnToList.setOnClickListener(this); - btnToListViewpager.setOnClickListener(this); - btnToFullscreen.setOnClickListener(this); - btnToChangecolor.setOnClickListener(this); - btnToLoadImage.setOnClickListener(this); + jcVideoPlayerStandardWithShareButton = (JCVideoPlayerStandardWithShareButton) findViewById(R.id.custom_videoplayer_standard_with_share_button); + jcVideoPlayerStandardWithShareButton.setUp("http://gslb.miaopai.com/stream/ed5HCfnhovu3tyIQAiv60Q__.mp4" + , "嫂子闭眼睛"); + ImageLoader.getInstance().displayImage("http://img4.jiecaojingxuan.com/2016/3/14/2204a578-609b-440e-8af7-a0ee17ff3aee.jpg", + jcVideoPlayerStandardWithShareButton.ivThumb); - JCVideoPlayer.setJcBuriedPoint(jcBuriedPoint); } - @Override - protected void onPause() { - super.onPause(); - JCVideoPlayer.releaseAllVideos(); - } - - //init buried point listener whenever you want. in application is also ok - JCBuriedPoint jcBuriedPoint = new JCBuriedPoint() { - @Override - public void POINT_START_ICON(String title, String url) { - Log.i("Buried_Point", "POINT_START_ICON" + " title is : " + title + " url is : " + url); - } - - @Override - public void POINT_START_THUMB(String title, String url) { - Log.i("Buried_Point", "POINT_START_THUMB" + " title is : " + title + " url is : " + url); - } - - @Override - public void POINT_STOP(String title, String url) { - Log.i("Buried_Point", "POINT_STOP" + " title is : " + title + " url is : " + url); - } - - @Override - public void POINT_STOP_FULLSCREEN(String title, String url) { - Log.i("Buried_Point", "POINT_STOP_FULLSCREEN" + " title is : " + title + " url is : " + url); - } - - @Override - public void POINT_RESUME(String title, String url) { - Log.i("Buried_Point", "POINT_RESUME" + " title is : " + title + " url is : " + url); - } - - @Override - public void POINT_RESUME_FULLSCREEN(String title, String url) { - Log.i("Buried_Point", "POINT_RESUME_FULLSCREEN" + " title is : " + title + " url is : " + url); - } - - @Override - public void POINT_CLICK_BLANK(String title, String url) { - Log.i("Buried_Point", "POINT_CLICK_BLANK" + " title is : " + title + " url is : " + url); - } - - @Override - public void POINT_CLICK_BLANK_FULLSCREEN(String title, String url) { - Log.i("Buried_Point", "POINT_CLICK_BLANK_FULLSCREEN" + " title is : " + title + " url is : " + url); - } - - @Override - public void POINT_CLICK_SEEKBAR(String title, String url) { - Log.i("Buried_Point", "POINT_CLICK_SEEKBAR" + " title is : " + title + " url is : " + url); - } - - @Override - public void POINT_CLICK_SEEKBAR_FULLSCREEN(String title, String url) { - Log.i("Buried_Point", "POINT_CLICK_SEEKBAR_FULLSCREEN" + " title is : " + title + " url is : " + url); - } - - @Override - public void POINT_AUTO_COMPLETE(String title, String url) { - Log.i("Buried_Point", "POINT_AUTO_COMPLETE" + " title is : " + title + " url is : " + url); - } - - @Override - public void POINT_AUTO_COMPLETE_FULLSCREEN(String title, String url) { - Log.i("Buried_Point", "POINT_AUTO_COMPLETE_FULLSCREEN" + " title is : " + title + " url is : " + url); - } - - @Override - public void POINT_ENTER_FULLSCREEN(String title, String url) { - Log.i("Buried_Point", "POINT_ENTER_FULLSCREEN" + " title is : " + title + " url is : " + url); - } - - @Override - public void POINT_QUIT_FULLSCREEN(String title, String url) { - Log.i("Buried_Point", "POINT_QUIT_FULLSCREEN" + " title is : " + title + " url is : " + url); - } - }; - @Override public void onClick(View v) { switch (v.getId()) { + case R.id.to_fullscreen_simple: + JCFullScreenActivity.toActivity(this, + "http://2449.vod.myqcloud.com/2449_22ca37a6ea9011e5acaaf51d105342e3.f20.mp4", + JCVideoPlayerSimple.class, "嫂子真浪"); + break; + case R.id.to_fullscreen_standard: + JCFullScreenActivity.toActivity(this, + "http://2449.vod.myqcloud.com/2449_22ca37a6ea9011e5acaaf51d105342e3.f20.mp4", + JCVideoPlayerStandard.class, "嫂子真牛逼"); + break; case R.id.to_list_activity: startActivity(new Intent(MainActivity.this, ListActivity.class)); break; case R.id.to_list_viewpager_activity: startActivity(new Intent(MainActivity.this, ListViewpagerActivity.class)); break; - case R.id.to_fullscreen: - JCFullScreenActivity.toActivity(this, - "http://gslb.miaopai.com/stream/ed5HCfnhovu3tyIQAiv60Q__.mp4", - "嫂子躺下"); - -// JCVideoPlayer.toFullscreenActivity(this, -// "http://gslb.miaopai.com/stream/ed5HCfnhovu3tyIQAiv60Q__.mp4", -// "http://img4.jiecaojingxuan.com/2016/3/14/2204a578-609b-440e-8af7-a0ee17ff3aee.jpg", -// "嫂子躺下"); - break; - case R.id.to_changecolor_activity: - Toast.makeText(MainActivity.this, "coming soon", Toast.LENGTH_SHORT).show(); -// startActivity(new Intent(this, SetSkinActivity.class)); - break; - case R.id.to_list_loadimage_activity: + case R.id.to_loadimage_activity: startActivity(new Intent(MainActivity.this, LoadImageActivity.class)); break; } } + @Override + protected void onPause() { + super.onPause(); + JCVideoPlayer.releaseAllVideos(); + } } diff --git a/app/src/main/java/fm/jiecao/jiecaovideoplayer/SetSkinActivity.java b/app/src/main/java/fm/jiecao/jiecaovideoplayer/SetSkinActivity.java deleted file mode 100644 index f9c74adbd..000000000 --- a/app/src/main/java/fm/jiecao/jiecaovideoplayer/SetSkinActivity.java +++ /dev/null @@ -1,50 +0,0 @@ -package fm.jiecao.jiecaovideoplayer; - -import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.view.MenuItem; - -import com.nostra13.universalimageloader.core.ImageLoader; - -import fm.jiecao.jcvideoplayer_lib.JCVideoPlayer; - -/** - * Created by Nathen - * On 2016/02/23 10:05 - */ -public class SetSkinActivity extends AppCompatActivity { - JCVideoPlayer videoController; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_setskin); - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - getSupportActionBar().setDisplayShowHomeEnabled(true); - getSupportActionBar().setDisplayShowTitleEnabled(true); - getSupportActionBar().setDisplayUseLogoEnabled(false); - getSupportActionBar().setTitle("SetSkin"); - - videoController = (JCVideoPlayer) findViewById(R.id.videocontroller1); - videoController.setUp("http://2449.vod.myqcloud.com/2449_43b6f696980311e59ed467f22794e792.f20.mp4", - "嫂子矜持点"); - ImageLoader.getInstance().displayImage("http://p.qpic.cn/videoyun/0/2449_43b6f696980311e59ed467f22794e792_1/640", - videoController.ivThumb); - } - - @Override - protected void onPause() { - super.onPause(); - JCVideoPlayer.releaseAllVideos(); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case android.R.id.home: - finish(); - break; - } - return super.onOptionsItemSelected(item); - } -} diff --git a/app/src/main/java/fm/jiecao/jiecaovideoplayer/VideoListAdapter.java b/app/src/main/java/fm/jiecao/jiecaovideoplayer/VideoListAdapter.java index 4e56cb7c4..a47f6fcd8 100644 --- a/app/src/main/java/fm/jiecao/jiecaovideoplayer/VideoListAdapter.java +++ b/app/src/main/java/fm/jiecao/jiecaovideoplayer/VideoListAdapter.java @@ -8,7 +8,7 @@ import com.nostra13.universalimageloader.core.ImageLoader; -import fm.jiecao.jcvideoplayer_lib.JCVideoPlayer; +import fm.jiecao.jcvideoplayer_lib.JCVideoPlayerStandard; /** * Created by Nathen @@ -50,7 +50,7 @@ public View getView(int position, View convertView, ViewGroup parent) { viewHolder = new ViewHolder(); LayoutInflater mInflater = LayoutInflater.from(context); convertView = mInflater.inflate(R.layout.item_list, null); - viewHolder.jcVideoPlayer = (JCVideoPlayer) convertView.findViewById(R.id.videoplayer); + viewHolder.jcVideoPlayer = (JCVideoPlayerStandard) convertView.findViewById(R.id.videoplayer); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); @@ -64,6 +64,6 @@ public View getView(int position, View convertView, ViewGroup parent) { } class ViewHolder { - JCVideoPlayer jcVideoPlayer; + JCVideoPlayerStandard jcVideoPlayer; } } diff --git a/app/src/main/java/fm/jiecao/jiecaovideoplayer/View/JCVideoPlayerStandardWithShareButton.java b/app/src/main/java/fm/jiecao/jiecaovideoplayer/View/JCVideoPlayerStandardWithShareButton.java new file mode 100644 index 000000000..9793212bd --- /dev/null +++ b/app/src/main/java/fm/jiecao/jiecaovideoplayer/View/JCVideoPlayerStandardWithShareButton.java @@ -0,0 +1,57 @@ +package fm.jiecao.jiecaovideoplayer.View; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.widget.ImageView; +import android.widget.Toast; + +import fm.jiecao.jcvideoplayer_lib.JCVideoPlayerStandard; +import fm.jiecao.jiecaovideoplayer.R; + +/** + * Created by Nathen + * On 2016/04/22 00:54 + */ +public class JCVideoPlayerStandardWithShareButton extends JCVideoPlayerStandard { + + ImageView btnShare; + + public JCVideoPlayerStandardWithShareButton(Context context) { + super(context); + } + + public JCVideoPlayerStandardWithShareButton(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected void init(Context context) { + super.init(context); + btnShare = (ImageView) findViewById(R.id.share); + btnShare.setOnClickListener(this); + } + + @Override + public int getLayoutId() { + return R.layout.jc_layout_standard_with_share_button; + } + + @Override + public void onClick(View v) { + super.onClick(v); + if (v.getId() == R.id.share) { + Toast.makeText(getContext(), "Whatever the icon means", Toast.LENGTH_SHORT).show(); + } + } + + @Override + public void setStateAndUi(int state) { + super.setStateAndUi(state); + if (IF_CURRENT_IS_FULLSCREEN) { + btnShare.setVisibility(View.VISIBLE); + } else { + btnShare.setVisibility(View.INVISIBLE); + } + } +} diff --git a/app/src/main/res/drawable/biz_video_shrink.png b/app/src/main/res/drawable/biz_video_shrink.png deleted file mode 100644 index 5f452f8e2..000000000 Binary files a/app/src/main/res/drawable/biz_video_shrink.png and /dev/null differ diff --git a/app/src/main/res/drawable/share_selector.xml b/app/src/main/res/drawable/share_selector.xml new file mode 100644 index 000000000..2dbc865c3 --- /dev/null +++ b/app/src/main/res/drawable/share_selector.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_loadimage.xml b/app/src/main/res/layout/activity_loadimage.xml index a24211b97..8f06dd91a 100644 --- a/app/src/main/res/layout/activity_loadimage.xml +++ b/app/src/main/res/layout/activity_loadimage.xml @@ -1,11 +1,11 @@ + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:paddingBottom="3dp" + tools:context="fm.jiecao.jiecaovideoplayer.MainActivity"> + android:text="ImageLoader"/> - + android:layout_height="200dp"/> + android:text="Glide"/> - + android:layout_marginTop="2dp"/> + android:text="Picasso"/> - + android:layout_marginTop="2dp"/> + android:text="Volley"/> - + android:layout_marginTop="2dp"/> + android:text="Fresco not yet"/> diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 541ab33d4..de07a86da 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,11 +1,8 @@ + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> - + android:layout_height="wrap_content" + android:layout_marginLeft="3dp" + android:layout_marginTop="18dp" + android:text="Base simple ui example"/> + + + android:text="Recommended standard ui example"/> - + android:layout_height="200dp"/> + android:text="Standard ui with share button, visible after fullscreen"/> - + android:layout_height="200dp"/>