android 打造变化多端的SeekBar(垂直和水平)。压缩包里面有三个android项目源码。都是SeekBar相关。垂直,水平的都有。我博客地址:http://blog.csdn.net/qq_16064871。
2026-01-07 19:00:46 2.03MB SeekBar
1
在Android开发中,SeekBar是一种常用的用户界面组件,它允许用户通过滑动条来选择一个介于最小值和最大值之间的数值。通常情况下,SeekBar是水平排列的,但有时根据设计需求,我们可能需要创建一个垂直方向的SeekBar。本实例将探讨如何在Android中实现一个竖直方向的SeekBar。 ### 1. 垂直SeekBar的需求分析 在某些场景下,如空间有限或布局特殊的设计中,水平SeekBar可能不再适用。例如,在音乐播放应用的音量控制、调整图片亮度或对比度等场景,竖直SeekBar可以提供更好的用户体验。因此,开发者需要能够自定义SeekBar的方向。 ### 2. 自定义View的实现 要创建垂直SeekBar,我们需要创建一个新的自定义View类,继承自Android的SeekBar类,并重写其关键方法,主要是`onMeasure()`和`onDraw()`。 ```java public class VerticalSeekBar extends SeekBar { ... @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(heightMeasureSpec, widthMeasureSpec); setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth()); } @Override protected void onDraw(Canvas canvas) { canvas.rotate(-90, getWidth() / 2, getHeight() / 2); super.onDraw(canvas); } } ``` 这里,`onMeasure()`方法交换了宽度和高度的测量规格,使得原本的水平尺寸变为垂直尺寸。`onDraw()`方法则通过旋转画布使得绘制的SeekBar在视觉上呈现垂直状态。 ### 3. XML布局文件中的应用 在布局XML文件中,我们可以像使用普通SeekBar那样使用这个自定义的VerticalSeekBar,只需将类名指定为我们刚才创建的`VerticalSeekBar`。 ```xml SeekBar android:id="@+id/vertical_seekbar" android:layout_width="wrap_content" android:layout_height="200dp" android:max="100" android:progress="50" /> ``` ### 4. 监听事件处理 与普通SeekBar一样,我们可以通过设置OnSeekBarChangeListener监听滑动事件: ```java VerticalSeekBar verticalSeekBar = findViewById(R.id.vertical_seekbar); verticalSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // 在这里处理进度改变的逻辑 } @Override public void onStartTrackingTouch(SeekBar seekBar) { // 开始滑动时的逻辑 } @Override public void onStopTrackingTouch(SeekBar seekBar) { // 结束滑动时的逻辑 } }); ``` ### 5. 考虑因素 - **触摸事件处理**:由于画布被旋转了,所以触摸事件需要进行相应的转换,以便正确处理滑动操作。 - **样式和主题**:可能需要自定义样式以适应垂直方向,包括滑块、轨道和指示器的位置和大小。 - **兼容性**:确保在不同版本的Android系统上都能正常工作,可能需要针对API版本进行适配。 在实际项目中,`VerticalSeekbar`的实现可能更为复杂,需要处理触摸事件转换、动画效果等问题。这个实例展示了基本思路,具体实现可能需要根据项目需求进行调整。通过自定义View,我们可以灵活地扩展Android原生组件,满足各种定制化需求。
2026-01-06 22:46:20 39KB seekbar
1
在Android开发中,SeekBar是一个非常常用的控件,它允许用户通过滑动来选择一个介于最小值和最大值之间的数值。通常,SeekBar是水平布局的,但有时开发者可能需要创建一个竖向的SeekBar以适应特定的界面设计或用户体验需求。本篇文章将详细探讨如何在Android中实现一个竖向的SeekBar,并介绍相关的知识点。 ### 1. SeekBar的基本用法 我们需要了解Seekbar的基础用法。在XML布局文件中,我们可以这样声明一个SeekBar: ```xml <SeekBar android:id="@+id/seekBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:max="100" /> ``` 这里设置了SeekBar的最大值为100,实际的宽度和高度会根据内容自动调整。 ### 2. 实现竖向SeekBar 由于Android SDK中并未提供直接支持竖向SeekBar的属性,所以我们需要自定义一个View来实现这个功能。创建一个新的Java类,继承自SeekBar: ```java public class VerticalSeekBar extends SeekBar { public VerticalSeekBar(Context context) { super(context); init(); } public VerticalSeekBar(Context context, AttributeSet attrs) { super(context, attrs); init(); } public VerticalSeekBar(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { setOrientation(VERTICAL); // 设置为垂直方向 } } ``` 在构造函数中调用`init()`方法,并在该方法中设置`setOrientation(VERTICAL)`,这样我们就得到了一个竖向的SeekBar。 ### 3. 自定义属性 为了增强可定制性,可以添加自定义属性,例如改变进度条的颜色、厚度等。这需要在res/values/attrs.xml文件中定义新的属性: ```xml ... ``` 然后在VerticalSeekBar类中读取这些属性并应用到 SeekBar 上: ```java @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 获取自定义属性并应用 int progressColor = getProgressDrawable().getColorForState(new int[]{android.R.attr.state_enabled}, 0); int thumbColor = getThumb().getColorForState(new int[]{android.R.attr.state_enabled}, 0); // 根据属性修改进度条和thumb的颜色 ... } ``` ### 4. 使用自定义的竖向SeekBar 现在可以在XML布局文件中使用我们自定义的VerticalSeekBar: ```xml SeekBar android:id="@+id/verticalSeekBar" android:layout_width="wrap_content" android:layout_height="match_parent" app:progressColor="@color/colorPrimary" app:thumbColor="@color/colorAccent" android:max="100" /> ``` ### 5. 监听事件 与常规SeekBar一样,我们可以监听滑动事件来获取当前的进度值: ```java verticalSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // 这里处理进度改变的逻辑 } @Override public void onStartTrackingTouch(SeekBar seekBar) { // 用户开始滑动时的回调 } @Override public void onStopTrackingTouch(SeekBar seekBar) { // 用户结束滑动时的回调 } }); ``` ### 6. 性能优化 考虑到竖向SeekBar可能占用较大的高度,可以考虑在滚动时只绘制可见部分,以提高性能。这可以通过重写`onDraw()`方法中的相关部分实现。 ### 7. 兼容性问题 确保自定义的竖向SeekBar在不同版本的Android系统上表现一致,可能需要处理一些兼容性问题,例如API级别的差异。 通过以上步骤,你就可以在Android项目中使用竖向的SeekBar了。这个控件能够为用户提供直观的数值选择方式,同时增加了界面设计的多样性。记住,自定义视图时,始终关注用户体验和性能优化,以确保最佳的使用效果。
2026-01-06 22:38:25 38KB android SeekBar
1
在Android开发中,SeekBar是一个常用的UI组件,通常用于表示进度条,用户可以通过滑动来调整数值。然而,标准的SeekBar是水平布局的,而在某些特殊设计或者垂直布局的需求下,我们可能需要一个竖直方向的SeekBar。这个"android 竖直SeekBar"项目就是为了解决这样的问题。 在Android SDK中,SeekBar的实现是基于HorizontalScrollView的,因此默认情况下它只能在水平方向上滑动。要创建一个竖直SeekBar,我们需要自定义一个View类,重写其onMeasure()和onDraw()方法,以及处理触摸事件,确保在垂直方向上的滑动能够正确地更新进度。 VerticalSeekBar.java是这个项目的源码文件,我们可以通过分析和学习这个文件来了解如何实现竖直SeekBar。这个类应该是继承自SeekBar,并覆盖关键的方法来改变其行为。以下是一些关键点: 1. **测量和布局**: - `onMeasure()`方法是决定组件大小的关键,我们需要在这里设置View的高度和宽度。由于是竖直SeekBar,高度应该反映总进度,而宽度可以固定或者根据父容器自动调整。 2. **绘图**: - `onDraw()`方法控制了SeekBar的视觉呈现。在这个方法中,我们需要修改绘制进度条的方式,使其沿着垂直轴而不是水平轴。 3. **触摸事件处理**: - `onTouchEvent()`方法需要被重写以处理用户的触摸操作。在水平SeekBar中,滑动操作改变的是X坐标,对于竖直SeekBar,我们需要处理Y坐标的改变,并据此更新进度。 4. **滑动手势处理**: - `computeScroll()`方法用于处理滚动动画。对于竖直SeekBar,我们需要更新滚动值以匹配垂直方向的滑动。 5. **回调和属性**: - 确保提供与标准SeekBar相同的公共API,如`setProgress()`,`getProgress()`等,以便在其他代码中使用。 6. **性能优化**: - 考虑到性能,避免在onDraw()中进行复杂的计算,尽可能将计算放在构造函数或onMeasure()中。 学习并理解VerticalSeekBar的实现可以帮助开发者扩展Android UI组件,满足更多样化的界面需求。同时,这也是对Android视图系统深入理解的一个好例子,有助于提升自定义View的开发能力。通过这个项目,我们可以了解到如何根据自己的需求定制Android系统中的原生组件,这对于打造个性化应用界面至关重要。
2026-01-06 22:37:36 4KB android 竖直SeekBar
1
目录 问题描述 原因分析 Android 6.x -10.x  updateThumbAndTrackPos Android 5.1 (API 22) updateThumbAndTrackPos Android 4.1 (API 15) updateThumbPos  解决方案 问题描述   工作需要对Seekbar的拖拽按钮设置一个自定义的icon,然后就遇到一个Seekbar拖拽按钮机型适配问题。 在Android 10等高版本系统机型上Seekbar的拖拽按钮展示正常,但是在比如Android5.1系统上展示异常。异常现象是拖拽按钮偏离了轨道中心位置,拖拽按钮顶部紧贴控件的顶部边界。
2023-03-07 09:55:57 70KB ar bar id
1
seekbar_Android开发实例实现了的进度条1进度条如线状显示,带有少许发散效果2拖拽按钮用圆显示,采用发散效果。(类似太阳的效果) 这个效果主要有这样几个难点:进度条的高度会随着seekbar的宽度变化,然而seekbar宽度过小又会遮罩住部分拖拽按钮;拖拽按钮使用shape方式生产,而非图像
2022-11-30 09:21:41 1006KB seekbar Android
1
seekbar_Android开发实例实现了的进度条1进度条如线状显示,带有少许发散效果2拖拽按钮用圆显示,采用发散效果。(类似太阳的效果) 这个效果主要有这样几个难点:进度条的高度会随着seekbar的宽度变化,然而seekbar宽度过小又会遮罩住部分拖拽按钮;拖拽按钮使用shape方式生产,而非图像
2022-11-27 13:18:02 1006KB seekbar_Android
1
seekbar_Android开发实例实现了的进度条1进度条如线状显示,带有少许发散效果2拖拽按钮用圆显示,采用发散效果。(类似太阳的效果) 这个效果主要有这样几个难点:进度条的高度会随着seekbar的宽度变化,然而seekbar宽度过小又会遮罩住部分拖拽按钮;拖拽按钮使用shape方式生产,而非图像
2022-11-27 13:18:00 1007KB seekbar_Android
1
android 进度条 demo
2022-11-17 15:19:13 23.97MB android 进度条 ProgressBar SeekBar
1
Android音量seekbar制作.7z
2022-07-06 18:06:03 7KB andorid