赞
踩
项目开发中当遇到需要我们自己手动实现屏幕滑动,或者某个控件滑动来控制屏幕亮度,声音及进度条等功能的时候我们会找网上的轮子,但是很多时候比较坑,实现起来要尝试多次也不一定能够找到理想的,下面展示一个成熟项目中的手动滑动实现方式,一般知乎,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 &
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。