MVVM-Day9(直播)

 继Day8

Aroute传值:

ARouter.getInstance()
                            .build(AroutePath.LIVE)
                            .withSerializable("databean",videoAdapter.getData().get(position))
                            .navigation();

接收页面(名字要一样不让报空指针异常):

  @Autowired
    VideoEntity.DataBean databean;

直播页面:

APi接口:

 //关注
    @POST("guanzhu/noguanzhu")
    Observable<ResultEntity> getNofocusData(@Body RequestBody body);

    //礼物
    @GET("gift/json")
    Observable<GiftEntity> getGiftData();

Model层:

package com.bw.day3.MVVM.Live;

import com.bw.day3.MVVM.Base.Entity.GiftEntity;
import com.bw.day3.MVVM.Base.Entity.ResultEntity;
import com.bw.day3.MVVM.Base.Model.BaseModel;

import io.reactivex.Observable;
import okhttp3.RequestBody;

public class LiveModel extends BaseModel {

    public Observable<ResultEntity> getFocusData( RequestBody body){
        return api.getFocusData(body);
    }

    public Observable<GiftEntity> getGiftData(){
        return api.getGiftData();
    }
}

VidewModel层:

package com.bw.day3.MVVM.Live;

import android.util.Log;

import androidx.lifecycle.MutableLiveData;

