进度条类组件SeekBar

2023-11-16

介绍

        拖动条与进度条类似,所不同的是,拖动条允许用户拖动滑块来改变值,通常用于实现对某种数值的调节。

基本语法:

<SeekBar
 android:layout_height="wrap_content"
 android:id="@+id/seekBar1"
 android:layout_width="match_parent">
</SeekBar>
  • SeekBar 组件允许用户改变拖动滑块的外观,这可以使用 android:thumb 属性实现,该属性的属性值为一个 Drawable 对象,该 Drawable 对象将作为自定义滑块
  • 由于拖动条可以被用户控制,所以需要为其添加 OnSeekBarChangeListener 监听器,基本代码如下: 
seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

	@Override
	public void onStopTrackingTouch(SeekBar seekBar) {
		//要执行的代码
	}

	@Override
	public void onStartTrackingTouch(SeekBar seekBar) {
		//要执行的代码
	}

	@Override
	//参数progress表示当前进度,也就是拖动条的值
	public void onProgressChanged(SeekBar seekBar, int progress,
	boolean fromUser) {
		//其他要执行的代码
	}
});

例子

模拟调节屏幕亮度的拖动条 

使用拖动条设置屏幕亮度前,需要将手机自动调节屏幕亮度的功能关闭。还需要添加如下权限(会出现红色波浪线,但不影响使用)

<uses-permission android:name="android.permission.WRITE_SETTINGS" />

创建 BrightnessUtils .java类

public class BrightnessUtils {

    /**
     * 作用:用于获取当前屏幕亮度
     * 返回:返回当前屏幕亮度值
     */
    public static int getScreenBrightness(Context context) {

        int nowBrightnessValue = 0;
        //创建内容解析对象
        ContentResolver resolver = context.getContentResolver();
        try {
            //获取当前屏幕亮度
            nowBrightnessValue = Settings.System.getInt(resolver,
                    Settings.System.SCREEN_BRIGHTNESS);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return nowBrightnessValue;
    }

    /**
     * 作用:用于设置系统屏幕亮度
     */
    public static void setSystemBrightness(Context context, int brightness) {
        //异常处理
        if (brightness < 1) {
            brightness = 1;
        }
        //异常处理
        if (brightness > 255) {
            brightness = 255;
        }
        saveBrightness(context, brightness); //调用保存屏幕亮度的方法
    }

    /**
     * 作用:用于保存亮度设置状态
     */
    public static void saveBrightness(Context context, int brightness) {
        //获取设置系统屏幕亮度的uri
        Uri uri = Settings.System.getUriFor("screen_brightness");
        //保存修改后的屏幕亮度值
        Settings.System.putInt(context.getContentResolver(),
                "screen_brightness", brightness);
        //更新亮度值
        context.getContentResolver().notifyChange(uri, null);
    }
}

编写布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:padding="16dp"
    android:orientation="vertical"
    tools:context=".bar.SeekBarActivity">

    <!--thumb能设置滑动时的图标,max设置拖动数值绝对值-->
    <SeekBar
        android:id="@+id/my_seek_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/tv_seek_bar_value"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="0"/>

</LinearLayout>

编写SeekBarActivity

public class SeekBarActivity extends AppCompatActivity {

    private SeekBar mySeekBar; //拖动条
    private TextView tvSeekBarValue; //显示拖动条的值
    private BrightnessUtils utils; //屏幕亮度工具类

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_seek_bar);

        tvSeekBarValue = (TextView) findViewById(R.id.tv_seek_bar_value);
        utils =new BrightnessUtils();
        mySeekBar=(SeekBar)findViewById(R.id.my_seek_bar);
        //获取当前屏幕亮度并同步拖动条
        mySeekBar.setProgress(utils.getScreenBrightness(this));
        mySeekBar.setMax(225); //设置拖动条的最大值为225

