学习Android的第十二天

目录

Android SeekBar:拖动条控件

SeekBar 属性

SeekBar 事件

SeekBar 定制

范例:

参考文档

Android RatingBar 星级评分条

RatingBar 属性

RatingBar 样式

RatingBar 事件

范例:

官方文档

Android ScrollView 滚动视图

ScrollView

滚动到底部或顶部

设置滚动的滑块图片

隐藏滑块

设置滚动速度

官方文档


Android SeekBar:拖动条控件

SeekBar(拖动条)是Android中常用的用户界面控件之一,通常用于控制音乐播放器或视频播放器的音量、播放进度等。作为 ProgressBar 的子类,SeekBar 继承了 ProgressBar 的所有属性,并且还具有一些自己特有的属性和方法。

SeekBar 属性

SeekBar 控件的简单属性包括:

  • android:max="100":设置滑动条的最大值为 100。
  • android:progress="60":设置滑动条的当前值为 60。这表示默认情况下滑动条显示的进度位置。
  • android:secondaryProgress="70":设置二级滑动条的进度为 70。某些场景下,SeekBar 可以展示两种进度,比如下载进度和缓冲进度,此属性用于设置缓冲进度。
  • android:thumb="@mipmap/sb_icon":设置滑块的 drawable 为指定的图像资源 sb_icon。滑块是用户可以拖动的部分,该属性允许你自定义滑块的外观。

SeekBar 事件

SeekBar 内置了 SeekBar.OnSeekBarChangeListener 事件监听器,其中包含三个方法:

  • onProgressChanged(SeekBar seekBar, int progress, boolean fromUser):当拖动条的进度发生改变时触发。参数 seekBar 是触发该事件的 SeekBar 对象,progress 是当前的进度值,fromUser 表示进度是否是由用户手动操作触发的。
  • onStartTrackingTouch(SeekBar seekBar):当用户开始按住 SeekBar 拖动时触发。参数 seekBar 是触发该事件的 SeekBar 对象。
  • onStopTrackingTouch(SeekBar seekBar):当用户停止拖动 SeekBar 时触发。参数 seekBar 是触发该事件的 SeekBar 对象。

SeekBar 定制

SeekBar提供了两个属性来定制它的外观:

1、android:progressDrawable:用于设置 SeekBar 轨道的 Drawable。通过设置这个属性,你可以自定义 SeekBar 的轨道样式,可以是颜色、图片等。例如:

<SeekBarandroid:id="@+id/seekBar"android:layout_width="match_parent"android:layout_height="wrap_content"android:max="100"android:progress="0"android:progressDrawable="@drawable/custom_progress_drawable" />

2、android:thumb:用于设置 SeekBar 拖动条的 Drawable。这个属性用于自定义 SeekBar 的拖动按钮的外观。你可以使用一个图片作为滑块,也可以使用自定义的形状。例如:

<SeekBarandroid:id="@+id/seekBar"android:layout_width="match_parent"android:layout_height="wrap_content"android:max="100"android:progress="0"android:thumb="@drawable/custom_thumb" />

范例:

1、在 XML 布局文件中定义 SeekBar

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"xmlns:app="http://schemas.android.com/apk/res-auto"android:orientation="vertical"android:gravity="center"><SeekBarandroid:id="@+id/seekBar"android:layout_width="match_parent"android:layout_height="wrap_content"android:max="100"android:progress="60"android:thumb="@drawable/seekbar_thumb_pressed" /><TextViewandroid:id="@+id/text"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="当前音量: 60/100" /></LinearLayout>

2、修改 MainActivity.java 给 SeekBar 添加一个 SeekBar.OnSeekBarChangeListener

package com.example.myapplication;import android.os.Bundle;
import android.util.Log;
import android.widget.SeekBar;
import android.widget.TextView;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);SeekBar seekBar = findViewById(R.id.seekBar);TextView  text1 = findViewById(R.id.text);seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {// 当进度发生变化时调用Log.d("SeekBar", "当前值:" + progress);text1.setText("当前音量:"+ progress+"/100" );}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {// 当用户开始拖动SeekBar时调用Log.d("SeekBar", "开始拖动");}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {// 当用户停止拖动SeekBar时调用Log.d("SeekBar", "停止拖动");}});}
}

参考文档

官方文档: SeekBar

Android RatingBar 星级评分条

Android 中的 RatingBar 是一个用户界面控件,用于允许用户通过选择星级评分来表示对某个项目或内容的喜好程度。它显示一行星形图标,用户可以在图标中选择一个评分,通常是从1到5颗星。

RatingBar 属性

