原生代码抖音点赞以及评论

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

    <com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer
        android:id="@+id/gsy"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <ImageView
        android:id="@+id/iv_rotate"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="20dp"
        android:layout_marginEnd="20dp"
        android:src="@mipmap/ic_launcher"/>

    <TextView
        android:layout_alignBottom="@+id/iv_rotate"
        android:layout_alignRight="@+id/iv_rotate"
        android:layout_marginBottom="50dp"
        android:layout_marginEnd="3dp"
        android:id="@+id/tv_share"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1.2万"
        android:textColor="@color/white"
        android:textSize="15sp"/>

    <ImageView
        android:src="@mipmap/ic_launcher"
        android:id="@+id/iv_share"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_alignBottom="@+id/tv_share"
        android:layout_alignRight="@+id/tv_share"
        android:layout_marginBottom="30dp"
        android:layout_marginEnd="3dp"/>

    <TextView
        android:id="@+id/tv_collect"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1.8万"
        android:textColor="@color/white"
        android:textSize="15sp"
        android:layout_alignBottom="@+id/iv_share"
        android:layout_alignRight="@+id/tv_share"
        android:layout_marginBottom="40dp" />

    <ImageView
        android:id="@+id/iv_collect"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:src="@mipmap/ic_launcher"
        android:layout_alignBottom="@+id/tv_collect"
        android:layout_alignRight="@+id/tv_collect"
        android:layout_marginBottom="30dp"
        android:layout_marginEnd="3dp"/>

    <TextView
        android:id="@+id/tv_comment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="2.0万"
        android:textColor="@color/white"
        android:textSize="15sp"
        android:layout_alignBottom="@+id/iv_collect"
        android:layout_alignRight="@+id/tv_share"
        android:layout_marginBottom="40dp" />

    <ImageView
        android:id="@+id/iv_comment"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:src="@mipmap/ic_launcher"
        android:layout_alignBottom="@+id/tv_comment"
        android:layout_alignRight="@+id/tv_comment"
        android:layout_marginBottom="30dp"
        android:layout_marginEnd="3dp"/>

    <TextView
        android:id="@+id/tv_like"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="2.0万"
        android:textColor="@color/white"
        android:textSize="15sp"
        android:layout_alignBottom="@+id/iv_comment"
        android:layout_alignRight="@+id/tv_share"
        android:layout_marginBottom="40dp" />

    <ImageView
        android:id="@+id/iv_like"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:src="@mipmap/ic_launcher"
        android:layout_alignBottom="@+id/tv_like"
        android:layout_alignRight="@+id/tv_like"
        android:layout_marginBottom="30dp"
        android:layout_marginEnd="3dp" />

    <ImageView
        android:id="@+id/iv_head"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:src="@drawable/ic_mine"
        android:layout_alignBottom="@+id/iv_like"
        android:layout_alignRight="@+id/iv_like"
        android:layout_marginBottom="50dp"/>

    <ImageView
        android:id="@+id/iv_focus"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:src="@mipmap/ic_launcher"
        android:layout_alignTop="@+id/iv_head"
        android:layout_alignRight="@+id/iv_head"
        android:layout_marginEnd="4dp"
        android:layout_marginTop="20dp"/>


    <TextView
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:id="@+id/tv_marquee"
        android:text="阿斯顿建瓯哇"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:marqueeRepeatLimit="marquee_forever"
        android:textSize="15sp"
        android:textColor="@color/white"
        android:layout_alignParentBottom="true"
        android:layout_marginStart="20dp"
        android:layout_marginBottom="20dp"/>

    <TextView
        android:id="@+id/tv_caption"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:singleLine="true"
        android:text="发发发"
        android:textColor="@color/white"
        android:layout_alignBottom="@+id/tv_marquee"
        android:layout_marginBottom="20dp"
        android:layout_marginStart="20dp"/>

    <TextView
        android:id="@+id/tv_user"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="顶顶顶"
        android:textSize="20sp"
        android:textColor="@color/white"
        android:layout_alignBottom="@+id/tv_caption"
        android:layout_marginBottom="20dp"
        android:layout_marginStart="20dp"/>


        <ImageView
            android:id="@+id/iv_locate"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:src="@mipmap/ic_launcher"
            android:layout_alignBottom="@+id/tv_user"
            android:layout_marginBottom="30dp"
            android:layout_marginStart="20dp"/>

        <TextView
            android:id="@+id/tv_locate"
            android:text="1231231"
            android:textColor="@color/white"
            android:layout_alignLeft="@+id/iv_locate"
            android:layout_alignTop="@+id/iv_locate"
            android:layout_marginTop="5dp"
            android:layout_marginStart="30dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

    <LinearLayout
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <ImageView
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            android:id="@+id/iv_full"
            android:src="@mipmap/ic_launcher"
            android:layout_width="30dp"
            android:layout_height="30dp"/>
        <TextView
            android:text="全屏播放"
            android:textSize="20sp"
            android:textColor="@color/white"
            android:layout_marginStart="10dp"
            app:layout_constraintLeft_toRightOf="@id/iv_full"
            app:layout_constraintTop_toTopOf="@id/iv_full"
            app:layout_constraintBottom_toBottomOf="@id/iv_full"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>

    <RelativeLayout
        android:id="@+id/cl_comment"

        android:layout_alignParentBottom="true"
        android:background="@color/white"
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp_300">
        <TextView
            android:id="@+id/tv_say"
            android:text="大家都来说说"
            android:layout_margin="20dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <TextView

            android:text="不吃学习的苦,就吃生活的苦"
            android:textColor="@color/pink"
            android:layout_alignTop="@+id/tv_say"
            android:layout_alignLeft="@+id/tv_say"
            android:layout_marginStart="100dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <ImageView
            android:id="@+id/iv_close"
            android:src="@drawable/baseline_close_24"
            android:background="@drawable/shape_tuijian_add"
            android:layout_alignTop="@+id/tv_say"
            android:layout_alignParentRight="true"
            android:layout_marginEnd="30dp"
            android:layout_marginRight="@dimen/dp_20"
            android:layout_width="@dimen/dp_30"
            android:layout_height="@dimen/dp_30"/>
        <TextView
            android:id="@+id/tv_commentcount"
            android:text="40条评论"
            android:textColor="@color/pink"
            android:background="@drawable/shape_tuijian_dingwei"
            android:layout_alignTop="@+id/tv_say"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="30dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/rv_comment"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignTop="@+id/tv_commentcount"
            android:layout_marginTop="20dp"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="60dp"
            />
        <LinearLayout
            android:layout_alignParentBottom="true"
            android:id="@+id/cl_input_commet"
            app:layout_constraintBottom_toBottomOf="parent"
            android:background="@drawable/shape_tuijian_dingwei"
            android:layout_width="match_parent"
            android:layout_height="@dimen/dp_60">
            <EditText
                android:id="@+id/et_input_commet"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                android:layout_marginLeft="@dimen/dp_10"
                android:layout_width="@dimen/dp_300"
                android:layout_height="wrap_content"/>
            <ImageView
                android:layout_marginStart="20dp"
                android:layout_gravity="center_vertical"
                android:id="@+id/iv_send_commet"
                app:layout_constraintTop_toTopOf="parent"
                android:src="@drawable/baseline_send_24"
                android:layout_width="@dimen/dp_30"
                android:layout_height="@dimen/dp_30"/>
        </LinearLayout>

    </RelativeLayout>