        //判断当前系统的版本是否大于或等于 6.0,符合条件将跳转开启系统设置权限的界面
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            //判断系统权限设置
            if (!Settings.System.canWrite(this)) {
                //跳转系统权限界面
                Intent intent = new Intent
                        (android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS);
                intent.setData(Uri.parse("package:" + getPackageName()));
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
            }
        }

        mySeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                //当seekbar发生改动的时候就会回到这个监听器,回调这个方法
                //int类型的数据需要转化为String类型 (int resid)
                //progress这里的负数能设置拖动的起始值
                tvSeekBarValue.setText(String.valueOf(progress));
                //将当前的进度条的值传给系统
                utils.setSystemBrightness(SeekBarActivity.this,progress);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

    }
}

效果

GIF图看不出来亮度发生了变化

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

进度条类组件SeekBar 的相关文章

  • 找不到参数的方法 dependencyResolutionManagement()

    我正在尝试使用老师给我的一个项目 但它显示了一个错误 Settings file Users admin AndroidStudioProjects HTTPNetworking settings gradle line 1 A probl
  • 类型容器“Android 依赖项”引用不存在的库 android-support-v7-appcompat/bin/android-support-v7-appcompat.jar

    我在尝试在我的项目中使用 Action Bar Compat 支持库时遇到了某种错误 我不知道出了什么问题 因为我已按照此链接中的说明进行操作 gt http developer android com tools support libr
  • Sqlite数据库生命周期?关闭应用程序后它会被删除吗?

    我正在遵循一个简单的教程 该教程创建一个从 SQLiteOpenHelper 扩展的类 并创建一个包含一个表和 5 行的数据库 好的 但我需要更多地了解 android Sqlite 数据库 例如 如果应用程序关闭或手机关机会发生什么 数据
  • 在 ViewPager Fragments 中使用 Master/Detail 模板(下载链接)

    工作代码 https github com lukeallison ViewPagerMasterDetail https github com lukeallison ViewPagerMasterDetail Android 主 详细流
  • Android 后退按钮无法与 Flutter 选项卡内的导航器配合使用

    我需要在每个选项卡内有一个导航器 因此当我推送新的小部件时 选项卡栏会保留在屏幕上 代码运行得很好 但是 android 后退按钮正在关闭应用程序而不是运行 Navigator pop import package flutter mate
  • 如何以编程方式检查 AndroidManifest.xml 中是否声明了服务?

    我正在编写一个库 该库提供了一项服务 其他开发人员可以通过将其包含在他们的项目中来使用该服务 因此 我无法控制 AndroidManifest xml 我在文档中解释了要做什么 但一个常见的问题是人们忽略了将适当的 标记添加到其清单中 或者
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • 无法访问 com.google.android.gms.internal.zzbfm 的 zzbfm 类文件未找到

    我正在将我的 Android 应用程序项目从GCM to FCM 为此 我使用 Android Studio 中的 Firebase 助手工具 并遵循 Google 开发人员指南中的说明 一切都很顺利 并将我的应用程序代码更改为FCM根据助
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 如何发布Android .aar源以使Android Studio自动找到它们?

    我正在将库发布到内部 Sonatype Nexus 存储库 Android Studio 有一个功能 可以自动查找通过 gradle 引用的库的正确源 我将 aar 的源代码作为单独的 jar 发布到 Nexus 但 Android Stu
  • 在 android DatePickerDialog 中将语言设置为法语

    有什么办法可以让日期显示在DatePickerDialog用法语 我已经搜索过这个但没有找到结果 这是我的代码 Calendar c Calendar getInstance picker new DatePickerDialog Paym
  • Android Studio 0.4.3 Eclipse项目没有gradle

    在此版本之前 在 Android Studio 中按原样打开 Eclipse 项目似乎很容易 无需任何转换 我更喜欢 Android Studio 环境 但我正在开发一个使用 eclipse 作为主要 IDE 的项目 我不想只为这个项目下载
  • 字符串数组文本格式化

    我有这个字符串 String text Address 1 Street nr 45 Address 2 Street nr 67 Address 3 Street nr 56 n Phone number 000000000 稍后将被使用
  • 错误:在根项目“projectName”中找不到项目“app”

    我有一个在 Eclipse 中开发的旧应用程序 现在尝试将其迁移到 Android Studio 我更新了库并遵循了基本步骤 现在 我收到此错误 Error Project app not found in root project pro
  • 增加活动的屏幕亮度

    显然 Android 操作系统中至少有三种不同的技术可以改变屏幕亮度 其中两个在纸杯蛋糕之后不再起作用 而第三个被接受的技术显然有一个错误 我想在单视图活动开始时增加屏幕亮度 然后在活动结束时将亮度恢复为用户设置 没有按钮 没有第二个视图或
  • Android 套接字和 asynctask

    我即将开始制作一个应该充当 tcp 聊天客户端的应用程序 我一直在阅读和阅读 我得出的结论是最好 如果不需要 将我的套接字和异步任务中的阅读器 问题是我不确定从哪里开始 因为我是 Android 新手 这至少对我来说是一项艰巨的任务 但据我
  • 一次显示两条Toast消息?

    我希望在一个位置显示一条 Toast 消息 并在另一位置同时显示另一条 Toast 消息 多个 Toast 消息似乎总是按顺序排队和显示 是否可以同时显示两条消息 是否有一种解决方法至少可以提供这种外观并且不涉及扰乱活动布局 Edit 看来
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • android sdk 的位置尚未在 Windows 操作系统的首选项中设置

    在 Eclipse 上 我转到 windows gt Android SDK 和 AVD Manager 然后弹出此消息 Android sdk 的位置尚未在首选项中设置 进入首选项 在侧边栏找到 Android 然后会出现一个 SDK 位