import com.bw.day3.MVVM.Base.Entity.GiftEntity;
import com.bw.day3.MVVM.Base.Entity.ResultEntity;
import com.bw.day3.MVVM.Base.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 LiveViewModel extends BaseViewModel<LiveModel> {

    public MutableLiveData<ResultEntity> liveData=new MutableLiveData<>();
    public MutableLiveData<GiftEntity> liveData1=new MutableLiveData<>();

    @Override
    protected LiveModel creatModel() {
        return new LiveModel();
    }

    public void postFocus(RequestBody body){
        bModel.getFocusData(body)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<ResultEntity>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(ResultEntity resultEntity) {
                        liveData.postValue(resultEntity);
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    public void getGiftData(){
        bModel.getGiftData()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<GiftEntity>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(GiftEntity giftEntity) {
                        Log.i("zs", "onNext: "+giftEntity.getData().size());
                        liveData1.postValue(giftEntity);
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }
}

直播Activity:

package com.bw.day3.MVVM.Live;

import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.BounceInterpolator;
import android.widget.Toast;

import androidx.recyclerview.widget.GridLayoutManager;

import com.alibaba.android.arouter.facade.annotation.Autowired;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.android.arouter.launcher.ARouter;
import com.bw.day3.MVVM.Adapter.MyGiftAdapter;
import com.bw.day3.MVVM.Base.Entity.GiftEntity;
import com.bw.day3.MVVM.Base.Entity.VideoEntity;
import com.bw.day3.MVVM.Base.Utile.GlideUtil;
import com.bw.day3.MVVM.Base.View.BaseActivity;
import com.bw.day3.MVVM.Const.AroutePath;
import com.bw.day3.R;
import com.bw.day3.databinding.ActivityLiveBinding;
import com.google.gson.Gson;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import okhttp3.MediaType;
import okhttp3.RequestBody;

@Route(path = AroutePath.LIVE)
public class LiveActivity extends BaseActivity<ActivityLiveBinding,LiveViewModel> {

    @Autowired
    VideoEntity.DataBean databean;
    private MyGiftAdapter adapter;
    private List<GiftEntity.DataBean> list=new ArrayList<>();

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

    @Override
    protected int getLayoutid() {
        return R.layout.activity_live;
    }

    @Override
    protected void initView() {
        ARouter.getInstance().inject(this);
        if (databean.getGuanzhu()==1){
            viewDataBinding.tvGuanzhu.setText("粉丝");
            viewDataBinding.tvGuanzhu.setBackground(getDrawable(R.drawable.shape_tuijian_pinglun));
        }
        viewModel.getGiftData();
    }

    @Override
    protected void initData() {
        viewDataBinding.gsyLive.setUp(databean.getVideopath(),true,"");
        viewDataBinding.gsyLive.getBackButton().setVisibility(View.GONE);
        viewDataBinding.gsyLive.getStartButton().setVisibility(View.GONE);
        viewDataBinding.gsyLive.startPlayLogic();
        viewDataBinding.tvUserLive.setText(databean.getAuthname()+"");
        viewDataBinding.tvLikecountLive.setText(databean.getLike_count()+"个点赞");
        GlideUtil.loadciecleImage(this,databean.getHeadpath(),viewDataBinding.ivHeadLive);

        viewDataBinding.tvGuanzhu.setOnClickListener(v -> {
            String authname = databean.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;charset=utf-8"),json);
            viewModel.postFocus(requestBody);
        });

        viewDataBinding.ivGiftLive.setOnClickListener(v -> {
            viewDataBinding.clGiftLive.setVisibility(View.VISIBLE);
            //动画
            Animation animation= AnimationUtils.loadAnimation(LiveActivity.this,R.anim.in);
            animation.setInterpolator(new BounceInterpolator());
            animation.setDuration(2000);
            viewDataBinding.clGiftLive.startAnimation(animation);
        });

        adapter=new MyGiftAdapter(R.layout.view_gift);
        viewDataBinding.rvGiftLive.setLayoutManager(new GridLayoutManager(this,5));
        viewDataBinding.rvGiftLive.setAdapter(adapter);

        adapter.setOnItemClickListener((adapter, view, position) -> {

        });
    }

    @Override
    protected void handObserver() {
        super.handObserver();
        viewModel.liveData.observe(this, resultEntity -> {
            if (resultEntity.getCode()==200){
                Toast.makeText(LiveActivity.this, "关注成功", Toast.LENGTH_SHORT).show();
                viewDataBinding.tvGuanzhu.setText("粉丝");
                viewDataBinding.tvGuanzhu.setBackground(getDrawable(R.drawable.shape_tuijian_pinglun));
                databean.setGuanzhu(1);
            }else {
                Toast.makeText(LiveActivity.this, "关注失败", Toast.LENGTH_SHORT).show();
            }
        });
        viewModel.liveData1.observe(this, giftEntity -> {
            if (giftEntity.getCode()==200){
                list.addAll(giftEntity.getData());
                adapter.getData().addAll(list);
                adapter.notifyDataSetChanged();
            }
        });
    }
}

页面布局:

<?xml version="1.0" encoding="utf-8"?>
<layout 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">

    <data></data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MVVM.Live.LiveActivity">

        <com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer
            android:id="@+id/gsy_live"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/cl_user_live"
            android:layout_width="200dp"
            android:layout_height="60dp"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            android:layout_marginTop="20dp"
            android:layout_marginLeft="5dp"
            android:background="@drawable/shape_tuijian_zhuan">

            <ImageView
                android:id="@+id/iv_head_live"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:src="@mipmap/ic_launcher"
                app:layout_constraintBottom_toBottomOf="@+id/cl_user_live"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="@+id/cl_user_live" />
            <TextView
                android:text="昵称"
                app:layout_constraintTop_toTopOf="@+id/cl_user_live"
                app:layout_constraintLeft_toRightOf="@+id/iv_head_live"
                android:textSize="@dimen/dp_15"
                android:layout_marginLeft="5dp"
                android:textColor="@color/white"
                android:id="@+id/tv_user_live"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
            <TextView
                android:layout_marginLeft="5dp"
                android:text="点赞的数量"
                app:layout_constraintTop_toBottomOf="@+id/tv_user_live"
                app:layout_constraintLeft_toLeftOf="@+id/tv_user_live"
                android:textColor="@color/white"
                android:id="@+id/tv_likecount_live"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
            <TextView
                android:text="关注"
                android:id="@+id/tv_guanzhu"
                android:background="@drawable/shape_tuijian_add"
                app:layout_constraintTop_toTopOf="@+id/cl_user_live"
                app:layout_constraintBottom_toBottomOf="@+id/cl_user_live"
                app:layout_constraintRight_toRightOf="@+id/cl_user_live"
                android:layout_marginRight="10dp"
                android:textColor="@color/white"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>

        </androidx.constraintlayout.widget.ConstraintLayout>
        <androidx.constraintlayout.widget.ConstraintLayout
            app:layout_constraintBottom_toBottomOf="parent"
            android:id="@+id/cl_bottom_live"
            android:layout_width="match_parent"
            android:layout_height="50dp">
            <TextView
                android:id="@+id/tv_input_live"
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                android:layout_marginStart="10dp"
                android:text="说说东西"
                android:textColor="@color/gray"/>
            <ImageView
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                android:layout_marginRight="10dp"
                android:id="@+id/iv_like_live"
                android:src="@drawable/baseline_favorite_24"
                android:layout_width="40dp"
                android:layout_height="40dp"/>
            <ImageView
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:id="@+id/iv_gift_live"
                android:src="@drawable/baseline_card_giftcard_24"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintRight_toLeftOf="@+id/iv_like_live"
                android:layout_marginRight="10dp"/>
            <ImageView
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:id="@+id/iv_car_live"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintRight_toLeftOf="@+id/iv_gift_live"
                android:src="@drawable/baseline_shopping_cart_24"
                android:layout_marginRight="10dp"/>
        </androidx.constraintlayout.widget.ConstraintLayout>
        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/cl_gift_live"
            android:background="@drawable/shape_tuijian_zhuan"
            android:visibility="gone"
            tools:visibility="visible"
            app:layout_constraintBottom_toTopOf="@+id/cl_bottom_live"
            android:layout_width="match_parent"
            android:layout_height="300dp">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/tv_pay_live"
                android:text="充值"
                android:textColor="@color/white"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                android:layout_margin="10dp"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/tv_coin_live"
                android:text="抖币"
                app:layout_constraintTop_toTopOf="@+id/tv_pay_live"
                app:layout_constraintRight_toLeftOf="@+id/tv_pay_live"
                android:textColor="@color/white"
                android:layout_marginEnd="10dp"/>
            <ImageView
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:src="@mipmap/ic_launcher"
                android:id="@+id/iv_selectlogo_live"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                android:layout_margin="10dp"/>
            <ImageView
                android:layout_width="@dimen/dp_40"
                android:layout_height="@dimen/dp_40"
                android:id="@+id/iv_sendgift_live"
                android:src="@drawable/baseline_send_24"
                app:layout_constraintBottom_toBottomOf="@+id/iv_selectlogo_live"
                app:layout_constraintLeft_toRightOf="@+id/iv_selectlogo_live"
                android:layout_marginLeft="10dp"/>
            <androidx.recyclerview.widget.RecyclerView
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:id="@+id/rv_gift_live"
                app:layout_constraintTop_toBottomOf="@+id/tv_pay_live"
                app:layout_constraintBottom_toTopOf="@+id/iv_selectlogo_live"/>
        </androidx.constraintlayout.widget.ConstraintLayout>
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

效果图:

需写适配器:

package com.bw.day3.MVVM.Adapter;

import android.view.View;
import android.widget.ImageView;

import androidx.annotation.NonNull;

import com.bw.day3.MVVM.Base.Entity.GiftEntity;
import com.bw.day3.MVVM.Base.Utile.GlideUtil;
import com.bw.day3.R;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;

public class MyGiftAdapter extends BaseQuickAdapter<GiftEntity.DataBean, BaseViewHolder> {

    public MyGiftAdapter(int layoutResId) {
        super(layoutResId);
    }

    @Override
    protected void convert(@NonNull BaseViewHolder baseViewHolder, GiftEntity.DataBean dataBean) {
        baseViewHolder.setText(R.id.gift_tv,dataBean.getPrice()+"抖币");
        View view = baseViewHolder.getView(R.id.gift_iv);
        GlideUtil.loadImage(getContext(),dataBean.getGiftpath(), (ImageView) view);
    }
}

礼物RecyclerView布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">


    <ImageView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:id="@+id/gift_iv"/>
    <TextView
        tools:text="123"
        android:layout_gravity="center"
        android:layout_margin="10dp"
        android:id="@+id/gift_tv"
        android:textColor="@color/white"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>

调用适配器完成礼物页面;

最终效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值