</RelativeLayout>

相对布局里的抖音控件以及抖音视频

package com.bw.zy3.Fragment;

import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.BounceInterpolator;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.blankj.utilcode.util.SPUtils;
import com.bw.zy3.Adapter.MyPlAdapter;
import com.bw.zy3.Adapter.MyVideoAdapter;
import com.bw.zy3.Entity.PlEntity;
import com.bw.zy3.Entity.VideoEntity;
import com.bw.zy3.R;
import com.bw.zy3.UI.DouyinLinearLayoutManager;
import com.bw.zy3.ViewModel.TuijianViewModel;
import com.bw.zy3.databinding.FragmentABinding;
import com.bw.zy3.databinding.FragmentCBinding;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.listener.OnItemChildClickListener;
import com.google.gson.Gson;
import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;

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

import okhttp3.MediaType;
import okhttp3.RequestBody;

public class TuijianFragment extends Fragment {

    FragmentCBinding binding;
    TuijianViewModel viewModel=new TuijianViewModel();
    private List<VideoEntity.DataBean> list=new ArrayList<>();
    private MyVideoAdapter adapter;
    private MyPlAdapter plAdapter;
    private List<PlEntity.DataBean> pllist=new ArrayList<>();
    TextView tv_comment;

    public static TuijianFragment newInstance() {
        TuijianFragment fragment = new TuijianFragment();
        Bundle args = new Bundle();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        binding = DataBindingUtil.inflate(getLayoutInflater(),R.layout.fragment_c,container,false);
        adapter=new MyVideoAdapter();
        DouyinLinearLayoutManager douyinLinearLayoutManager=new DouyinLinearLayoutManager(getActivity());
        binding.rv.setLayoutManager(douyinLinearLayoutManager);
        binding.rv.setAdapter(adapter);
        viewModel.getVideoData(15,10);

        viewModel.liveData.observe(getActivity(), videoEntity -> {
            if (videoEntity.getCode()==200){
                list.addAll(videoEntity.getData());
                adapter.getData().addAll(list);
                adapter.notifyDataSetChanged();
            }
        });

        binding.rv.setOnScrollChangeListener((v, scrollX, scrollY, oldScrollX, oldScrollY) -> {
            int firstVisibleitemPosition=douyinLinearLayoutManager.findFirstVisibleItemPosition();
            StandardGSYVideoPlayer standardGSYVideoPlayer= (StandardGSYVideoPlayer) adapter.getViewByPosition(firstVisibleitemPosition,R.id.gsy);
            standardGSYVideoPlayer.startPlayLogic();
        });

        adapter.addChildClickViewIds(R.id.iv_focus,R.id.iv_like,R.id.iv_comment,R.id.iv_collect,R.id.iv_share,R.id.iv_close,R.id.iv_send);
        adapter.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_like:
                        like(position);
                        break;
                    case R.id.iv_comment:
                        comment(position);
                        break;
                    case R.id.iv_close:
                        close(position);
                        break;
                    case R.id.iv_send:
                        sendcomment(position);
                        break;
                    case R.id.iv_collect:
                        break;
                    case R.id.iv_share:
                        break;
                }
            }
        });
        return binding.getRoot();
    }

    private void sendcomment(int position) {
        EditText rd_plcontent= (EditText) adapter.getViewByPosition(position,R.id.ed_pl_content);
        String msg = rd_plcontent.getText().toString();
        int id = adapter.getData().get(position).getId();
        if (!TextUtils.isEmpty(msg)) {
            Map<String,Object> map=new HashMap<>();
            map.put("msg",msg);
            map.put("videoId",id);
            String json=new Gson().toJson(map);
            RequestBody requestBody=RequestBody.create(MediaType.parse("application/json;charset=utf-8"),json);
            viewModel.getSendPl(requestBody);
            rd_plcontent.setText("");
        }

        //置顶功能
        PlEntity.DataBean dataBean=new PlEntity.DataBean();
        dataBean.setMsg(msg);
        dataBean.setIcon(SPUtils.getInstance().getString("icon"));
        dataBean.setUsername(SPUtils.getInstance().getString("username"));
        plAdapter.getData().add(dataBean);
        plAdapter.addData(0,dataBean);
        plAdapter.notifyDataSetChanged();

        viewModel.liveData6.observe(this, plEntity -> {
            if (plEntity.getCode()==200){
                Toast.makeText(getActivity(), "发表评论成功", Toast.LENGTH_SHORT).show();
            }
        });
    }

    private void close(int position) {
        //隐藏评论
        ConstraintLayout constraintLayout = (ConstraintLayout) adapter.getViewByPosition(position,R.id.pl);
        constraintLayout.setVisibility(View.GONE);
        //动画
        Animation animation= AnimationUtils.loadAnimation(getActivity(),R.anim.out);
        animation.setInterpolator(new BounceInterpolator());
        constraintLayout.startAnimation(animation);
    }

    private void comment(int position) {
        //点击显示评论
        ConstraintLayout constraintLayout= (ConstraintLayout) adapter.getViewByPosition(position,R.id.pl);
        constraintLayout.setVisibility(View.VISIBLE);
        //动画
        Animation animation=AnimationUtils.loadAnimation(getActivity(),R.anim.in);
        animation.setInterpolator(new BounceInterpolator());
        constraintLayout.startAnimation(animation);

        int id = adapter.getData().get(position).getId();
        viewModel.getPl(id);

        plAdapter=new MyPlAdapter(R.layout.item_comment);
        RecyclerView rv_pl= (RecyclerView) adapter.getViewByPosition(position,R.id.rv_pl);
        rv_pl.setLayoutManager(new LinearLayoutManager(getActivity()));
        rv_pl.setAdapter(plAdapter);

        tv_comment= (TextView) adapter.getViewByPosition(position,R.id.tv_comment);

        viewModel.liveData5.observe(this, plEntity -> {
            if (plEntity.getCode()==200){
                pllist.clear();
                plAdapter.getData().clear();
                pllist.addAll(plEntity.getData());
                plAdapter.getData().addAll(pllist);
                tv_comment.setText(plEntity.getData().size()+"条评论");
                plAdapter.notifyDataSetChanged();
            }
        });
    }

    private void like(int position) {
        VideoEntity.DataBean dataBean = adapter.getData().get(position);
        int id = dataBean.getId();

        //图片
        ImageView iv_like= (ImageView) adapter.getViewByPosition(position,R.id.iv_like);
        TextView tv_like= (TextView) adapter.getViewByPosition(position,R.id.tv_like);
        if (dataBean.getDianzan()==0){
            viewModel.getlike(id);
            iv_like.setImageResource(R.drawable.baseline_favorite_24);
            //缩放动画
            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();

            //文字
            int like_count = dataBean.getLike_count();
            like_count++;
            dataBean.setLike_count(like_count);
            tv_like.setText(like_count+"");
            dataBean.setDianzan(1);
            viewModel.liveData3.observe(this, resultEntity -> {
                if (resultEntity.getCode()==200){
                    Toast.makeText(getActivity(), "点赞成功", Toast.LENGTH_SHORT).show();
                }
            });
        }else {
            viewModel.getnolike(position);
            int like_count = dataBean.getLike_count();
            like_count--;
            dataBean.setLike_count(like_count);
            tv_like.setText(like_count+"");
            iv_like.setImageResource(R.drawable.baseline_favorite_border_24);
            dataBean.setDianzan(0);
            viewModel.liveData4.observe(this, resultEntity -> {
                if (resultEntity.getCode()==200){
                    Toast.makeText(getActivity(), "取消点赞成功", Toast.LENGTH_SHORT).show();
                }
            });
        }
    }

    private void focus(int position) {
        VideoEntity.DataBean dataBean = adapter.getData().get(position);
        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);
        ImageView iv_focus= (ImageView) adapter.getViewByPosition(position,R.id.iv_focus);
        if (dataBean.getGuanzhu()==0){
            viewModel.getFocus(requestBody);
            //图片
            iv_focus.setImageResource(R.drawable.baseline_check_24);
            iv_focus.setBackground(getContext().getDrawable(R.drawable.shape_tuijian_quan_jin));
            //动画
            ObjectAnimator objectAnimator= ObjectAnimator.ofFloat(iv_focus,"alpha",1,0);
            objectAnimator.setDuration(2000);
            objectAnimator.start();
            dataBean.setGuanzhu(1);
            viewModel.liveData1.observe(this, resultEntity -> {
                if (resultEntity.getCode()==200) {
                    Toast.makeText(getActivity(), "关注成功", Toast.LENGTH_SHORT).show();
                }
            });

        }else {
            viewModel.getNofocus(requestBody);
            //图片
            iv_focus.setImageResource(R.drawable.baseline_add_circle_outline_24);
            iv_focus.setBackground(getContext().getDrawable(R.drawable.shape_tuijian_add));
            //动画
            ObjectAnimator objectAnimator= ObjectAnimator.ofFloat(iv_focus,"alpha",0,1);
            objectAnimator.setDuration(2000);
            objectAnimator.start();
            dataBean.setGuanzhu(0);
            viewModel.liveData2.observe(this, resultEntity -> {
                if (resultEntity.getCode()==200){
                    Toast.makeText(getActivity(), "取消关注成功", Toast.LENGTH_SHORT).show();
                }
            });
        }
    }
}

