提交 bebf0c9d 编写于 作者: S shuyu

1.1.6

上级 f9b58da8
......@@ -16,13 +16,13 @@
<dependency>
<groupId>com.shuyu</groupId>
<artifactId>gsyVideoPlayer</artifactId>
<version>1.1.5</version>
<version>1.1.6</version>
<type>pom</type>
</dependency>
```
```
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'
* <h4>3、详情模式</h4>
<img src="https://github.com/CarGuo/GSYVideoPlayer/blob/master/04.gif" width="240px" height="426px"/>
## 1.1.6 优化了第二种列表ListVideoUtil的全屏效果,和列表一的全屏效果一致,两种全屏效果增加是否打开关闭接口。
```
/**
* 全屏动画
*
* @param showFullAnimation 是否使用全屏动画效果
*/
public void setShowFullAnimation(boolean showFullAnimation)
```
## 1.1.5 优化了一些UI,增加了一些有趣的动画,比如播放按键。
* 推荐这个动画效果<a href="https://github.com/codeestX/ENViews">ENViews</a>
......
......@@ -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=
......
......@@ -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;
......
......@@ -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;
}
}
......@@ -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;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册