在 Android 中,RatingBar 控件有几个常用的属性:

  • android:isIndicator:该属性用于指示 RatingBar 是否仅用于显示评分,而用户无法更改。默认值为 false,即用户可以点击选择评分。如果将其设置为 true,则 RatingBar 将变为只读模式,用户不能更改评分。
  • android:numStars:该属性指定了 RatingBar 显示的星星数量。它必须是一个整数值,表示星星的数量。例如,如果设置为 5,则 RatingBar 将显示 5 颗星。
  • android:rating:这是 RatingBar 的默认评分值。它必须是一个浮点数值,表示 RatingBar 初始化时显示的评分。默认值为 0.0。
  • android:stepSize:该属性指定评分每次增加的值。它必须是一个浮点数值,表示每次用户点击时评分增加的量。例如,如果设置为 0.5,则每次点击评分增加 0.5。默认值为 0.5。

RatingBar 样式

在 Android 中,除了默认的 RatingBar 样式外,还提供了两个其他样式,但是它们并不常用,因为它们可能在某些设备上显示不一致,或者看起来不够美观。这两个样式是:

  • style="?android:attr/ratingBarStyleSmall":这个样式适用于小尺寸的 RatingBar,通常用于较小的控件或者嵌入到其他控件中。它可能在不同设备上的显示效果会有所不同。
  • style="?android:attr/ratingBarStyleIndicator":这个样式用于指示性的 RatingBar,通常用于显示当前评分的状态,而不允许用户进行交互。这种样式的 RatingBar 是只读的,用户不能改变评分。

RatingBar 事件

RatingBar 提供了 OnRatingBarChangeListener 事件监听器,用于监听评分变化事件。这个监听器包含一个方法:

  • onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser):当用户改变评分时触发该方法。参数 ratingBar 是触发事件的 RatingBar 对象,rating 是当前的评分值,fromUser 表示评分是否是由用户触发的。在这个方法中,可以响应用户的评分变化,并进行相应的处理。

范例:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"xmlns:app="http://schemas.android.com/apk/res-auto"android:orientation="vertical"android:gravity="center"><RatingBarandroid:id="@+id/ratingBar"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:isIndicator="false"android:numStars="5"android:rating="3.5"android:stepSize="0.5" /><TextViewandroid:id="@+id/tv_rating"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="当前评分:3.5" /></LinearLayout>
package com.example.myapplication;import android.os.Bundle;
import android.widget.RatingBar;
import android.widget.TextView;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);RatingBar ratingBar = findViewById(R.id.ratingBar);TextView ratingTextView = findViewById(R.id.tv_rating);// 设置 RatingBar 的当前评分值float currentRating = ratingBar.getRating();// 显示当前评分值ratingTextView.setText("当前评分值: " + currentRating);// 设置 RatingBar 的评分变化监听器ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {@Overridepublic void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {// 当评分发生变化时更新评分文本ratingTextView.setText("当前评分值: " + rating);}});}
}

官方文档

  1. RatingBar

Android ScrollView 滚动视图

在 Android 中,ScrollView 是一个常用的滚动视图容器,用于在屏幕空间不足以容纳所有内容时,允许用户在垂直方向上滚动内容。ScrollView 可以包含一个子视图,这个子视图可以是单个组件,也可以是一个布局包含的复杂层次结构。

ScrollView 主要用于处理以下情况:

  1. 当内容超出屏幕范围时,允许用户通过滚动操作来查看隐藏部分的内容。
  2. 当需要在垂直方向上滚动显示内容时,例如长列表或大段文字等。

ScrollView

例子:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"xmlns:app="http://schemas.android.com/apk/res-auto"android:orientation="vertical"android:gravity="center"><ScrollViewandroid:id="@+id/scrollview"android:layout_width="match_parent"android:layout_height="500dp"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/extralongtext" /></ScrollView>
</LinearLayout>

滚动到底部或顶部

方法 fullScroll(int direction) 可以用于将 ScrollView 滚动到底部或顶部。这个方法接受一个参数 direction,指定滚动的方向。常量 ScrollView.FOCUS_DOWN 表示滚动到底部,而常量 ScrollView.FOCUS_UP 则表示滚动到顶部。

// 滚动到底部
scrollView.fullScroll(ScrollView.FOCUS_DOWN);// 滚动到顶部
scrollView.fullScroll(ScrollView.FOCUS_UP);

