视频播放,关注和点赞练习与实践

package com.bw.daymvvm1211.fragment;

import android.os.Bundle;

import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment;
import androidx.viewpager2.widget.ViewPager2;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.bw.daymvvm1211.R;
import com.bw.daymvvm1211.adapter.FragmentAdapter;
import com.bw.daymvvm1211.adapter.MyTab;
import com.bw.daymvvm1211.databinding.FragmentHomeBinding;
import com.bw.daymvvm1211.fragment.guanzhu.GuanZhuFragment;
import com.bw.daymvvm1211.fragment.shop.ShopFragment;
import com.bw.daymvvm1211.fragment.tuijian.TuiJianFragment;
import com.flyco.tablayout.listener.CustomTabEntity;
import com.flyco.tablayout.listener.OnTabSelectListener;

import java.util.ArrayList;
import java.util.List;

public class HomeFragment extends Fragment {
    public List<Fragment> list = new ArrayList<>();
    public FragmentHomeBinding fragmentHomeBinding;
    public FragmentAdapter fragmentAdapter;
    public ArrayList<CustomTabEntity> list_tab = new ArrayList<>();

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        fragmentHomeBinding = DataBindingUtil.inflate(inflater,R.layout.fragment_home,container,false);

//        list.add(new ShopFragment());
//        list.add(new GuanZhuFragment());
//        list.add(new TuiJianFragment());
        list.add(ShopFragment.newInstance());
        list.add(GuanZhuFragment.newInstance());
        list.add(TuiJianFragment.newInstance());
        fragmentAdapter = new FragmentAdapter(getActivity(),list);
        fragmentHomeBinding.viewPager2.setAdapter(fragmentAdapter);

        list_tab.add(new MyTab("商城",0,0));
        list_tab.add(new MyTab("关注",0,0));
        list_tab.add(new MyTab("推荐",0,0));
        fragmentHomeBinding.commonTabLayout.setTabData(list_tab);

        fragmentHomeBinding.commonTabLayout.setOnTabSelectListener(new OnTabSelectListener() {
            @Override
            public void onTabSelect(int position) {
                fragmentHomeBinding.viewPager2.setCurrentItem(position);
            }

            @Override
            public void onTabReselect(int position) {
            }
        });

        fragmentHomeBinding.viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);
                fragmentHomeBinding.commonTabLayout.setCurrentTab(position);
            }
        });

        return fragmentHomeBinding.getRoot();
    }

    public static HomeFragment newInstance(){
        Bundle bundle = new Bundle();
        HomeFragment homeFragment = new HomeFragment();
        //setArguments() 方法是 Fragment 中用于设置参数的方法,
        // 它接收一个 Bundle 对象作为参数,用于存储 Fragment 实例所需的参数
        homeFragment.setArguments(bundle);
        return homeFragment;
    }
}
package com.bw.daymvvm1211.fragment.tuijian;

import android.animation.ObjectAnimator;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import androidx.lifecycle.Observer;

import com.bw.daymvvm1211.UI.DYLinnerLayoutManager;
import com.bw.daymvvm1211.R;
import com.bw.daymvvm1211.adapter.MyTuiJIanAdapter;
import com.bw.daymvvm1211.databinding.FragmentTuiJianBinding;
import com.bw.daymvvm1211.entity.DianZanEntity;
import com.bw.daymvvm1211.entity.GuanZhuEntity;
import com.bw.daymvvm1211.view.BaseMVVMFragment;
import com.google.gson.Gson;
import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;

import java.util.HashMap;
import java.util.Map;
import okhttp3.MediaType;
import okhttp3.RequestBody;

public class TuiJianFragment extends BaseMVVMFragment<FragmentTuiJianBinding,TuiJIanViewModel> {
    private MyTuiJIanAdapter myTuiJIanAdapter;
    public static TuiJianFragment newInstance(){
        Bundle bundle = new Bundle();
        TuiJianFragment tuiJianFragment = new TuiJianFragment();
        tuiJianFragment.setArguments(bundle);
        return tuiJianFragment;
    }

    @Override
    protected Class<TuiJIanViewModel> getViewModel() {
        return TuiJIanViewModel.class;
    }

    @Override
    protected int bindLayout() {
        return R.layout.fragment_tui_jian;
    }

    @Override
    protected void initData() {
        viewModel.getTuiJIanVideoData(9,10);
    }

