SmallUserWindow视频小窗口-单聊场景

73 阅读1分钟
public class SmallUserWindow extends RelativeLayout {

    private ImageView ivSwitchCamera;
    private PaasPlusRederView ppv;
    private ImageView ivAvatar;
    private TextView tvName;

    private int lastY, lastX, width, height;
    private boolean isClick;
    private boolean canMove = true;
    private Activity activity;
    private OnSmallClickListener listener;

    private boolean isMe = true;

    public SmallUserWindow(Context context) {
        this(context, null);
    }

    public SmallUserWindow(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public SmallUserWindow(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView(context);
    }

    private void initView(Context context) {
        activity = (Activity) context;
        width = ScreenUtils.getScreenWidth(activity);
        height = ScreenUtils.getScreenHeight(activity);
        View view = LayoutInflater.from(context).inflate(R.layout.layout_small_user_window, this);
        view.setBackgroundResource(R.drawable.shape_video_window_bg);
        ivSwitchCamera = view.findViewById(R.id.iv_switch_camera);
        ppv = view.findViewById(R.id.ppv);
        ivAvatar = view.findViewById(R.id.iv_avatar);
        tvName = view.findViewById(R.id.tv_name);

        ivSwitchCamera.setOnClickListener(v -> {
            if (listener != null) {
                listener.onTransCamera();
            }
        });

        if (isMe() && null != UserUtil.getUserUtil(context).getUserData()) {
            String avatarUrl = UserUtil.getUserUtil(context).getUserData().getAvatarUrl();

            GlideShowUtil.showCircleImage(context, ivAvatar, avatarUrl);
            tvName.setText("我");
        }
    }

    /**
     * 是否能拖动
     *
     * @param canMove
     */
    public void setCanMove(boolean canMove) {
        this.canMove = canMove;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                lastX = (int) event.getX();
                lastY = (int) event.getY();
                isClick = true;
                break;
            case MotionEvent.ACTION_MOVE:
                //计算移动的距离
                float offX = event.getX() - lastX;
                float offY = event.getY() - lastY;
                int l, t;

                //移动距离大于10才做移动事件
                if (canMove) {
                    if (Math.abs(offX) > 10 || Math.abs(offY) > 10) {
                        //移动事件,点击事件置为false
                        isClick = false;
                        l = (int) (getLeft() + offX);
                        t = (int) (getTop() + offY);
                        if (l < 0) {
                            l = 0;
                        } else if (l > width - getWidth()) {
                            l = width - getWidth();
                        }

                        if (t < 0) {
                            t = 0;
                        } else if (t > height - getHeight() - ScreenUtils.dip2px(activity,150)) {
                            t = height - getHeight() - ScreenUtils.dip2px(activity,150);
                        }

                        this.layout(l, t, l + getWidth(), t + getHeight());
                    }
                }
                break;
            case MotionEvent.ACTION_UP:
                if (isClick)
                    if (listener != null) {
                        listener.onSmallUserWindowClick();
                        isMe = !isMe;
                    }
                break;
        }
        return true;
    }

    public PaasPlusRederView getRenderView() {
        return ppv;
    }

    public void switchCamera(boolean isCameraOpen) {
        if (isCameraOpen) {
            MeetingManager.getInstance().setPreviewView(ppv);
            ppv.setRenderViewVisibility(true);
            ppv.setVisibility(View.VISIBLE);
            ivSwitchCamera.setVisibility(View.VISIBLE);

            ivAvatar.setVisibility(View.GONE);
            tvName.setVisibility(View.GONE);
        } else {
            MeetingManager.getInstance().stopPreviewView();
            ppv.setRenderViewVisibility(false);
            ppv.setVisibility(View.GONE);
            ivSwitchCamera.setVisibility(View.GONE);

            ivAvatar.setVisibility(View.VISIBLE);
            tvName.setVisibility(View.VISIBLE);
        }
    }

    public boolean isMe() {
        return isMe;
    }

    public void setMe(boolean me) {
        isMe = me;
    }

    public void setOnSmallClickListener(OnSmallClickListener listener) {
        this.listener = listener;
    }

    public interface OnSmallClickListener {
        void onTransCamera();

        void onSmallUserWindowClick();
    }
}