接口和封装的请求类我就不写了,直接从MVP开始
首先V层
public interface IShouView {
//轮播成功
void onBar(ShouBean bean);
//视频展示
void onXiang(XiangBean bean);
}
M层内容
public class ShowModel {
ScuMod scuMod;
public void setScuMod(ScuMod scuMod) {
this.scuMod = scuMod;
}
//轮播请求
public void BarChen(){
//OkHttp里面可以添加拦截器
OkHttpClient ok = new OkHttpClient.Builder()
.build();
//请求数据
RetrofitUnitl.getInstance("http://api.svipmovie.com/",ok)
.setCreate(Inters.class)
.getBar()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Subscriber<ShouBean>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(ShouBean bean) {
scuMod.onBanr(bean);
}
});
}
//影片请求
public void XiangChen(int punm){
//OkHttp里面可以添加拦截器
OkHttpClient ok = new OkHttpClient.Builder()
.build();
//请求数据
RetrofitUnitl.getInstance("http://api.svipmovie.com/",ok)
.setCreate(Inters.class)
.getXiang(punm)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Subscriber<XiangBean>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(XiangBean bean) {
scuMod.onXiang(bean);
}
});
}
//定义一个接口
public interface ScuMod{
void onBanr(ShouBean bean);
void onXiang(XiangBean bean);
}
}
P层
public class ShowPresenter implements ShowModel.ScuMod {
IShouView view;
ShowModel model;
public ShowPresenter(IShouView view) {
this.view = view;
model = new ShowModel();
model.setScuMod(this);
}
@Override
public void onBanr(ShouBean bean) {
view.onBar(bean);
}
@Override
public void onXiang(XiangBean bean) {
view.onXiang(bean);
}
//定义一个方法
public void ShowBanr(){
model.BarChen();
}
//定义一个方法
public void ShowXiang(int pnum){
model.XiangChen(pnum);
}
}
主页面展示内容
public class MainActivity extends AppCompatActivity implements IShouView {
@BindView(R.id.bar)
Banner bar;
@BindView(R.id.rv)
RecyclerView rv;
private ShowPresenter presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找控件
ButterKnife.bind(this);
presenter = new ShowPresenter(this);
presenter.ShowBanr();
presenter.ShowXiang(getNextPage());
}
@Override
public void onBar(ShouBean bean) {
//轮播
List<String> lists = new ArrayList<>();
for (int i = 0; i < bean.getRet().getList().size(); i++) {
lists.add(bean.getRet().getList().get(i).getChildList().get(0).getPic());
}
bar.setImageLoader(new MyApps());
bar.setImages(lists);
bar.start();
}
@Override
public void onXiang(final XiangBean bean) {
rv.setLayoutManager(new LinearLayoutManager(MainActivity.this));
MyAdapter adapter = new MyAdapter(MainActivity.this,bean);
rv.setAdapter(adapter);
//点击跳转
adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Intent intent = new Intent(MainActivity.this,Zhan_Activity.class);
intent.putExtra("pnum",bean.getRet().getPnum());
startActivity(intent);
}
});
}
public int getNextPage() {
int page = getRandomNumber(1, 108);
return page;
}
public static int getRandomNumber(int min, int max) {
return new Random().nextInt(max) % (max - min + 1) + min;
}
}
布局
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.xjq.lianxi.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="200dp"
android:orientation="vertical"
>
<com.youth.banner.Banner
android:id="@+id/bar"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入内容" />
</com.youth.banner.Banner>
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="精彩推荐"
android:gravity="center_vertical"
/>
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
主布局的适配器
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyHolder> {
private Context context;
private XiangBean bean;
private OnItemClickListener mOnItemClickListener;
public MyAdapter(Context context, XiangBean bean) {
this.context = context;
this.bean = bean;
}
//点击的接口
public interface OnItemClickListener{
void onItemClick(View view,int position);
}
public void setOnItemClickListener(OnItemClickListener mOnItemClickListener){
this.mOnItemClickListener = mOnItemClickListener;
}
@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//拿到我们自己定义的布局
MyHolder holder = new MyHolder(LayoutInflater.from(context).inflate(R.layout.recyclerview_item1, parent, false));
return holder;
}
@Override
public void onBindViewHolder(final MyHolder holder, final int position) {
//加载文字
holder.tv.setText(bean.getRet().getList().get(position).getTitle());
Uri uri=Uri.parse(bean.getRet().getList().get(position).getPic());
//图片构造者
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setUri(uri)
.setAutoPlayAnimations(true)
.build();
holder.simpleDraweeView.setController(controller);
//判断图片点击
if(mOnItemClickListener != null){
holder.simpleDraweeView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mOnItemClickListener.onItemClick(holder.simpleDraweeView,position);
}
});
}
}
@Override
public int getItemCount() {
return bean.getRet().getList().size();
}
class MyHolder extends RecyclerView.ViewHolder {
SimpleDraweeView simpleDraweeView;
TextView tv;
public MyHolder(View itemView) {
super(itemView);
simpleDraweeView=itemView.findViewById(R.id.sv);
tv = itemView.findViewById(R.id.tv);
}
}
}
主布局适配器布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/sv"
android:layout_width="match_parent"
android:layout_height="200dp" />
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="名字"
android:gravity="center"
/>
</LinearLayout>
跳转播放Activity
public class Zhan_Activity extends FragmentActivity {
@BindView(R.id.rg)
RadioGroup rg;
@BindView(R.id.zhan_vp)
ViewPager zhanVp;
List<Fragment> list = new ArrayList<>();
private JCVideoPlayerStandard jcVideoPlayerStandard;
String s1 = "http://ips.ifeng.com/video19.ifeng.com/video09/2014/06/16/1989823-102-086-0009.mp4";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_zhan);
ButterKnife.bind(this);
jcVideoPlayerStandard = findViewById(R.id.js);
jcVideoPlayerStandard.setUp(s1, jcVideoPlayerStandard.SCREEN_LAYOUT_NORMAL, "视频标题");
//拿到fragment
initData();
//拿到适配器
MyPapy papy = new MyPapy(getSupportFragmentManager());
rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
switch (i){
case R.id.rb1:
zhanVp.setCurrentItem(0);
break;
case R.id.rb2:
zhanVp.setCurrentItem(1);
break;
default:
break;
}
}
});
zhanVp.setAdapter(papy);
//点击事件
zhanVp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
switch (position){
case 0:
rg.check(R.id.rb1);
break;
case 1:
rg.check(R.id.rb2);
break;
default:
break;
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
private void initData() {
list.add(new Fragment1());
list.add(new Fragment2());
}
@Override
public void onBackPressed() {
if (JCVideoPlayer.backPress()) {
return;
}
super.onBackPressed();
}
//fragment适配器
class MyPapy extends FragmentPagerAdapter{
public MyPapy(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return list.get(position);
}
@Override
public int getCount() {
return list.size();
}
}
}
布局
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.xjq.lianxi.Zhan_Activity">
<fm.jiecao.jcvideoplayer_lib.JCVideoPlayerStandard
android:id="@+id/js"
android:layout_width="match_parent"
android:layout_height="300dp">
</fm.jiecao.jcvideoplayer_lib.JCVideoPlayerStandard>
<RadioGroup
android:id="@+id/rg"
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal"
>
<RadioButton
android:id="@+id/rb1"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:button="@null"
android:text="简介"
android:gravity="center"
/>
<RadioButton
android:id="@+id/rb2"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:button="@null"
android:text="评论"
android:gravity="center"
/>
</RadioGroup>
<android.support.v4.view.ViewPager
android:id="@+id/zhan_vp"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
</LinearLayout>
简介Fragment
public class Fragment1 extends Fragment implements IShouView {
public int cont;
@BindView(R.id.f1_tv)
TextView f1Tv;
@BindView(R.id.f1_rv)
RecyclerView f1Rv;
Unbinder unbinder;
public ShowPresenter presenter;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = View.inflate(getContext(), R.layout.fragm_1, null);
presenter = new ShowPresenter(this);
presenter.ShowXiang(cont);
Intent intent = getActivity().getIntent();
cont = intent.getIntExtra("pnum", 0);
unbinder = ButterKnife.bind(this, view);
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
@Override
public void onBar(ShouBean bean) {
}
@Override
public void onXiang(XiangBean bean) {
cont = bean.getRet().getPnum();
f1Tv.setText(bean.getRet().getList().get(8).getDescription());
f1Rv.setLayoutManager(new GridLayoutManager(getActivity(),2));
XiangAdapter adapter = new XiangAdapter(getActivity(),bean);
f1Rv.setAdapter(adapter);
}
}
简介的布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:id="@+id/f1_tv"
android:layout_width="match_parent"
android:layout_height="100dp"
android:text="电影详解"
/>
<android.support.v7.widget.RecyclerView
android:id="@+id/f1_rv"
android:layout_width="match_parent"
android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
</LinearLayout>
评价的Fragment就不写了
最后的配置和依赖我也不写了,说一下jiecaovoideoplayer的配置,点击下面的连接详细看吧