视频展示与图片切换

布局

主页面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();
        }
    }
}







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值