提交 a678e317 编写于 作者: G guoshuyu

add viewpager2

上级 236b7685
......@@ -82,6 +82,7 @@ dependencies {
implementation viewDependencies.glideProcessor
implementation androidDependencies.support_v4
implementation androidDependencies.design
implementation androidDependencies.viewpager2
implementation project(':gsyVideoPlayer')
......
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="LockedOrientationActivity"
package="com.example.gsyvideoplayer">
package="com.example.gsyvideoplayer"
tools:ignore="LockedOrientationActivity">
<!-- 请求访问网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 请求访问网络 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 请求访问网络 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
......@@ -18,10 +16,11 @@
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config"
android:theme="@style/AppTheme">
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true">
<activity android:name=".ViewPager2Activity"></activity>
<activity
android:name=".MainActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
......@@ -134,31 +133,25 @@
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Translucent" />
<activity
android:name=".ListADVideoActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Translucent" />
<activity
android:name=".ListADVideoActivity2"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Translucent" />
<activity
android:name=".exo.DetailExoListPlayer"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
android:screenOrientation="portrait" />
<activity
android:name=".simple.SimplePlayer"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
android:theme="@style/Theme.AppCompat.Full"
android:screenOrientation="portrait" />
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Full" />
<activity
android:name=".simple.SimpleDetailActivityMode1"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
......@@ -167,69 +160,59 @@
android:name=".simple.SimpleDetailActivityMode2"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
android:screenOrientation="portrait" />
<activity
android:name=".simple.SimpleListVideoActivityMode1"
android:theme="@style/Theme.AppCompat.Translucent"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
android:screenOrientation="portrait" />
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Translucent" />
<activity
android:name=".simple.SimpleListVideoActivityMode2"
android:theme="@style/Theme.AppCompat.Translucent"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
android:screenOrientation="portrait" />
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Translucent" />
<activity
android:name=".simple.SimpleActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
android:screenOrientation="portrait" />
<activity
android:name=".switchplay.SwitchListVideoActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
android:theme="@style/Theme.AppCompat.Transitions"
android:screenOrientation="portrait" />
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Transitions" />
<activity
android:name=".switchplay.SwitchDetailActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
android:theme="@style/Theme.AppCompat.Transitions"
android:screenOrientation="portrait" />
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Transitions" />
<activity
android:name=".RecyclerView3Activity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
android:theme="@style/Theme.AppCompat.Transitions"
android:screenOrientation="portrait" />
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Transitions" />
<activity
android:name=".DetailNormalActivityPlayer"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
android:theme="@style/Theme.AppCompat.Transitions"
android:screenOrientation="portrait" />
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Transitions" />
<activity
android:name=".DetailDownloadPlayer"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
android:theme="@style/Theme.AppCompat.Transitions"
android:screenOrientation="portrait" />
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Transitions" />
<activity
android:name=".AudioDetailPlayer"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
android:theme="@style/Theme.AppCompat.Transitions"
android:screenOrientation="portrait" />
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Transitions" />
<activity
android:name=".exosubtitle.GSYExoSubTitleDetailPlayer"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
android:theme="@style/Theme.AppCompat.Transitions"
android:screenOrientation="portrait" />
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Transitions" />
<meta-data
android:name="android.max_aspect"
android:value="2.1" />
</application>
</manifest>
\ No newline at end of file
......@@ -317,9 +317,9 @@ public class DetailPlayer extends AppCompatActivity {
//String url = "http://video.7k.cn/app_video/20171202/6c8cf3ea/v.m3u8.mp4";
//String url = "http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8";
//String url = "rtmp://ctc-zhenjiang04.rt1.gensee.com/5324e855b28b453db7b0ec226598b76c_171391_0_8801038305_1591077225_205d01b8/video";
String url = "http://video1.dgtle.com/backend%2F2020%2F3%2F0%2F%E6%88%91%E6%B2%A1%E6%9C%89%E7%BB%99%E4%B8%80%E5%8A%A08Pro%E5%81%9A%E8%AF%84%E6%B5%8B_%E5%8D%B4%E5%B8%A6%E7%9D%80%E5%AE%83%E6%BC%82%E6%B5%81.mp4_1080.mp4";
//String url = "http://video1.dgtle.com/backend%2F2020%2F3%2F0%2F%E6%88%91%E6%B2%A1%E6%9C%89%E7%BB%99%E4%B8%80%E5%8A%A08Pro%E5%81%9A%E8%AF%84%E6%B5%8B_%E5%8D%B4%E5%B8%A6%E7%9D%80%E5%AE%83%E6%BC%82%E6%B5%81.mp4_1080.mp4";
//String url = "http://yongtaizx.xyz/20191230/t2Axgh3k/index.m3u8";
//String url = "https://pointshow.oss-cn-hangzhou.aliyuncs.com/McTk51586843620689.mp4";
String url = "https://pointshow.oss-cn-hangzhou.aliyuncs.com/McTk51586843620689.mp4";
//String url = "http://pointshow.oss-cn-hangzhou.aliyuncs.com/transcode/ORIGINAL/Mnbc61586842828593.mp4";
//ssl error
//String url = "https://file.shftz.cn:8443/filesystem/download/10/2019/3/26/ce2c7c66-e9eb-42be-adf6-f9008385ea8c.mov/play";
......
......@@ -67,7 +67,7 @@ public class MainActivity extends AppCompatActivity {
@OnClick({R.id.open_btn, R.id.list_btn, R.id.list_btn_2, R.id.list_detail, R.id.clear_cache, R.id.recycler, R.id.recycler_2, R.id.list_detail_list, R.id.web_detail, R.id.danmaku_video, R.id.fragment_video,
R.id.more_type, R.id.input_type, R.id.open_btn_empty, R.id.open_control, R.id.open_filter, R.id.open_btn_pick, R.id.open_btn_auto, R.id.open_scroll, R.id.open_window, R.id.open_btn_ad,
R.id.open_btn_multi, R.id.open_btn_ad2, R.id.open_list_ad, R.id.open_custom_exo, R.id.open_simple, R.id.open_switch, R.id.media_codec, R.id.detail_normal_activity,
R.id.detail_download_activity, R.id.detail_audio_activity, R.id.detail_subtitle_activity, R.id.change_core})
R.id.detail_download_activity, R.id.detail_audio_activity, R.id.detail_subtitle_activity, R.id.change_core, R.id.view_pager2_activity})
public void onClick(View view) {
switch (view.getId()) {
case R.id.open_simple:
......@@ -184,6 +184,9 @@ public class MainActivity extends AppCompatActivity {
case R.id.detail_audio_activity:
JumpUtils.goToDetailAudioActivity(this);
break;
case R.id.view_pager2_activity:
JumpUtils.goToViewPager2Activity(this);
break;
case R.id.change_core:
i += 1;
if (i % 3 == 0) {
......
package com.example.gsyvideoplayer;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager2.widget.ViewPager2;
import android.os.Bundle;
import android.view.View;
import com.example.gsyvideoplayer.adapter.ViewPagerAdapter;
import com.example.gsyvideoplayer.holder.RecyclerItemNormalHolder;
import com.example.gsyvideoplayer.model.VideoModel;
import com.shuyu.gsyvideoplayer.GSYVideoManager;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
public class ViewPager2Activity extends AppCompatActivity {
@BindView(R.id.view_pager2)
ViewPager2 viewPager2;
List<VideoModel> dataList = new ArrayList<>();
ViewPagerAdapter viewPagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_pager2);
ButterKnife.bind(this);
resolveData();
viewPagerAdapter = new ViewPagerAdapter(this, dataList);
viewPager2.setOrientation(ViewPager2.ORIENTATION_VERTICAL);
viewPager2.setAdapter(viewPagerAdapter);
viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
//大于0说明有播放
int playPosition = GSYVideoManager.instance().getPlayPosition();
if (playPosition >= 0) {
//对应的播放列表TAG
if (GSYVideoManager.instance().getPlayTag().equals(RecyclerItemNormalHolder.TAG)
&& (position != playPosition)) {
playPosition(position);
}
}
}
});
viewPager2.post(new Runnable() {
@Override
public void run() {
playPosition(0);
}
});
}
@Override
public void onBackPressed() {
if (GSYVideoManager.backFromWindowFull(this)) {
return;
}
super.onBackPressed();
}
@Override
protected void onPause() {
super.onPause();
GSYVideoManager.onPause();
}
@Override
protected void onResume() {
super.onResume();
GSYVideoManager.onResume(false);
}
@Override
protected void onDestroy() {
super.onDestroy();
GSYVideoManager.releaseAllVideos();
}
private void resolveData() {
for (int i = 0; i < 19; i++) {
VideoModel videoModel = new VideoModel();
dataList.add(videoModel);
}
if (viewPagerAdapter != null)
viewPagerAdapter.notifyDataSetChanged();
}
private void playPosition(int position) {
RecyclerView.ViewHolder viewHolder = ((RecyclerView) viewPager2.getChildAt(0)).findViewHolderForAdapterPosition(position);
if (viewHolder != null) {
RecyclerItemNormalHolder recyclerItemNormalHolder = (RecyclerItemNormalHolder) viewHolder;
recyclerItemNormalHolder.getPlayer().startPlayLogic();
}
}
}
package com.example.gsyvideoplayer.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.gsyvideoplayer.R;
import com.example.gsyvideoplayer.holder.RecyclerItemNormalHolder;
import com.example.gsyvideoplayer.model.VideoModel;
import java.util.List;
public class ViewPagerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private final static String TAG = "RecyclerBaseAdapter";
private List<VideoModel> itemDataList = null;
private Context context = null;
public ViewPagerAdapter(Context context, List<VideoModel> itemDataList) {
this.itemDataList = itemDataList;
this.context = context;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
int viewType) {
View v = LayoutInflater.from(context).inflate(R.layout.layout_viewpager2_item, parent, false);
final RecyclerView.ViewHolder holder = new RecyclerItemNormalHolder(context, v);
return holder;
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
RecyclerItemNormalHolder recyclerItemViewHolder = (RecyclerItemNormalHolder) holder;
recyclerItemViewHolder.setRecyclerBaseAdapter(this);
recyclerItemViewHolder.onBind(position, itemDataList.get(position));
}
@Override
public int getItemCount() {
return itemDataList.size();
}
@Override
public int getItemViewType(int position) {
return 1;
}
public void setListData(List<VideoModel> data) {
itemDataList = data;
notifyDataSetChanged();
}
}
......@@ -49,7 +49,7 @@ public class RecyclerItemNormalHolder extends RecyclerItemBaseHolder {
String url;
String title;
if (position % 2 == 0) {
url = "https://res.exexm.com/cw_145225549855002";
url = "https://pointshow.oss-cn-hangzhou.aliyuncs.com/McTk51586843620689.mp4";
title = "这是title";
} else {
url = "http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4";
......@@ -97,7 +97,7 @@ public class RecyclerItemNormalHolder extends RecyclerItemBaseHolder {
public void onEnterFullscreen(String url, Object... objects) {
super.onEnterFullscreen(url, objects);
GSYVideoManager.instance().setNeedMute(false);
gsyVideoPlayer.getCurrentPlayer().getTitleTextView().setText((String)objects[0]);
gsyVideoPlayer.getCurrentPlayer().getTitleTextView().setText((String) objects[0]);
}
}).build(gsyVideoPlayer);
......@@ -126,4 +126,7 @@ public class RecyclerItemNormalHolder extends RecyclerItemBaseHolder {
standardGSYVideoPlayer.startWindowFullscreen(context, true, true);
}
public SampleCoverVideo getPlayer() {
return gsyVideoPlayer;
}
}
\ No newline at end of file
......@@ -35,6 +35,7 @@ import com.example.gsyvideoplayer.RecyclerView2Activity;
import com.example.gsyvideoplayer.RecyclerView3Activity;
import com.example.gsyvideoplayer.RecyclerViewActivity;
import com.example.gsyvideoplayer.ScrollingActivity;
import com.example.gsyvideoplayer.ViewPager2Activity;
import com.example.gsyvideoplayer.WebDetailActivity;
import com.example.gsyvideoplayer.WindowActivity;
import com.example.gsyvideoplayer.exo.DetailExoListPlayer;
......@@ -287,7 +288,15 @@ public class JumpUtils {
Intent intent = new Intent(activity, AudioDetailPlayer.class);
activity.startActivity(intent);
}
/**
* 跳转到ViewPager详情播放
*
* @param activity
*/
public static void goToViewPager2Activity(Activity activity) {
Intent intent = new Intent(activity, ViewPager2Activity.class);
activity.startActivity(intent);
}
/**
* 跳转到详情播放
......
......@@ -9,10 +9,10 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.example.gsyvideoplayer.MainActivity">
<Button
......@@ -85,6 +85,13 @@
android:layout_marginTop="20dp"
android:text="List全屏和小窗口列表" />
<Button
android:id="@+id/view_pager2_activity"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="ViewPager2列表" />
<Button
android:id="@+id/recycler"
android:layout_width="240dp"
......@@ -202,42 +209,49 @@
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="硬解码支持" />
<Button
android:id="@+id/detail_download_activity"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="缓存下载支持" />
<Button
android:id="@+id/detail_normal_activity"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="普通 Activity" />
<Button
android:id="@+id/open_custom_exo"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="自定义Exo" />
<Button
android:id="@+id/detail_subtitle_activity"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="自定义Exo支持字幕" />
<Button
android:id="@+id/detail_audio_activity"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="音频" />
<Button
android:id="@+id/change_core"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="Ijk 内核" />
<Button
android:id="@+id/clear_cache"
android:layout_width="240dp"
......
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_detail_player"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/view_pager2"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.example.gsyvideoplayer.video.SampleCoverVideo
android:id="@+id/video_item_player"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
\ No newline at end of file
......@@ -47,6 +47,7 @@ ext {
appcompat_v7: "androidx.appcompat:appcompat:${supportLibraryVersion}",
support_v4 : "androidx.legacy:legacy-support-v4:${otherVersion}",
design : "com.google.android.material:material:${otherVersion}",
viewpager2 : "androidx.viewpager2:viewpager2:${otherVersion}",
]
viewDependencies = [
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册