diff --git a/README.md b/README.md
index db781a1fc39a923a8187a56e067f60da08839a14..b18a60432554da227b81639d7f3c4948ea9d27fb 100644
--- a/README.md
+++ b/README.md
@@ -16,13 +16,13 @@
com.shuyu
gsyVideoPlayer
- 1.1.5
+ 1.1.6
pom
```
```
-compile 'com.shuyu:gsyVideoPlayer:1.1.5'
+compile 'com.shuyu:gsyVideoPlayer:1.1.6'
```
## 效果,录屏下的屏幕旋转和实际有些出入
@@ -42,6 +42,18 @@ compile 'com.shuyu:gsyVideoPlayer:1.1.5'
*
3、详情模式
+
+## 1.1.6 优化了第二种列表ListVideoUtil的全屏效果,和列表一的全屏效果一致,两种全屏效果增加是否打开关闭接口。
+
+```
+/**
+ * 全屏动画
+ *
+ * @param showFullAnimation 是否使用全屏动画效果
+ */
+public void setShowFullAnimation(boolean showFullAnimation)
+```
+
## 1.1.5 优化了一些UI,增加了一些有趣的动画,比如播放按键。
* 推荐这个动画效果ENViews
diff --git a/gradle.properties b/gradle.properties
index 391eeee8f1cd4f390f272975d6c6b34e4963338d..b04eb4e917488b58e1f38bbaace8181bbb591cb5 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -18,7 +18,7 @@ org.gradle.jvmargs=-Xmx1536m
BINTRAY_USER=
BINTRAY_KEY=
PROJ_GROUP=com.shuyu
-PROJ_VERSION=1.1.5
+PROJ_VERSION=1.1.6
PROJ_NAME=gsyVideo
PROJ_WEBSITEURL=hhttps://github.com/CarGuo/GSYVideoPlayer
PROJ_ISSUETRACKERURL=
diff --git a/gsyVideoPlayer/src/main/java/com/shuyu/gsyvideoplayer/GSYVideoManager.java b/gsyVideoPlayer/src/main/java/com/shuyu/gsyvideoplayer/GSYVideoManager.java
index 9b1ec0bab82b960424de3deadbcd004186d13729..e78779fa2c868a03ad7cf0a0afe646bb1e734ae4 100644
--- a/gsyVideoPlayer/src/main/java/com/shuyu/gsyvideoplayer/GSYVideoManager.java
+++ b/gsyVideoPlayer/src/main/java/com/shuyu/gsyvideoplayer/GSYVideoManager.java
@@ -15,7 +15,6 @@ import com.shuyu.gsyvideoplayer.listener.GSYMediaPlayerListener;
import com.shuyu.gsyvideoplayer.model.GSYModel;
import java.lang.ref.WeakReference;
-import java.lang.reflect.Method;
import java.util.Map;
import tv.danmaku.ijk.media.player.IMediaPlayer;
diff --git a/gsyVideoPlayer/src/main/java/com/shuyu/gsyvideoplayer/utils/ListVideoUtil.java b/gsyVideoPlayer/src/main/java/com/shuyu/gsyvideoplayer/utils/ListVideoUtil.java
index 178616b881f4d484b16c0f1b7305ed45cd766037..933adf00c7d2e7345681162bf00ad0b7d7612377 100644
--- a/gsyVideoPlayer/src/main/java/com/shuyu/gsyvideoplayer/utils/ListVideoUtil.java
+++ b/gsyVideoPlayer/src/main/java/com/shuyu/gsyvideoplayer/utils/ListVideoUtil.java
@@ -6,14 +6,19 @@ import android.graphics.Color;
import android.os.Build;
import android.os.Handler;
import android.transition.TransitionManager;
+import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.ImageView;
+import android.widget.FrameLayout;
import com.shuyu.gsyvideoplayer.GSYVideoPlayer;
import com.shuyu.gsyvideoplayer.R;
+import com.shuyu.gsyvideoplayer.video.GSYBaseVideoPlayer;
import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;
+import static com.shuyu.gsyvideoplayer.utils.CommonUtil.getActionBarHeight;
+import static com.shuyu.gsyvideoplayer.utils.CommonUtil.getStatusBarHeight;
+
/**
* Created by shuyu on 2016/11/12.
*/
@@ -24,6 +29,7 @@ public class ListVideoUtil {
private StandardGSYVideoPlayer gsyVideoPlayer;
private ViewGroup fullViewContainer;
private ViewGroup listParent;//记录列表中item的父布局
+ private ViewGroup.LayoutParams listParams;
private OrientationUtils orientationUtils;
private Context context;
private int playPosition = -1; // 播放的位置
@@ -33,6 +39,14 @@ public class ListVideoUtil {
private boolean hideStatusBar; //是否隐藏有状态bar
private boolean hideActionBar; //是否隐藏有状态ActionBar
+ protected int[] listItemRect;//当前item框的屏幕位置
+
+ protected int[] listItemSize;//当前item的大小
+
+ private Handler handler = new Handler();
+
+ private boolean showFullAnimation = true;
+
public ListVideoUtil(Context context) {
gsyVideoPlayer = new StandardGSYVideoPlayer(context);
this.context = context;
@@ -111,7 +125,7 @@ public class ListVideoUtil {
if (!isFull) {
resolveToFull();
} else {
- resolveToNormal();
+ resolveMaterialToNormal(gsyVideoPlayer);
}
}
@@ -122,12 +136,11 @@ public class ListVideoUtil {
CommonUtil.hideSupportActionBar(context, hideActionBar, hideStatusBar);
isFull = true;
ViewGroup viewGroup = (ViewGroup) gsyVideoPlayer.getParent();
+ listParams = gsyVideoPlayer.getLayoutParams();
if (viewGroup != null) {
listParent = viewGroup;
viewGroup.removeView(gsyVideoPlayer);
}
- fullViewContainer.setBackgroundColor(Color.BLACK);
- fullViewContainer.addView(gsyVideoPlayer);
gsyVideoPlayer.setIfCurrentIsFullscreen(true);
gsyVideoPlayer.getFullscreenButton().setImageResource(R.drawable.video_shrink);
gsyVideoPlayer.getBackButton().setVisibility(View.VISIBLE);
@@ -137,36 +150,88 @@ public class ListVideoUtil {
gsyVideoPlayer.getBackButton().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- resolveToNormal();
+ resolveMaterialToNormal(gsyVideoPlayer);
}
});
- if (isFullLandFrist()) {
- new Handler().postDelayed(new Runnable() {
- @Override
- public void run() {
- if (orientationUtils.getIsLand() != 1) {
- orientationUtils.resolveByClick();
- }
- }
- }, 50);
+ if (showFullAnimation && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ if (fullViewContainer instanceof FrameLayout) {
+ //目前只做了frameLoayout的判断
+ resolveMaterialAnimation();
+ } else {
+ resolveFullAdd();
+ }
+
+ } else {
+ resolveFullAdd();
}
}
+ /**
+ * 添加到全屏父布局里
+ */
+ private void resolveFullAdd() {
+ fullViewContainer.setBackgroundColor(Color.BLACK);
+ fullViewContainer.addView(gsyVideoPlayer);
+ resolveChangeFirstLogic(50);
+ }
+
+ /**
+ * 如果是5.0的动画开始位置
+ */
+ private void resolveMaterialAnimation() {
+ listItemRect = new int[2];
+ listItemSize = new int[2];
+ saveLocationStatus(context, hideStatusBar, hideActionBar);
+ FrameLayout.LayoutParams lpParent = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
+ FrameLayout frameLayout = new FrameLayout(context);
+ frameLayout.setBackgroundColor(Color.BLACK);
+ FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(listItemSize[0], listItemSize[1]);
+ lp.setMargins(listItemRect[0], listItemRect[1], 0, 0);
+ frameLayout.addView(gsyVideoPlayer, lp);
+ fullViewContainer.addView(frameLayout, lpParent);
+ handler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ //开始动画
+ TransitionManager.beginDelayedTransition(fullViewContainer);
+ resolveMaterialFullVideoShow(gsyVideoPlayer);
+ resolveChangeFirstLogic(600);
+ }
+ }, 300);
+ }
+
+ /**
+ * 如果是5.0的,要从原位置过度到全屏位置
+ */
+ private void resolveMaterialFullVideoShow(GSYBaseVideoPlayer gsyVideoPlayer) {
+ FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) gsyVideoPlayer.getLayoutParams();
+ lp.setMargins(0, 0, 0, 0);
+ lp.height = ViewGroup.LayoutParams.MATCH_PARENT;
+ lp.width = ViewGroup.LayoutParams.MATCH_PARENT;
+ lp.gravity = Gravity.CENTER;
+ gsyVideoPlayer.setLayoutParams(lp);
+ gsyVideoPlayer.setIfCurrentIsFullscreen(true);
+ }
+
+
/**
* 处理正常逻辑
*/
private void resolveToNormal() {
CommonUtil.showSupportActionBar(context, hideActionBar, hideStatusBar);
int delay = orientationUtils.backToProtVideo();
- new Handler().postDelayed(new Runnable() {
+ handler.postDelayed(new Runnable() {
@Override
public void run() {
isFull = false;
fullViewContainer.removeAllViews();
+ if (gsyVideoPlayer.getParent() != null) {
+ ((ViewGroup) gsyVideoPlayer.getParent()).removeView(gsyVideoPlayer);
+ }
orientationUtils.setEnable(false);
gsyVideoPlayer.setIfCurrentIsFullscreen(false);
fullViewContainer.setBackgroundColor(Color.TRANSPARENT);
- listParent.addView(gsyVideoPlayer);
+ listParent.addView(gsyVideoPlayer, listParams);
gsyVideoPlayer.getFullscreenButton().setImageResource(R.drawable.video_enlarge);
gsyVideoPlayer.getBackButton().setVisibility(View.GONE);
}
@@ -174,6 +239,71 @@ public class ListVideoUtil {
}
+ /**
+ * 动画回到正常效果
+ */
+ private void resolveMaterialToNormal(final GSYVideoPlayer gsyVideoPlayer) {
+ if (showFullAnimation && fullViewContainer instanceof FrameLayout && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ int delay = orientationUtils.backToProtVideo();
+ handler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ TransitionManager.beginDelayedTransition(fullViewContainer);
+ FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) gsyVideoPlayer.getLayoutParams();
+ lp.setMargins(listItemRect[0], listItemRect[1], 0, 0);
+ lp.width = listItemSize[0];
+ lp.height = listItemSize[1];
+ //注意配置回来,不然动画效果会不对
+ lp.gravity = Gravity.NO_GRAVITY;
+ gsyVideoPlayer.setLayoutParams(lp);
+ handler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ resolveToNormal();
+ }
+ }, 400);
+ }
+ }, delay);
+ } else {
+ resolveToNormal();
+ }
+ }
+
+
+ /**
+ * 是否全屏一开始马上自动横屏
+ */
+ private void resolveChangeFirstLogic(int time) {
+ if (isFullLandFrist()) {
+ handler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ if (orientationUtils.getIsLand() != 1) {
+ orientationUtils.resolveByClick();
+ }
+ }
+ }, time);
+ }
+ }
+
+ /**
+ * 保存大小和状态
+ */
+ private void saveLocationStatus(Context context, boolean statusBar, boolean actionBar) {
+ listParent.getLocationOnScreen(listItemRect);
+ int statusBarH = getStatusBarHeight(context);
+ int actionBerH = getActionBarHeight((Activity) context);
+ if (statusBar) {
+ listItemRect[1] = listItemRect[1] - statusBarH;
+ }
+ if (actionBar) {
+ listItemRect[1] = listItemRect[1] - actionBerH;
+ }
+ listItemSize[0] = listParent.getWidth();
+ listItemSize[1] = listParent.getHeight();
+ }
+
+
/**
* 是否当前播放
*/
@@ -192,7 +322,7 @@ public class ListVideoUtil {
boolean isFull = false;
if (fullViewContainer.getChildCount() > 0) {
isFull = true;
- resolveToNormal();
+ resolveMaterialToNormal(gsyVideoPlayer);
}
return isFull;
}
@@ -276,4 +406,18 @@ public class ListVideoUtil {
public void setHideActionBar(boolean hideActionBar) {
this.hideActionBar = hideActionBar;
}
+
+
+ public boolean isShowFullAnimation() {
+ return showFullAnimation;
+ }
+
+ /**
+ * 全屏动画
+ *
+ * @param showFullAnimation 是否使用全屏动画效果
+ */
+ public void setShowFullAnimation(boolean showFullAnimation) {
+ this.showFullAnimation = showFullAnimation;
+ }
}
diff --git a/gsyVideoPlayer/src/main/java/com/shuyu/gsyvideoplayer/video/GSYBaseVideoPlayer.java b/gsyVideoPlayer/src/main/java/com/shuyu/gsyvideoplayer/video/GSYBaseVideoPlayer.java
index 46cf3b9a2f4ce17a4d117fd704806dc01803aae5..49972bfb7291bf6ebde23b676c7021cef18f5528 100644
--- a/gsyVideoPlayer/src/main/java/com/shuyu/gsyvideoplayer/video/GSYBaseVideoPlayer.java
+++ b/gsyVideoPlayer/src/main/java/com/shuyu/gsyvideoplayer/video/GSYBaseVideoPlayer.java
@@ -46,6 +46,8 @@ public abstract class GSYBaseVideoPlayer extends FrameLayout implements GSYMedia
protected boolean mCache = false;//是否播边边缓冲
+ private boolean mShowFullAnimation = true;//是否使用全屏动画效果
+
protected int[] mListItemRect;//当前item框的屏幕位置
protected int[] mListItemSize;//当前item的大小
@@ -68,6 +70,7 @@ public abstract class GSYBaseVideoPlayer extends FrameLayout implements GSYMedia
private Handler mHandler = new Handler();
+
public GSYBaseVideoPlayer(Context context) {
super(context);
}
@@ -190,7 +193,7 @@ public abstract class GSYBaseVideoPlayer extends FrameLayout implements GSYMedia
FrameLayout frameLayout = new FrameLayout(context);
frameLayout.setBackgroundColor(Color.BLACK);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ if (mShowFullAnimation && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(getWidth(), getHeight());
lp.setMargins(mListItemRect[0], mListItemRect[1], 0, 0);
frameLayout.addView(gsyVideoPlayer, lp);
@@ -264,7 +267,7 @@ public abstract class GSYBaseVideoPlayer extends FrameLayout implements GSYMedia
final GSYVideoPlayer gsyVideoPlayer;
if (oldF != null) {
gsyVideoPlayer = (GSYVideoPlayer) oldF;
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ if (mShowFullAnimation && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
TransitionManager.beginDelayedTransition(vp);
FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) gsyVideoPlayer.getLayoutParams();
@@ -355,4 +358,18 @@ public abstract class GSYBaseVideoPlayer extends FrameLayout implements GSYMedia
public void setRotateViewAuto(boolean rotateViewAuto) {
this.mRotateViewAuto = rotateViewAuto;
}
+
+
+ public boolean ismShowFullAnimation() {
+ return mShowFullAnimation;
+ }
+
+ /**
+ * 全屏动画
+ *
+ * @param showFullAnimation 是否使用全屏动画效果
+ */
+ public void setShowFullAnimation(boolean showFullAnimation) {
+ this.mShowFullAnimation = showFullAnimation;
+ }
}