例子:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"xmlns:app="http://schemas.android.com/apk/res-auto"android:orientation="vertical"android:gravity="center"><Buttonandroid:id="@+id/btn_down"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="滚动到底部" /><ScrollViewandroid:id="@+id/scrollview"android:layout_width="match_parent"android:layout_height="500dp"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/extralongtext" /></ScrollView><Buttonandroid:id="@+id/btn_up"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="滚动到顶部" />
</LinearLayout>
package com.example.myapplication;import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RatingBar;
import android.widget.ScrollView;
import android.widget.TextView;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 获取按钮和 ScrollView 对象Button btnDown = findViewById(R.id.btn_down);Button btnUp = findViewById(R.id.btn_up);ScrollView scrollView = findViewById(R.id.scrollview);// 滚动到底部按钮点击事件btnDown.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {scrollView.fullScroll(ScrollView.FOCUS_DOWN);}});// 滚动到顶部按钮点击事件btnUp.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {scrollView.fullScroll(ScrollView.FOCUS_UP);}});}
}

设置滚动的滑块图片

在 Android 中,可以使用 android:scrollbarThumbVertical 和 android:scrollbarThumbHorizontal 属性来设置 ScrollView 或 HorizontalScrollView 的滚动条的滑块图片。

隐藏滑块

要隐藏 ScrollView 或 HorizontalScrollView 的滚动条滑块,可以使用两种方法:

方法一:通过 XML 属性设置

可以在 XML 布局文件中直接设置 android:scrollbars 属性为 "none" 来隐藏滚动条滑块。

<ScrollViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:scrollbars="none"><!-- ScrollView 内容 --></ScrollView>

方法二:通过 Java 代码设置

也可以在 Java 代码中调用 setVerticalScrollBarEnabled(false) 或 setHorizontalScrollBarEnabled(false) 方法来隐藏滚动条滑块。

ScrollView scrollView = findViewById(R.id.scrollview);
scrollView.setVerticalScrollBarEnabled(false);

或者对于 HorizontalScrollView:

HorizontalScrollView horizontalScrollView = findViewById(R.id.horizontal_scrollview);
horizontalScrollView.setHorizontalScrollBarEnabled(false);

设置滚动速度

虽然 ScrollView 并没有直接提供设置滚动速度的方法,但是可以通过继承 ScrollView 并重写其 fling(int velocityY) 方法来实现。在重写的方法中,可以调整滚动速度。

@Override
public void fling(int velocityY) {super.fling(velocityY / 2);    //速度变为原来的一半
}

官方文档

  1. Android ScrollView

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/686015.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MessageQueue --- RabbitMQ

MessageQueue --- RabbitMQ RabbitMQ IntroRabbitMQ 核心概念RabbitMQ 分发类型Dead letter (死信)保证消息的可靠传递 RabbitMQ Intro 2007年发布&#xff0c;是一个在AMQP&#xff08;高级消息队列协议&#xff09;基础上完成的&#xff0c;可复用的企业消息系统&#xff0c;…

java 宠物医院系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java 宠物医院系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

c语言遍历文件夹中的文件

文件目录如下&#xff0c;文件夹里还有一些txt文件未展示出来。 使用递归实现&#xff0c;深度优先遍历文件夹中的文件。 代码如下&#xff0c;用了一点C的语法。 #include <io.h> #include <iostream> using namespace std;#define MAX_PATH_LENGTH 100int Tr…

人工智能学习与实训笔记(四):神经网络之自然语言处理

目录 六、自然语言处理 6.1 词向量 (Word Embedding) 6.1.1 词向量的生成过程 6.1.2 word2vec介绍 6.1.3 word2vec&#xff1a;skip-gram算法的实现 6.2 句向量 - 情感分析 6.2.1 LSTM (Long Short-Term Memory)介绍 6.2.2 基于飞桨实现的情感分析模型 6.3 BERT 六、自…

unreal engine5.1中设置convex decomposition凸包分解

UE5系列文章目录 文章目录 UE5系列文章目录前言一、convex decomposition是什么&#xff1f;二、convex decomposition属性设置 前言 今天使用ue5根据网上教程制作可操控直升机&#xff0c;找属性convex decomposition凸包分解&#xff0c;默认的碰撞如下图 如果想使用精细化…

Android Studio安装SDK失败解决办法

Android Studio安装SDK失败解决办法 安装SDK时界面会显示安装的连接&#xff0c;同时在你选择的安装SDK的文件夹里面会生成一些目录和文件&#xff0c;在你选择放SDK的目录下有一个叫做.temp的文件夹&#xff0c;里面放的就是下载的临时文件。 .temp内部的文件夹里面能看到下…

mysql出现unblock with ‘mysqladmin flush-hosts‘

产生的原因是&#xff1a; 同一个ip在短时间内产生太多&#xff08;超过mysql数据库max_connect_errors的最大值&#xff09;中断的数据库连接而导致的阻塞。 解决方法1&#xff1a;修改max_connect_errors的值 (1)进入Mysql数据库查看max_connect_errors&#xff1a; > sh…

求最小生成树相关例题题解

