前言
开发记录博客不是讲解使用博客,更多的是各种功能与点子的记录
基本使用
<SeekBar android:layout_width="match_parent" android:layout_height="wrap_content" android:max="200" android:maxHeight="3dp" android:minHeight="3dp" android:progressDrawable="@drawable/seekbar_bg" android:thumb="@drawable/seekbar_thumb_bg"/>
-
android:max="200" 进度最大值
-
android:progressDrawable="@drawable/seekbar_bg" 设置进度条的背景
-
android:thumb="@drawable/seekbar_thumb_bg" 设置进度条上圆点的背景
- setProgress(int value) 设置滑块的位置
- setMax(int value) 设置进度条的最大长度
- setOnSeekBarChangeListener(OnSeekBarChangeListener l)这个主要是监听进度改变 里面包含3个回调方法 onProgressChanged进度条变化 onStartTrackingTouch(SeekBar seekBar) 监听开始拖动滚动条时的操作 onStopTrackingTouch(SeekBar seekBar) 监听停止拖动滚动条的操作
- setSecondaryProgress(int secondaryProgress) 设置缓冲的进度
进度条背景xml
seekbar_bg.xml
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background"> <shape> <solid android:color="#ff51495e"/> </shape> </item> <item android:id="@android:id/secondaryProgress"> <clip> <shape> <solid android:color="#f9062a"/> </shape> </clip> </item> <item android:id="@android:id/progress"> <clip> <shape> <solid android:color="#2db334"/> </shape> </clip> </item> </layer-list>
根据属性解释一下3个背景的对应功能,原则上如果你不需要显示预加载的功能,可以将@android:id/secondaryProgress 设置为透明,或者不写
android:id="@android:id/background" 是没有如何拖动或者设置的背景
android:id="@android:id/secondaryProgress" 是次级进度背景,类似你在看视频的时候,视频的进度条会有预加载的进度.
android:id="@android:id/progress" 是主进度背景,就是你看视频的时候当前看到哪里的进度条背景.
进度条的圆点背景
seekbar_thumb_bg.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <!--获取焦点和没有按下的时候--> <item android:drawable="@drawable/seekbar_thumb_normal" android:state_focused="true" android:state_pressed="false"/> <!--获取焦点但按下的时候--> <item android:drawable="@drawable/seekbar_thumb_pressed" android:state_focused="true" android:state_pressed="true"/> <!--没有获取焦点按下的时候--> <item android:drawable="@drawable/seekbar_thumb_pressed" android:state_focused="false" android:state_pressed="true"/> <!--默认的时候--> <item android:drawable="@drawable/seekbar_thumb_normal"/> </selector>
点子:将进度条竖立起来实现音量调节控件
效果图:
activity布局
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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" android:background="@color/color_black_1" tools:context=".function.setting.system.view.SetScreenTimeoutActivity"> <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="76dp" android:text="@string/off_screen_time" android:textColor="@color/ColorWhite" android:textSize="22sp" android:gravity="center" android:background="@color/black" app:layout_constraintTop_toTopOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent"/> <ImageView android:id="@+id/back" android:layout_width="wrap_content" android:layout_height="0dp" android:src="@mipmap/img_back_arrow" android:paddingLeft="20dp" app:layout_constraintTop_toTopOf="@id/title" app:layout_constraintBottom_toBottomOf="@id/title" app:layout_constraintLeft_toLeftOf="parent"/> <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="100dp" android:src="@drawable/ic_screen_timeout" app:layout_constraintTop_toBottomOf="@id/title" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent"/> <SeekBar android:id="@+id/seek_bar" android:layout_width="300dp" android:layout_height="70dp" android:rotationX="0.5" android:rotationY="0.5" android:rotation="270" android:thumb="@null" android:layout_marginTop="135dp" android:progressDrawable="@drawable/bg_seekbar" android:max="6" app:layout_constraintTop_toBottomOf="@id/icon" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent"/> <ImageView android:id="@+id/add_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_add" android:layout_marginTop="55dp" app:layout_constraintLeft_toLeftOf="@id/seek_bar" app:layout_constraintRight_toRightOf="@id/seek_bar" app:layout_constraintTop_toBottomOf="@id/icon"/> <ImageView android:id="@+id/reduce_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_reduce" android:layout_marginTop="195dp" app:layout_constraintTop_toBottomOf="@id/add_icon" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent"/> <TextView android:id="@+id/current_select_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="340dp" android:textSize="22sp" android:textColor="@color/ColorWhite" app:layout_constraintTop_toBottomOf="@id/icon" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent"/> </androidx.constraintlayout.widget.ConstraintLayout>
这样里有一个需要注意的点,就是高度和宽度其实是互换的关系了.
进度背景
bg_seekbar.xml
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background"> <shape android:shape="rectangle"> <size android:width="300dp" android:height="70dp"/> <solid android:color="#575757"/> <corners android:radius="88dp"/> </shape> </item> <item android:id="@android:id/secondaryProgress"> <clip> <shape> <solid android:color="#575757"/> </shape> </clip> </item> <item android:id="@android:id/progress"> <clip> <shape android:shape="rectangle"> <size android:width="300dp" android:height="70dp"/> <solid android:color="#FFFFFF"/> <corners android:radius="88dp"/> </shape> </clip> </item> </layer-list>