当前位置:网站首页>左滑从小窗到大窗口DispatchFrameLayout

左滑从小窗到大窗口DispatchFrameLayout

2022-06-24 03:34:00 赵健zj

DispatchFrameLayout

/* * Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved. */

package com.qisi.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.FrameLayout;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import lombok.Setter;

/** * 【打字弹图】内容容器,设置dispatchTouchEvent监听 * * @author zhaojian * @since 2022-06-15 */
public class DispatchFrameLayout extends FrameLayout {
    
    @Setter
    private OnTouchListener dispatchOnTouchListener;

    /** * 构造函数 * * @param context 上下文 */
    public DispatchFrameLayout(@NonNull Context context) {
    
        super(context);
    }

    /** * 构造函数 * * @param context 上下文 * @param attrs AttributeSet */
    public DispatchFrameLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
    
        super(context, attrs);
    }

    /** * 构造函数 * * @param context 上下文 * @param attrs attrs * @param defStyleAttr defStyleAttr */
    public DispatchFrameLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
    
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
    
        if (dispatchOnTouchListener != null) {
    
            return dispatchOnTouchListener.onTouch(this, ev) || super.dispatchTouchEvent(ev);
        }
        return super.dispatchTouchEvent(ev);
    }
}


    @SuppressLint("ClickableViewAccessibility")
    private void showBigWhenRecyclerViewMove() {
    
        DispatchFrameLayout typingContent = findViewById(R.id.typing_content);
        OnTouchListener dispatchOnTouchListener = new OnTouchListener() {
    

            private boolean isFirstIntercept = false;

            private int dx; // 记录上次dx的距离

            @Override
            public boolean onTouch(View v, MotionEvent event) {
    
                // 只有表情小窗,才拦截事件
                if (event == null || isFirstIntercept || !isExpress() || rotateTransitionListener.isExpand()) {
    
                    return false; // 不处理
                }
                int action = event.getAction();
                if (action == MotionEvent.ACTION_DOWN) {
    
                    dx = (int) event.getX();
                } else if (action == MotionEvent.ACTION_MOVE) {
    
                    final int distance = 10;
                    isFirstIntercept = Math.abs(event.getX() - dx) > distance;
                } else {
    
                    LogUtil.logV(TAG, MSG_DO_NOTHING);
                }
                if (isFirstIntercept) {
    
                    clickLeftButton();
                }
                return isFirstIntercept;
            }
        };
        typingContent.setDispatchOnTouchListener(dispatchOnTouchListener);
    }

请添加图片描述

原网站

版权声明
本文为[赵健zj]所创,转载请带上原文链接,感谢
https://blog.csdn.net/AdrianAndroid/article/details/125367333