实现一个可以手势调整亮度,声音和进度条的控件

项目开发中,为了实现屏幕亮度、音量和进度条的手势滑动调节,通常需要寻找合适的轮子。本文分享了一种成熟的方法,适用于知乎、B站等应用。通过自定义MyGestureView类并设置Activity,实现滑动手势的流畅体验。布局文件简单,使用ScreenUtil工具类辅助测量屏幕,调用时传入当前Activity即可实现功能。
摘要由CSDN通过智能技术生成

项目开发中当遇到需要我们自己手动实现屏幕滑动,或者某个控件滑动来控制屏幕亮度,声音及进度条等功能的时候我们会找网上的轮子,但是很多时候比较坑,实现起来要尝试多次也不一定能够找到理想的,下面展示一个成熟项目中的手动滑动实现方式,一般知乎,B站,腾讯视频,爱奇艺等都是使用该功能。

最重要的是丝滑,流畅。

下面开始实现步骤一:

自定义一个手势UI类,一般播放器等都是在Controller中实现,这里写个MyGestureView类如下,由于注释写的比较详细,这里不做讲解如下:

/**
 * author : AndyYuan
 * e-mail : 01810788@smg.cn
 * date   : 2021/9/3 000315:06
 * desc   : 手动实现的控制器
 * version: 2.0
 */
public class MyGestureView extends FrameLayout implements Handler.Callback {

    //最外层容器
    private LinearLayout container;
    //显示进度百分比
    private TextView tvPercent;
    //百分比进度条
    private ProgressBar pbPercent;
    private Handler handler;
    //手势监听音量
    private GestureDetector gestureDetector;
    private AudioManager audioManager;
    private WindowManager windowManager;
    //当前声音
    private int nowVolume = -1;
    //当前的屏幕亮度
    private float mBrightness;
    protected boolean isFullScreen = false;
    private int currentDuration = 0;
    private int mSeekPosition;
    //控制屏幕手势
    private boolean mFirstTouch;
    private boolean mChangePosition;
    private boolean mChangeBrightness;
    private boolean mChangeVolume;
    //当前界面
    private Activity context;
    //seekBar最大进度
    private final int SEEK_MAX = 100;
    //控制条自动隐藏时间
    private final int DEFAULT_TIME = 5 * 1000;
    //隐藏控制条
    private final int FADE_OUT = 1;
    //隐藏快进框
    private final int DIALOG_TIME = 3 * 1000;
    private final int FADE_DIALOG = 2;


    public MyGestureView(Context context) {
        super(context);
        initView(context);
    }

    public MyGestureView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initView(context);
    }

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

    public void initView(Context context) {
        LayoutInflater.from(context).inflate(R.layout.gesture_layout, this);
        container = findViewById(R.id.center_container);
        tvPercent = findViewById(R.id.tv_percent);
        pbPercent = findViewById(R.id.pro_percent);
        handler = new Handler(this);
        pbPercent.setMax(SEEK_MAX);
    }

    public void setActivity(Activity activity) {
        this.context &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值