继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>
调用适配器完成礼物页面;
最终效果:

655

被折叠的 条评论
为什么被折叠?