一.前言 求最小生成树常用的两种算法&#xff1a;prim算法和kruskal算法&#xff0c;之前我已经总结过prim算法的相关知识和使用方法&#xff08;详细可以看这篇博客&#xff09;&#xff0c;而kruskal算法比较简单&#xff0c;更好操作&#xff08;主要通过并查集和排序&…

【深度学习】使用tensorflow实现VGG19网络

【深度学习】使用tensorflow实现VGG19网络 本文章向大家介绍【深度学习】使用tensorflow实现VGG19网络&#xff0c;主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项&#xff0c;具有一定的参考价值&#xff0c;需要的朋友可以参考一下。 VGG网络与AlexNet类似…

wayland(xdg_wm_base) + egl + opengles——dma_buf 作为纹理数据源(五)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、EGL dma_buf import 相关的数据结构和函数1. EGLImageKHR2. eglCreateImageKHR()3. glEGLImageTargetTexture2DOES()二、egl 中 import dma_buf 作为纹理的代码实例1. egl_wayland_dmabuf_…

Why Not Http?

游戏服务器开发主要是基于socket&#xff0c;或者websocket&#xff0c;很少采用http&#xff08;可能有部分非常轻量级的服务器选择http&#xff09;。这是什么原因呢&#xff1f;我们先来看看socket与http之间的区别。 socket与http之间的区别 socket与http对比 sockethttpT…

【c++】list 模拟

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;能手撕list模拟 > 毒鸡汤&#xff1a;不为模糊…

红队ATKCK|红日靶场Write-Up(附下载链接)

网络拓扑图 下载地址 在线下载&#xff1a; http://vulnstack.qiyuanxuetang.net/vuln/detail/2/ 百度网盘 链接&#xff1a;https://pan.baidu.com/s/1nlAZAuvni3EefAy1SGiA-Q?pwdh1e5 提取码&#xff1a;h1e5 环境搭建 通过上述图片&#xff0c;web服务器vm1既能用于外…

学习Android的第十三天

目录 Android TextClock 文本时钟控件 TextClock 控件主要属性和方法 简单的 TextClock 参考文档 Android AnalogClock 控件 AnalogClock 属性 Android Chronometer 计时器 Chronometer 属性 Chronometer 主要方法 范例&#xff1a; 完整的计时器 范例&#xff1a; …

Rust 学习笔记 - Hello world

前言 本文将讲解如何完成一个 Rust 项目的开发流程&#xff0c;从编写 “Hello, World!” 开始&#xff0c;到使用 Cargo 管理和运行项目。 编写 Hello world 开始一个新项目很简单&#xff0c;首先&#xff0c;创建一个包含 main.rs 文件的 hello_world 文件夹&#xff0c;…

基于Doris构建亿级数据实时数据分析系统

转载至我的博客 https://www.infrastack.cn &#xff0c;公众号&#xff1a;架构成长指南 背景 随着公司业务快速发展&#xff0c;对业务数据进行增长分析的需求越来越迫切&#xff0c;与此同时我们的业务数据量也在快速激增、每天的数据新增量大概在30w 左右&#xff0c;一年…

BUUCTF misc 专题(47)[SWPU2019]神奇的二维码

下载附件&#xff0c;得到一张二维码图片&#xff0c;并用工具扫描&#xff08;因为图片违规了&#xff0c;所以就不放了哈。工具的话&#xff0c;一般的二维码扫描都可以&#xff09; swpuctf{flag_is_not_here}&#xff0c;&#xff08;刚开始出了点小差错对不住各位师傅&am…

代码随想录第32天|● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

文章目录 买卖股票思路一&#xff1a;贪心代码&#xff1a; 思路&#xff1a;动态规划代码&#xff1a; 跳跃游戏思路&#xff1a;贪心找最大范围代码&#xff1a; 跳跃游戏②思路&#xff1a;代码&#xff1a; 方法二&#xff1a;处理方法一的特殊情况 买卖股票 思路一&#x…

C++类和对象-多态->多态的基本语法、多态的原理剖析、纯虚函数和抽象类、虚析构和纯虚析构

#include<iostream> using namespace std; //多态 //动物类 class Animal { public: //Speak函数就是虚函数 //函数前面加上virtual关键字&#xff0c;变成虚函数&#xff0c;那么编译器在编译的时候就不能确定函数调用了。 virtual void speak() { …

论全人类大脑潜在联系的可能性与现实意义

随着科技和神经科学研究的深入&#xff0c;越来越多的理论与实践表明&#xff0c;尽管人的大脑在物理形态上各自独立&#xff0c;但通过思维、情感、信息交流等多种方式&#xff0c;全人类的大脑之间存在着广泛的、潜在的联系。本文旨在探讨这种普遍联系的可能性及其对人类社会…