随机推荐

  • JS数组reduce()方法详解

    reduce 方法接收一个函数作为累加器 数组中的每个值 从左到右 开始缩减 最终计算为一个值 reduce 可以作为一个高阶函数 用于函数的 compose 注意 reduce 对于空数组是不会执行回调函数的 首先我们看一下参数initi
  • 期货开户交易贵在坚持

    期货人生之一 交易贵在坚持 水滴石穿虽然平日看起来不起眼 但随着岁月的流逝 小流也将汇集成复利的海洋 因为只有时间才是真正成就复利可怕的力量 即使一生做的再成功 也并不能说明什么问题 只能说明我坚持了交易的原则 仅此而已 失去原则 我将一文
  • json应用场景与实战

    1 php中的json简介 首先我们说json是一种简便的轻量级的数据交换格式 能够在吴福气之间交换数据 json起源 1 标量 2 序列 3 映射 2 怎样使用json JSON的基本语法 JSON的四个基本规则 1 并列的数据之间用逗号
  • BeanUtils.copyProperties的用法

    BeanUtils copyProperties的用法 BeanUtils copyProperties a b 首先BeanUtils有2个包 org springframework beans BeanUtils 这个包 是a b为对象
  • 基于 spring cloud 的广告系统设计与实现(一)

    1 实现功能 CPM Cost Per Mille 每千人成本 CPT Cost Per Time 每时间段成本 CPC Cost Per Click 每点击成本 2 所包含子系统 3 所用技术 4 扩展 5 广告系统架构 转载于 http
  • 数据分析 之(一) --- 环境搭建

    安装 首先打来终端 安装 ipython 可以在终端 输入 ipython 回车进入 exit 回车退出 1 pip V 2 pip install ipython 其次 安装 jupyter 1 pip install jupyter 启
  • [人工智能-综述-9]:科学计算、大数据分析、人工智能、机器学习、深度学习全面比较

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 124245520 目录 第1章 sci
  • CORS漏洞原理分析

    CORS跨域漏洞原理分析 CORS全称为Cross Origin Resource Sharing即跨域资源共享 用于绕过SOP 同源策略 来实现跨域资源访问的一种技术 而CORS漏洞则是利用CORS技术窃取用户敏感数据 以往与CORS漏洞
  • Tika错误总结

    参考链接 https my oschina net u 3091870 blog 3032408 1 错误 NoSuchMethodError org apache commons compress archivers ArchiveStr
  • libspark,不懂日文怎么学……

    由于工作的需求 还有我未来的规划 决心研究 AR 这必然要研究 FLARToolKit 于是我找到了 libspark 接着我发现 这里面的东西太多了太强大了 而且是日本人的开源项目 所以里面很多源码注释都是日文的 于是我今天申请了goog
  • 微分方程(人口预测与传染病模型)

    一 定义 微分方程 含导数或微分的方程 微分方程的阶数 所含导数或微分的最高阶数 如y 2y 2x 0是三阶微分方程 微分方程的解 使得微分方程成立的函数 例如y 2x 0的解可以为x 或者x 1 微分方程的通解和特解 特解为满足等式条件即
  • React 的七个值得推荐的动画库

    今天 Web 应用程序用户界面有许多吸引用户的元素 为了满足这些需求 开发人员不得不寻找新的方法来实现带有动画和过渡的 UI 因此 开发了专门的库和工具来处理 Web 应用程序中的动画 在本文中 将讨论一些优秀的 React 动画库 以便于
  • 基于大数据的智能消防可视化平台

    0 前言 Hi 大家好 今天给大家介绍一个大数据可视化项目 大家可以用于自己的课设或毕设 可以灵活耦合任意数据 为自己的项目添加灵活的可视化动态效果 今天要分享的是 基于大数据的智能消防可视化平台 包含内容 完整可视化实现源码 html一键
  • redis5以上集群环境搭建

    1 系统环境及安装包准备 1 1 服务器 一台Centos7 服务器或虚拟机 ip地址 192 168 56 55 1 2 网络规划 master节点 slave节点 192 168 56 55 8001 192 168 56 55 800
  • 什么是接口测试呢

    什么是接口测试呢 测试人员通常所说的 接口测试 是针对系统各组件之间接口的一种测试 它属于功能测试 接口能测出普通界面操作难以发现的问题 如 我们都知道系统是由前端后端组成 一些数据在前端做了校验 后端同样也需要校验才能保证安全 界面操作显
  • 机器入门学习方法与学习路径

    机器学习方法与学习路径 1 数学基础 有无数激情满满大步向前 誓要在机器学习领域有一番作为的同学 在看到公式的一刻突然就觉得自己狗带了 是啊 机器学习之所以相对于其他开发工作 更有门槛的根本原因就是数学 每一个算法 要在训练集上最大程度拟合
  • 当四款AI大模型遇上考公真题,谁被难倒了?

    在当今社会 人工智能 AI 正以不可思议的速度发展 并在各个领域崭露头角 给人们的生活和工作带来许多便利 AI大模型被誉为人类 第二大脑 成为人们学习 生活 工作的 智能助手 公务员考试在我国教育领域独具特色 受到了众多考生的关注和青睐 众
  • postcss-px-to-viewport-8-plugin 适配

    postcss px to viewport 8 plugin 适配 简述 postcss px to viewport 8 plugin 是一个PostCSS插件 用于将以像素为单位的样式转换为视口单位 如vw vh 的样式 实现移动端适
  • java 输出编码_从代码看java输入输出中的编码和解码

    在java中 采用Unicode编码 英文字符和汉字都占两个字节 下面的代码都是在中文操作系统上执行的 系统采用GBK编码 1 看一下下面这段代码的编码和解码 当我们在键盘上敲入字符的时候 其采用的是GBK编码 比如我们敲入 b 它占两个字
  • 进度条类组件SeekBar

    介绍 拖动条与进度条类似 所不同的是 拖动条允许用户拖动滑块来改变值 通常用于实现对某种数值的调节 基本语法