布局
主页面MainActivity
<?xml version="1.0" encoding="utf-8"?>
<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=".MainActivity">
<com.viewpagerindicator.TabPageIndicator
android:id="@+id/titles"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="match_parent"></android.support.v4.view.ViewPager>
</LinearLayout>
图片展示页面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
图片页子布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:face="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="horizontal"
>
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/imgtou1"
android:layout_marginTop="5dp"
android:layout_width="50dp"
android:layout_height="50dp"
face:roundAsCircle="true"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/text4"
android:layout_marginLeft="15dp"
/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/text3"
/>
<com.facebook.drawee.view.SimpleDraweeView
android:layout_width="match_parent"
android:layout_height="300dp"
android:id="@+id/img"
/>
</LinearLayout>
视频展示页面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
视频页子布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:face="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="horizontal"
>
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/imgtou"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginTop="5dp"
face:roundAsCircle="true"
/>
<TextView
android:id="@+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
/>
</LinearLayout>
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<VideoView
android:id="@+id/surface_view"
android:layout_width="match_parent"
android:layout_height="200dp"
/>
</LinearLayout>
代码
主页
import android.os.Bundle;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import com.example.week2demo.ui.adapter.TabPageIndicatorAdapter;
import com.viewpagerindicator.TabPageIndicator;
public class MainActivity extends AppCompatActivity {
private TabPageIndicator mTabPageIndicator;
private ViewPager mVp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
FragmentPagerAdapter adapter = new TabPageIndicatorAdapter(getSupportFragmentManager());
mVp.setAdapter(adapter);
mTabPageIndicator.setViewPager(mVp);
}
private void initView() {
mTabPageIndicator = (TabPageIndicator) findViewById(R.id.titles);
mVp = (ViewPager) findViewById(R.id.vp);
}
}
图片页
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import com.example.week2demo.R;
import com.example.week2demo.bean.ImgBean;
import com.example.week2demo.bean.VideoBean;
import com.example.week2demo.component.DaggerHttpComponent;
import com.example.week2demo.ui.adapter.ImgAdapter;
import com.example.week2demo.ui.base.BaseFragment;
import com.example.week2demo.ui.contract.WeekContract;
import com.example.week2demo.ui.presenter.WeekPresenter;
import java.util.ArrayList;
import java.util.List;
public class ImgFragmet extends BaseFragment<WeekPresenter> implements WeekContract.View {
private List<ImgBean.DataBean> data = new ArrayList<>();
private ImgAdapter imgAdapter;
@Override
public int getContentLayout() {
return R.layout.fragment_img;
}
@Override
public void inject() {
DaggerHttpComponent.builder()
.build()
.inject(this);
}
@Override
public void initView(View view) {
RecyclerView rv = view.findViewById(R.id.rv);
//设置布局管理器
rv.setLayoutManager(new LinearLayoutManager(getContext()));
//加分割线
rv.addItemDecoration(new DividerItemDecoration(getContext(),RecyclerView.VERTICAL));
//设置适配器
imgAdapter = new ImgAdapter(getContext(), data);
rv.setAdapter(imgAdapter);
//先去请求数据
mPresenter.getImage();
}
@Override
public void imgSuccess(List<ImgBean.DataBean> data) {
if (imgAdapter!=null){
imgAdapter.setData(data);
}
}
@Override
public void videoSuccess(List<VideoBean.DataBean> data) {
}
}
视频页
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import com.example.week2demo.R;
import com.example.week2demo.bean.ImgBean;
import com.example.week2demo.bean.VideoBean;
import com.example.week2demo.component.DaggerHttpComponent;
import com.example.week2demo.ui.adapter.VideoAdapter;
import com.example.week2demo.ui.base.BaseFragment;
import com.example.week2demo.ui.contract.WeekContract;
import com.example.week2demo.ui.presenter.WeekPresenter;
import java.util.ArrayList;
import java.util.List;
public class VideoFragment extends BaseFragment<WeekPresenter> implements WeekContract.View{
private List<VideoBean.DataBean> data = new ArrayList<>();
private VideoAdapter videoAdapter;
@Override
public void imgSuccess(List<ImgBean.DataBean> data) {
}
@Override
public int getContentLayout() {
return R.layout.fragment_video;
}
@Override
public void inject() {
DaggerHttpComponent.builder()
.build()
.inject(this);
}
@Override
public void initView(View view) {
RecyclerView rv= view.findViewById(R.id.rv);
//设置布局管理器
rv.setLayoutManager(new LinearLayoutManager(getContext()));
//加分割线
rv.addItemDecoration(new DividerItemDecoration(getContext(),RecyclerView.VERTICAL));
//设置适配器
videoAdapter = new VideoAdapter(getContext(), data);
rv.setAdapter(videoAdapter);
//请求数据
mPresenter.getVideo();
}
@Override
public void videoSuccess(List<VideoBean.DataBean> data) {
if (videoAdapter!=null){
videoAdapter.setData(data);
}
}
}
import com.example.week2demo.bean.ImgBean;
import com.example.week2demo.bean.VideoBean;
import com.example.week2demo.ui.base.BaseContract;
import java.util.List;
public interface WeekContract {
interface View extends BaseContract.BaseView {
void imgSuccess(List<ImgBean.DataBean> data);
void videoSuccess(List<VideoBean.DataBean> data);
}
interface Presenter extends BaseContract.BasePresenter<View> {
void getImage();
void getVideo();
}
}
presenter
import com.example.week2demo.bean.ImgBean;
import com.example.week2demo.bean.VideoBean;
import com.example.week2demo.net.WeekApi;
import com.example.week2demo.ui.base.BasePresenter;
import com.example.week2demo.ui.contract.WeekContract;
import java.util.List;
import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;
public class WeekPresenter extends BasePresenter<WeekContract.View> implements WeekContract.Presenter {
private WeekApi weekApi;
@Inject
public WeekPresenter(WeekApi weekApi) {
this.weekApi = weekApi;
}
@Override
public void getImage() {
weekApi.getImage()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.map(new Function<ImgBean, List<ImgBean.DataBean>>() {
@Override
public List<ImgBean.DataBean> apply(ImgBean imgBean) throws Exception {
return imgBean.getData();
}
}).subscribe(new Consumer<List<ImgBean.DataBean>>() {
@Override
public void accept(List<ImgBean.DataBean> dataBeans) throws Exception {
if (mView != null) {
mView.imgSuccess(dataBeans);
}
}
});
}
@Override
public void getVideo() {
weekApi.getVideo()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.map(new Function<VideoBean, List<VideoBean.DataBean>>() {
@Override
public List<VideoBean.DataBean> apply(VideoBean videoBean) throws Exception {
return videoBean.getData();
}
}).subscribe(new Consumer<List<VideoBean.DataBean>>() {
@Override
public void accept(List<VideoBean.DataBean> dataBeans) throws Exception {
if (mView != null) {
mView.videoSuccess(dataBeans);
}
}
});
}
}
适配器
导航栏适配
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import com.example.week2demo.ui.fragment.ImgFragmet;
import com.example.week2demo.ui.fragment.VideoFragment;
public class TabPageIndicatorAdapter extends FragmentPagerAdapter {
/**
* Tab标题
*/
private static final String[] TITLE = new String[]{"图片", "视频", "另一面", "女人",
"财经", "数码", "情感", "科技"};
public TabPageIndicatorAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
if (position % 2 == 0) {
fragment = new ImgFragmet();
} else {
fragment = new VideoFragment();
}
return fragment;
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return TITLE[position % TITLE.length];
}
@Override
public int getCount() {
return TITLE.length;
}
}
图片适配
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.example.week2demo.R;
import com.example.week2demo.bean.ImgBean;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.backends.pipeline.PipelineDraweeController;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.List;
public class ImgAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private List<ImgBean.DataBean> data;
private LayoutInflater inflater;
public ImgAdapter(Context context, List<ImgBean.DataBean> data) {
this.context = context;
this.data = data;
inflater = LayoutInflater.from(context);
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.img_item, parent, false);
return new ImgViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
ImgViewHolder imgViewHolder = (ImgViewHolder) holder;
ImgBean.DataBean dataBean = data.get(position);
imgViewHolder.imgtou1.setImageURI(dataBean.getProfile_image());
imgViewHolder.text4.setText(dataBean.getName());
imgViewHolder.text3.setText(dataBean.getText());
if (dataBean.isIs_gif()) {
PipelineDraweeController controller =
(PipelineDraweeController) Fresco.newDraweeControllerBuilder()
.setUri(dataBean.getImage0())
.setAutoPlayAnimations(true) //自动播放gif动画
.build();
imgViewHolder.img.setController(controller);
} else {
imgViewHolder.img.setImageURI(dataBean.getImage0());
}
}
@Override
public int getItemCount() {
return data.size();
}
class ImgViewHolder extends RecyclerView.ViewHolder {
private final SimpleDraweeView imgtou1;
private final TextView text4;
private final TextView text3;
private final SimpleDraweeView img;
public ImgViewHolder(View itemView) {
super(itemView);
imgtou1 = itemView.findViewById(R.id.imgtou1);
text4 = itemView.findViewById(R.id.text4);
text3 = itemView.findViewById(R.id.text3);
img = itemView.findViewById(R.id.img);
}
}
public void setData(List<ImgBean.DataBean> list){
if (data!=null){
data.clear();
data.addAll(list);
notifyDataSetChanged();
}
}
}
视频适配
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.VideoView;
import com.example.week2demo.R;
import com.example.week2demo.bean.VideoBean;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.List;
public class VideoAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private List<VideoBean.DataBean> data;
private LayoutInflater inflater;
public VideoAdapter(Context context, List<VideoBean.DataBean> data) {
this.context = context;
this.data = data;
inflater = LayoutInflater.from(context);
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.vedio_item, parent, false);
return new VideoViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
VideoViewHolder videoViewHolder = (VideoViewHolder) holder;
VideoBean.DataBean dataBean = data.get(position);
videoViewHolder.imgtou.setImageURI(dataBean.getProfile_image());
videoViewHolder.text1.setText(dataBean.getText());
videoViewHolder.text2.setText(dataBean.getName());
videoViewHolder.videoView.setVideoPath(dataBean.getVideouri());
videoViewHolder.videoView.start();
}
@Override
public int getItemCount() {
return data.size();
}
class VideoViewHolder extends RecyclerView.ViewHolder {
private final SimpleDraweeView imgtou;
private final TextView text2;
private final TextView text1;
private final VideoView videoView;
public VideoViewHolder(View itemView) {
super(itemView);
imgtou = itemView.findViewById(R.id.imgtou);
text2 = itemView.findViewById(R.id.text2);
text1 = itemView.findViewById(R.id.text1);
videoView = itemView.findViewById(R.id.surface_view);
}
}
public void setData(List<VideoBean.DataBean> list) {
if (data != null) {
data.clear();
data.addAll(list);
notifyDataSetChanged();
}
}
}