提交 6ea9eba7 编写于 作者: S shuyu

全屏切换

上级 d5734aac
......@@ -5,10 +5,13 @@ import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.transition.Explode;
import android.view.Window;
import android.widget.FrameLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import com.example.gsyvideoplayer.adapter.ListNormalAdapter;
import com.example.gsyvideoplayer.adapter.ListVideoAdapter;
import com.shuyu.gsyvideoplayer.GSYVideoPlayer;
import com.shuyu.gsyvideoplayer.utils.ListVideoUtil;
import butterknife.BindView;
......@@ -21,7 +24,7 @@ public class ListVideoActivity extends AppCompatActivity {
@BindView(R.id.activity_list_video)
RelativeLayout activityListVideo;
ListVideoAdapter listVideoAdapter;
//ListVideoAdapter listVideoAdapter;
ListVideoUtil listVideoUtil;
@Override
......@@ -38,9 +41,11 @@ public class ListVideoActivity extends AppCompatActivity {
listVideoUtil = new ListVideoUtil(this);
listVideoAdapter = new ListVideoAdapter(this, listVideoUtil);
listVideoAdapter.setRootView(activityListVideo);
videoList.setAdapter(listVideoAdapter);
//listVideoAdapter = new ListVideoAdapter(this, listVideoUtil);
//listVideoAdapter.setRootView(activityListVideo);
ListNormalAdapter listNormalAdapter = new ListNormalAdapter(this);
videoList.setAdapter(listNormalAdapter);
}
......@@ -49,5 +54,6 @@ public class ListVideoActivity extends AppCompatActivity {
protected void onDestroy() {
super.onDestroy();
listVideoUtil.releaseVideoPlayer();
GSYVideoPlayer.releaseAllVideos();
}
}
package com.example.gsyvideoplayer.adapter;
import android.app.Activity;
import android.content.Context;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import com.example.gsyvideoplayer.R;
import com.example.gsyvideoplayer.model.VideoModel;
import com.shuyu.gsyvideoplayer.utils.OrientationUtils;
import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;
import java.util.ArrayList;
import java.util.List;
/**
* Created by shuyu on 2016/11/12.
*/
public class ListNormalAdapter extends BaseAdapter {
private String TAG = "TT";
private List<VideoModel> list = new ArrayList<>();
private LayoutInflater inflater = null;
private Context context;
private boolean isFullVideo;
public ListNormalAdapter(Context context) {
super();
this.context = context;
inflater = LayoutInflater.from(context);
for (int i = 0; i < 40; i++) {
list.add(new VideoModel());
}
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.list_video_item_normal, null);
holder.gsyVideoPlayer = (StandardGSYVideoPlayer) convertView.findViewById(R.id.video_item_player);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
//增加封面
ImageView imageView = new ImageView(context);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setImageResource(R.mipmap.xxx1);
holder.gsyVideoPlayer.setThumbImageView(imageView);
final String url = "http://baobab.wdjcdn.com/14564977406580.mp4";
holder.gsyVideoPlayer.setUp(url, true, "");
//增加title
holder.gsyVideoPlayer.getTitleTextView().setVisibility(View.GONE);
//设置返回键
holder.gsyVideoPlayer.getBackButton().setVisibility(View.GONE);
//设置全屏按键功能
holder.gsyVideoPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
resolveFullBtn(holder.gsyVideoPlayer);
}
});
return convertView;
}
/**
* 全屏幕按键处理
*/
private void resolveFullBtn(final StandardGSYVideoPlayer standardGSYVideoPlayer) {
standardGSYVideoPlayer.startWindowFullscreen(context, false, true);
isFullVideo = true;
}
class ViewHolder {
StandardGSYVideoPlayer gsyVideoPlayer;
}
}
......@@ -9,4 +9,9 @@
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/video_full_container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer
android:id="@+id/video_item_player"
android:layout_width="match_parent"
android:layout_height="@dimen/post_media_height"/>
</RelativeLayout>
\ No newline at end of file
......@@ -37,6 +37,9 @@ import java.util.TimerTask;
import tv.danmaku.ijk.media.player.IMediaPlayer;
import static com.shuyu.gsyvideoplayer.utils.CommonUtil.hideSupportActionBar;
import static com.shuyu.gsyvideoplayer.utils.CommonUtil.showSupportActionBar;
/**
* Created by shuyu on 2016/11/11.
*/
......@@ -776,6 +779,72 @@ public abstract class GSYVideoPlayer extends FrameLayout implements View.OnClick
&& GSYVideoManager.instance().listener() == this;
}
public void startWindowFullscreen(final Context context, final boolean actionBar, final boolean statusBar) {
hideSupportActionBar(context, actionBar, statusBar);
ViewGroup vp = (ViewGroup) (CommonUtil.scanForActivity(getContext())).findViewById(Window.ID_ANDROID_CONTENT);
View old = vp.findViewById(FULLSCREEN_ID);
if (old != null) {
vp.removeView(old);
}
if (textureViewContainer.getChildCount() > 0) {
textureViewContainer.removeAllViews();
}
try {
Constructor<GSYVideoPlayer> constructor = (Constructor<GSYVideoPlayer>) GSYVideoPlayer.this.getClass().getConstructor(Context.class);
GSYVideoPlayer gsyVideoPlayer = constructor.newInstance(getContext());
gsyVideoPlayer.setId(FULLSCREEN_ID);
WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
int w = wm.getDefaultDisplay().getWidth();
int h = wm.getDefaultDisplay().getHeight();
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(h, w);
lp.setMargins((w - h) / 2, -(w - h) / 2, 0, 0);
vp.addView(gsyVideoPlayer, lp);
gsyVideoPlayer.setUp(mUrl, mCache, mObjects);
gsyVideoPlayer.setStateAndUi(mCurrentState);
gsyVideoPlayer.addTextureView();
gsyVideoPlayer.setRotation(90);
gsyVideoPlayer.getFullscreenButton().setImageResource(R.drawable.video_shrink);
gsyVideoPlayer.getFullscreenButton().setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
clearFullscreenLayout(context, actionBar, statusBar);
}
});
GSYVideoManager.instance().setLastListener(this);
GSYVideoManager.instance().setListener(gsyVideoPlayer);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public void clearFullscreenLayout(Context context, boolean actionBar, boolean statusBar) {
showSupportActionBar(context, actionBar, statusBar);
ViewGroup vp = (ViewGroup) (CommonUtil.scanForActivity(getContext())).findViewById(Window.ID_ANDROID_CONTENT);
View oldF = vp.findViewById(FULLSCREEN_ID);
GSYVideoPlayer gsyVideoPlayer = null;
if (oldF != null) {
gsyVideoPlayer = (GSYVideoPlayer) oldF;
vp.removeView(oldF);
}
mCurrentState = GSYVideoManager.instance().getLastState();
if (gsyVideoPlayer != null) {
mCurrentState = gsyVideoPlayer.getCurrentState();
}
GSYVideoManager.instance().setListener(GSYVideoManager.instance().lastListener());
GSYVideoManager.instance().setLastListener(null);
setStateAndUi(mCurrentState);
addTextureView();
CLICK_QUIT_FULLSCREEN_TIME = System.currentTimeMillis();
}
/**
* 滑动改变亮度
*
......@@ -816,4 +885,8 @@ public abstract class GSYVideoPlayer extends FrameLayout implements View.OnClick
public ImageView getFullscreenButton() {
return fullscreenButton;
}
public int getCurrentState() {
return mCurrentState;
}
}
\ No newline at end of file
......@@ -5,6 +5,10 @@ import android.content.Context;
import android.content.ContextWrapper;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.internal.view.ContextThemeWrapper;
import android.view.WindowManager;
import java.util.Formatter;
import java.util.Locale;
......@@ -58,4 +62,64 @@ public class CommonUtil {
return null;
}
/**
* 获取状态栏高度
*
* @param context 上下文
* @return 状态栏高度
*/
public static int getStatusBarHeight(Context context) {
int result = 0;
int resourceId = context.getResources()
.getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = context.getResources().getDimensionPixelSize(resourceId);
}
return result;
}
public static void hideSupportActionBar(Context context, boolean actionBar, boolean statusBar) {
if (actionBar) {
ActionBar ab = CommonUtil.getAppCompActivity(context).getSupportActionBar();
if (ab != null) {
ab.setShowHideAnimationEnabled(false);
ab.hide();
}
}
if (statusBar) {
CommonUtil.getAppCompActivity(context).getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
}
public static void showSupportActionBar(Context context, boolean actionBar, boolean statusBar) {
if (actionBar) {
ActionBar ab = CommonUtil.getAppCompActivity(context).getSupportActionBar();
if (ab != null) {
ab.setShowHideAnimationEnabled(false);
ab.show();
}
}
if (statusBar) {
CommonUtil.getAppCompActivity(context).getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
}
/**
* Get AppCompatActivity from context
*
* @param context
* @return AppCompatActivity if it's not null
*/
public static AppCompatActivity getAppCompActivity(Context context) {
if (context == null) return null;
if (context instanceof AppCompatActivity) {
return (AppCompatActivity) context;
} else if (context instanceof ContextThemeWrapper) {
return getAppCompActivity(((ContextThemeWrapper) context).getBaseContext());
}
return null;
}
}
......@@ -116,7 +116,8 @@ public class ListVideoUtil {
public void releaseVideoPlayer() {
ViewGroup viewGroup = (ViewGroup) gsyVideoPlayer.getParent();
viewGroup.removeAllViews();
if (viewGroup != null)
viewGroup.removeAllViews();
playPosition = -1;
TAG = "NULL";
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册