//评论以及抖音点赞主页面布局等等

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React Native 是一个用于构建移动应用的开源框架,它允许开发者使用 JavaScript 和 React 的知识来构建原生移动应用。通过使用 React Native,开发者可以在不同平台上共享代码,并且可以访问设备的原生功能,例如相机、位置服务和推送通知等。 在 React Native 中,原生代码分析是指开发者需要编写一些原生代码来处理特定的功能,例如需要调用 Android 或 iOS 平台特定的 API 来实现某些功能。在 React Native 中,开发者经常需要在 JavaScript 代码原生代码之间进行交互,这就需要进行原生代码分析。 在进行 React Native 原生代码分析时,开发者需要了解不同平台的编程语言和工具,例如 Android 平台需要使用 Java 或 Kotlin 进行编码,iOS 平台需要使用 Objective-C 或 Swift 进行编码。开发者需要深入了解各个平台的相关知识,并且需要在 React Native 应用中集成原生模块时,需要编写相应的原生代码。 另外,开发者需要了解如何在 React Native 代码中调用原生代码,以及如何在原生代码中调用 React Native 模块。这需要开发者对跨平台应用程序开发有一定的了解,以便能够在 React Native 中进行原生代码分析。 总的来说,React Native 的原生代码分析需要开发者掌握跨平台开发的知识和技能,同时还需要对各个平台的原生开发有一定的了解,这样才能够高效地在 React Native 应用中进行原生代码分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值