    @Override
    protected void initView() {
        myTuiJIanAdapter = new MyTuiJIanAdapter();
        DYLinnerLayoutManager dyLinnerLayoutManager = new DYLinnerLayoutManager(getContext());
        viewDataBinding.recyclerView.setLayoutManager(dyLinnerLayoutManager);
        viewDataBinding.recyclerView.setAdapter(myTuiJIanAdapter);

        //自动播放
        viewDataBinding.recyclerView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
            @Override
            public void onScrollChange(View view, int i, int i1, int i2, int i3) {

                int firstVisibleItemPosition = dyLinnerLayoutManager.findFirstVisibleItemPosition();
                StandardGSYVideoPlayer standardGSYVideoPlayer = (StandardGSYVideoPlayer)myTuiJIanAdapter.getViewByPosition(firstVisibleItemPosition,R.id.gsy);
                //自动播放
                standardGSYVideoPlayer.startPlayLogic();
            }
        });

        viewModel.TuiJIanVideoLiveData.observe(this, videoTuiJIanEntity -> {
            if(videoTuiJIanEntity.getCode() == 200){
                myTuiJIanAdapter.getData().addAll(videoTuiJIanEntity.getData());
                myTuiJIanAdapter.notifyDataSetChanged();
            }
        });



        viewModel.GuanZhuVideoLiveData.observe(this, new Observer<GuanZhuEntity>() {
            @Override
            public void onChanged(GuanZhuEntity guanZhuEntity) {
                if(guanZhuEntity.getCode() == 200){
                    Toast.makeText(getContext(), "关注成功", Toast.LENGTH_SHORT).show();
                }else{
                    Toast.makeText(getContext(), "关注失败", Toast.LENGTH_SHORT).show();
                }
            }
        });

        viewModel.DianZanVideoLiveData.observe(this, new Observer<DianZanEntity>() {
            @Override
            public void onChanged(DianZanEntity dianZanEntity) {
                if(dianZanEntity.getCode() == 200){
                    Toast.makeText(getContext(), "点赞成功", Toast.LENGTH_SHORT).show();
                }else{
                    Toast.makeText(getContext(), "点赞失败", Toast.LENGTH_SHORT).show();
                }
            }
        });

        myTuiJIanAdapter.addChildClickViewIds(R.id.iv_add,R.id.iv_dianzan,R.id.iv_shoucang,R.id.iv_fenxiang,R.id.iv_tuijian);
        myTuiJIanAdapter.setOnItemChildClickListener((adapter, view, position) -> {
            switch (view.getId()){
                case R.id.iv_add:
                    guancha(position);
                    break;
                case R.id.iv_dianzan:
                    dianzan(position);
                    break;
            }
        });
    }
    public void guancha(int position){
        String authname = myTuiJIanAdapter.getData().get(position).getAuthname();
        Map<String,String> map = new HashMap<>();
        map.put("authname",authname);
        String json = new Gson().toJson(map);
        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), json);
        viewModel.getGuanZhuVideoData(requestBody);

        //图片变化
        ImageView iv_add = (ImageView) myTuiJIanAdapter.getViewByPosition(position, R.id.iv_add);
        iv_add.setImageResource(R.drawable.ic_action_duigou);
        iv_add.setBackground(getContext().getDrawable(R.drawable.shape_tuijian_add));

        //动画
        ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(iv_add,"alpha",1,0);
        objectAnimator.setDuration(2000);
        objectAnimator.start();
    }

    private void dianzan(int position) {
        ImageView iv_add = (ImageView) myTuiJIanAdapter.getViewByPosition(position, R.id.iv_dianzan);
        iv_add.setImageResource(R.drawable.ic_action_aixin2);

        //动画
        ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(iv_add,"alpha",1,0);
        objectAnimator.setDuration(2000);
        objectAnimator.start();
    }
}

package com.bw.daymvvm1211.fragment.tuijian;

import com.bw.daymvvm1211.entity.DianZanEntity;
import com.bw.daymvvm1211.entity.GuanZhuEntity;
import com.bw.daymvvm1211.entity.VideoTuiJIanEntity;
import com.bw.daymvvm1211.model.BaseModel;

import io.reactivex.Observable;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.Field;

public class TuiJIanModel extends BaseModel {
    public Observable<VideoTuiJIanEntity> TuiJIanVideo(int currentPage,int pageSize){
        return api.TuiJIanVideo(currentPage, pageSize);
    }

    public Observable<GuanZhuEntity> guanzhu(RequestBody requestBody){
        return api.guanzhu(requestBody);
    }

    public Observable<DianZanEntity> dianzan(int videoId){
        return api.dianzan(videoId);
    }
}

package com.bw.daymvvm1211.fragment.tuijian;

import androidx.lifecycle.MutableLiveData;

import com.bw.daymvvm1211.entity.DianZanEntity;
import com.bw.daymvvm1211.entity.GuanZhuEntity;
import com.bw.daymvvm1211.entity.VideoTuiJIanEntity;
import com.bw.daymvvm1211.viewmodel.BaseViewModel;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import okhttp3.RequestBody;

public class TuiJIanViewModel extends BaseViewModel<TuiJIanModel> {
    public MutableLiveData<VideoTuiJIanEntity> TuiJIanVideoLiveData = new MutableLiveData<>();
    public MutableLiveData<GuanZhuEntity> GuanZhuVideoLiveData = new MutableLiveData<>();
    public MutableLiveData<DianZanEntity> DianZanVideoLiveData = new MutableLiveData<>();
    @Override
    public TuiJIanModel createRepo() {
        return new TuiJIanModel();
    }

    public void getTuiJIanVideoData(int currentPage,int pageSize ){
        repo.TuiJIanVideo(currentPage,pageSize)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<VideoTuiJIanEntity>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                    }

                    @Override
                    public void onNext(VideoTuiJIanEntity videoTuiJIanEntity) {
                        TuiJIanVideoLiveData.postValue(videoTuiJIanEntity);
                    }

                    @Override
                    public void onError(Throwable e) {
                    }

                    @Override
                    public void onComplete() {
                    }
                });
    }

    public void getGuanZhuVideoData(RequestBody requestBody){
        repo.guanzhu(requestBody)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<GuanZhuEntity>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                    }

                    @Override
                    public void onNext(GuanZhuEntity guanZhuEntity) {
                        GuanZhuVideoLiveData.postValue(guanZhuEntity);
                    }

                    @Override
                    public void onError(Throwable e) {
                    }

                    @Override
                    public void onComplete() {
                    }
                });
    }

    public void getDianZanData(int videoId){
        repo.dianzan(videoId)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<DianZanEntity>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                    }

                    @Override
                    public void onNext(DianZanEntity dianZanEntity) {
                        DianZanVideoLiveData.postValue(dianZanEntity);
                    }

                    @Override
                    public void onError(Throwable e) {
                    }

                    @Override
                    public void onComplete() {
                    }
                });
    }
}

猜你喜欢

转载自blog.csdn.net/hu1647107413/article/details/135024612