#Api
#RetrofitManager
public class RetrofitManager {
//私有化构造
private RetrofitManager(){}
//声明变量
private static RetrofitManager retrofitManager=null;
//对外提供接口
public static RetrofitManager getInstance(){
if(retrofitManager==null){
retrofitManager=new RetrofitManager();
}
return retrofitManager;
}
private Retrofit mretrofit;
private Retrofit getRetrofit(){
if(mretrofit==null){
mretrofit=createRetrofit();
}
return mretrofit;
}
public Retrofit createRetrofit(){
OkHttpClient okHttpClient=new OkHttpClient.Builder()
.writeTimeout(5, TimeUnit.MINUTES)
.connectTimeout(5, TimeUnit.MINUTES)
.readTimeout(5,TimeUnit.MINUTES)
//日志拦截器
.addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
.build();
mretrofit=new Retrofit.Builder()
.client(okHttpClient)
.baseUrl("http://10.161.9.80:7012")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
return mretrofit;
}}
//增加token拦截器
#GlideUtil
public class GlideUtil {
//加载普通图片
public static void loadImage(Context context, String path, ImageView imageView) {
Glide.with(context)
.load(path)
.error(context.getDrawable(R.drawable.ic_launcher_background))
.placeholder(context.getDrawable(R.drawable.ic_launcher_background))
.thumbnail(0.2f)
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageView);
}
//加载圆形图片
public static void loadciecleImage(Context context, String path, ImageView imageView) {
Glide.with(context)
.load(path)
.error(R.drawable.ic_launcher_background)
.placeholder(R.drawable.ic_launcher_background)
.thumbnail(0.2f)
.circleCrop()
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageView);
}
//加载圆角图片
public static void loadcornerImage(Context context, String path, ImageView imageView) {
Glide.with(context)
.load(path)
.error(R.drawable.ic_launcher_background)
.placeholder(R.drawable.ic_launcher_background)
.thumbnail(0.2f)
.transform(new RoundedCorners(20))
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageView);
}
#dylinearlayoutManager
public class DYLinearLayoutManager extends LinearLayoutManager {
PagerSnapHelper pagerSnapHelper;
public DYLinearLayoutManager(Context context) {
super(context);
}
public DYLinearLayoutManager(Context context, int orientation, boolean reverseLayout) {
super(context, orientation, reverseLayout);
}
public DYLinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public void onAttachedToWindow(RecyclerView view) {
super.onAttachedToWindow(view);
pagerSnapHelper=new PagerSnapHelper();
pagerSnapHelper.attachToRecyclerView(view);
}
}
#Entity
public static final int VIDEO=0;
public static final int FULL=1;
public static final int LIVE=2;
private int code;
private List<DataBean> data;
private String message;
#适配器
public class MyRecommendAdapter extends BaseMultiItemQuickAdapter<VideoEntity.DataBean, BaseViewHolder> {
public MyRecommendAdapter() {
addItemType(VideoEntity.VIDEO, R.layout.item_video);
addItemType(VideoEntity.FULL, R.layout.item_full);
addItemType(VideoEntity.LIVE, R.layout.item_live);
}
@Override
protected void convert(@NonNull BaseViewHolder baseViewHolder, VideoEntity.DataBean dataBean) {
switch (dataBean.getType()){
case VideoEntity.VIDEO:
break;
case VideoEntity.FULL: {
//通过id获取 找见gsy控件
StandardGSYVideoPlayer standardGSYVideoPlayer = baseViewHolder.getView(R.id.gsy);
//获取视频路径
standardGSYVideoPlayer.setUp(dataBean.getVideopath(), true, "");
//返回按钮隐藏
standardGSYVideoPlayer.getBackButton().setVisibility(View.GONE);
ImageView imageView = new ImageView(getContext());
//加载图
GlideUtil.loadImage(getContext(), dataBean.getVideomainimg(), imageView);
//设置缩略图
standardGSYVideoPlayer.setThumbImageView(imageView);
//处理图片
ImageView iv_heard = baseViewHolder.findView(R.id.iv_heard);
ImageView iv_rotate = baseViewHolder.findView(R.id.iv_rotate);
GlideUtil.loadciecleImage(getContext(), dataBean.getHeadpath(), iv_heard);
GlideUtil.loadciecleImage(getContext(), dataBean.getHeadpath(), iv_rotate);
//属性动画
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(iv_rotate, "Rotation", 0, 360);
//时间间隔
objectAnimator.setDuration(2000);
//插值器
objectAnimator.setInterpolator(new LinearInterpolator());
//重复次数
objectAnimator.setRepeatCount(ValueAnimator.INFINITE);
//播放
objectAnimator.start();
//处理文字
baseViewHolder.setText(R.id.tv_like, dataBean.getLike_count() + "");
baseViewHolder.setText(R.id.tv_user, dataBean.getAuthname() + "");
baseViewHolder.setText(R.id.tv_caption, dataBean.getCaption() + "");
baseViewHolder.setText(R.id.tv_marquee, dataBean.getAuthname() + "创作的作品");
TextView tv_marquee = baseViewHolder.getView(R.id.tv_marquee);
tv_marquee.requestFocus();
}
break;
case VideoEntity.LIVE: {
//通过id获取 找见gsy控件
StandardGSYVideoPlayer standardGSYVideoPlayer = baseViewHolder.getView(R.id.gsy);
//获取视频路径
standardGSYVideoPlayer.setUp(dataBean.getVideopath(), true, "");
//返回按钮隐藏
standardGSYVideoPlayer.getBackButton().setVisibility(View.GONE);
ImageView imageView = new ImageView(getContext());
//加载图
GlideUtil.loadImage(getContext(), dataBean.getVideomainimg(), imageView);
//设置缩略图
standardGSYVideoPlayer.setThumbImageView(imageView);
//处理图片
ImageView iv_heard = baseViewHolder.findView(R.id.iv_heard);
ImageView iv_rotate = baseViewHolder.findView(R.id.iv_rotate);
GlideUtil.loadciecleImage(getContext(), dataBean.getHeadpath(), iv_heard);
GlideUtil.loadciecleImage(getContext(), dataBean.getHeadpath(), iv_rotate);
//属性动画
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(iv_rotate, "Rotation", 0, 360);
//时间间隔
objectAnimator.setDuration(2000);
//插值器
objectAnimator.setInterpolator(new LinearInterpolator());
//重复次数
objectAnimator.setRepeatCount(ValueAnimator.INFINITE);
//播放
objectAnimator.start();
//处理文字
baseViewHolder.setText(R.id.tv_user, dataBean.getAuthname() + "");
baseViewHolder.setText(R.id.tv_caption, dataBean.getCaption() + "");
baseViewHolder.setText(R.id.tv_marquee, dataBean.getAuthname() + "创作的作品");
TextView tv_marquee = baseViewHolder.getView(R.id.tv_marquee);
tv_marquee.requestFocus();
break;
}
}
}
}
RecommendModel
#
RecommendViewModel
#
RecommentFragment
public class RecommentFragment extends BaseFragment<FragmentRecommentBinding,RecommendViewModel> {
MyRecommendAdapter myRecommendAdapter;
public static RecommentFragment newInstance(){
RecommentFragment recommentFragment = new RecommentFragment();
Bundle args = new Bundle();
recommentFragment.setArguments(args);
return recommentFragment;
}
@Override
protected int getLyoutId() {
return R.layout.fragment_recomment;
}
@Override
protected Class<RecommendViewModel> getViewModel() {
return RecommendViewModel.class;
}
@Override
protected void initView() {
mviewModel.getVideo(17,10);
}
@Override
protected void initData() {
myRecommendAdapter=new MyRecommendAdapter();
mviewDataBinding.rvRecommend.setAdapter(myRecommendAdapter);
// mviewDataBinding.rvRecommend.setLayoutManager(new LinearLayoutManager(getContext()));
DYLinearLayoutManager dyLinearLayoutManager=new DYLinearLayoutManager(getContext());
mviewDataBinding.rvRecommend.setLayoutManager(dyLinearLayoutManager);
//自动播放
mviewDataBinding.rvRecommend.setOnScrollChangeListener(new View.OnScrollChangeListener() {
@Override
public void onScrollChange(View view, int i, int i1, int i2, int i3) {
int firstVisibleItemPosition = dyLinearLayoutManager.findFirstVisibleItemPosition();
StandardGSYVideoPlayer standardGSYVideoPlayer= (StandardGSYVideoPlayer) myRecommendAdapter.getViewByPosition(firstVisibleItemPosition,R.id.gsy);
standardGSYVideoPlayer.startPlayLogic();
}
});
myRecommendAdapter.addChildClickViewIds(R.id.iv_focus,R.id.iv_lick,R.id.iv_comment,R.id.iv_collect,R.id.iv_share);
myRecommendAdapter.setOnItemChildClickListener(new OnItemChildClickListener() {
@Override
public void onItemChildClick(@NonNull BaseQuickAdapter adapter, @NonNull View view, int position) {
switch (view.getId()) {
case R.id.iv_focus:
focus(position);
break;
case R.id.iv_lick:
like(position);
break;
case R.id.iv_comment:
break;
case R.id.iv_collect:
break;
}
}
});
}
private void like(int position) {
VideoEntity.DataBean dataBean=myRecommendAdapter.getData().get(position);
int videoId=dataBean.getId();
mviewModel.postLove(videoId);
//图片替换
ImageView iv_like = (ImageView) myRecommendAdapter.getViewByPosition(position, R.id.iv_lick);
if(dataBean.getDianzan()==0){
mviewModel.postLove(videoId);
iv_like.setImageResource(R.drawable.ic_action_xihuan);
//缩放动画
ObjectAnimator scaleX = ObjectAnimator.ofFloat(iv_like, "scaleX", 1, 2, 1);
ObjectAnimator scaleY = ObjectAnimator.ofFloat(iv_like, "scaleY", 1, 2, 1);
AnimatorSet animatorSet=new AnimatorSet();
animatorSet.setDuration(2000);
animatorSet.play(scaleX).with(scaleY);
animatorSet.start();
//处理一下文字
TextView tv_like = (TextView) myRecommendAdapter.getViewByPosition(position, R.id.tv_like);
int like_count=dataBean.getLike_count();
like_count++;
tv_like.setText(like_count+"");
dataBean.setDianzan(1);
}else {
mviewModel.postNoLove(videoId);
iv_like.setImageResource(R.drawable.ic_action_love);
dataBean.setDianzan(0);
}
}
//关注
private void focus(int position) {
String authname=myRecommendAdapter.getData().get(position).getAuthname();
Map<String,String> stringMap=new HashMap<>();
stringMap.put("authname",authname);
String json=new Gson().toJson(stringMap);
RequestBody requestBody=RequestBody.create(MediaType.parse("application/json;charset=utf-8"),json);
//启动mvvm
mviewModel.postFocus(requestBody);
ImageView iv_focus= (ImageView) myRecommendAdapter.getViewByPosition(position,R.id.iv_focus);
iv_focus.setImageResource(R.drawable.ic_action_duigou);
iv_focus.setBackground(getContext().getDrawable(R.drawable.ic_action_gray));
//动画效果
ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(iv_focus,"alpha",1,0);
objectAnimator.setDuration(2000);
objectAnimator.start();
}
@Override
protected void handObserver() {
super.handObserver();
mviewModel.videoLiveData.observe(this, new Observer<VideoEntity>() {
@Override
public void onChanged(VideoEntity videoEntity) {
if(videoEntity.getCode()==200){
List<VideoEntity.DataBean> dataBeans=videoEntity.getData();
myRecommendAdapter.getData().addAll(dataBeans);
myRecommendAdapter.notifyDataSetChanged();
}
}
});
mviewModel.focusLiveData.observe(this, new Observer<ResultEntity>() {
@Override
public void onChanged(ResultEntity resultEntity) {
if(resultEntity.getCode()==200){
Toast.makeText(getContext(), "关注成功", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(getContext(), "关注成功", Toast.LENGTH_SHORT).show();
}
}
});
mviewModel.loveLiveData.observe(this, new Observer<ResultEntity>() {
@Override
public void onChanged(ResultEntity resultEntity) {
if(resultEntity.getCode()==200){
Toast.makeText(getContext(), "点赞成功", Toast.LENGTH_SHORT).show();
}else
{
Toast.makeText(getContext(), "点赞成功", Toast.LENGTH_SHORT).show();
}
}
});
mviewModel.noloveLiveData.observe(this, new Observer<ResultEntity>() {
@Override
public void onChanged(ResultEntity resultEntity) {
if(resultEntity.getCode()==200){
Toast.makeText(getContext(), "取消点赞成功", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(getContext(), "取消点赞失败", Toast.LENGTH_SHORT).show();
}
}
});
}
}
}