基于RxAndroid实现水平滑动条实时变化

Android自定义滑动条开发详解 在移动应用开发中,用户交互体验是决定产品成败的关键因素之一。SeekBar(滑动条)作为Android系统中常见的UI控件,广泛应用于音量调节、亮度控制、进度设置等场景。Android SDK 提供了原生的SeekBar组件,开发者可以通过其提供的 API 快速实现基础功能。然而,随着产品设计对UI个性化要求的不断提升,原生SeekBar的默认样式和功能已难以满足多样化的设计需求。因此,掌握如何对SeekBar进行外观和功能上的自定义,成为提升应用UI/UX质量的重要技能。 阅读详情

RxAndroid是基于观察者模式的框架,它能漂亮的解决Android的异步问题,具体的用法可参见以下地址。
Android框架:https://github.com/ReactiveX/RxAndroid
其他扩展框架:https://github.com/ReactiveX
ReactiveX官网:http://reactivex.io/
本文通过开启写入缓存和读缓存线程,两步实现水平滑动条实时变化,不需要自定义Handler、Thread、AsyncTask。

   

1、RxAndroid的配置


在build.gradle(Module:app)中的dependencies中导入下面两个包(RxAndroid的最新版本号可参见RxAndroid的官网)。
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
    implementation 'io.reactivex.rxjava2:rxjava:2.2.4'

2、XML布局文件


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".RxAndroidActivity">

    <Button
        android:id="@+id/start"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="开始"/>

    <Button
        android:id="@+id/stop"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="停止"/>

    <ProgressBar
        android:id="@+id/progress_bar"
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:max="100"
        style="?android:attr/progressBarStyleHorizontal"
        android:progressDrawable="@drawable/progress_bar"/>

</LinearLayout>

3、XML动画文件(progress_bar.xml)


<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape>
            <corners android:radius="80dp" />
            <solid android:color="#FF0000"/>
            <stroke android:color="#00FF00"/>
        </shape>
    </item>

    <item>
        <scale android:scaleWidth="100%">
            <shape>
                <solid android:color="#00FF00" />
                <corners android:radius="80dp"/>
            </shape>
        </scale>
    </item>
</layer-list>

4、java文件


import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;

import java.util.concurrent.ArrayBlockingQueue;

import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;


public class RxAndroidActivity extends AppCompatActivity {

    private Button start = null;
    private Button stop = null;
    private ProgressBar progressBar = null;
    private ArrayBlockingQueue<Integer> dataPool = new ArrayBlockingQueue<Integer>(100);
    private volatile boolean exit = false;

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

        // Initial the data
        this.initWidgets();
        this.addEventForWidgets();
    }

    // Initial the widget
    private void initWidgets(){
        this.start = this.findViewById(R.id.start);
        this.stop = this.findViewById(R.id.stop);
        this.progressBar = this.findViewById(R.id.progress_bar);
    }

    // Add Event
    private void addEventForWidgets(){
        this.start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                exit = true;
                writeDataPool();
                readDataPool();
            }
        });

        this.stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                exit = false;
            }
        });
    }

    // Write to data pool
    private void writeDataPool(){
        Observable<Integer> observableWriter = Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
                while (exit){
                    // Generate the data
                    emitter.onNext((int)(Math.random()*100));

                    Thread.sleep((int) (Math.random()*(2000-500)+500));
                }
                // Submit data
                emitter.onComplete();
            }
            // Set the main thread
        }).subscribeOn(Schedulers.newThread());


        Observer<Integer> observerWrite = new Observer<Integer>(){
            @Override
            public void onSubscribe(Disposable d) {
                Log.d("observableWriter","Start");
            }

            @Override
            public void onNext(Integer integer) {
                // Add the data, write the data pool
                dataPool.offer(integer);
            }

            @Override
            public void onError(Throwable e) {
                Log.d("observableWriter","error");
            }

            @Override
            public void onComplete() {
                Log.d("observableWriter","Complete");
            }
        };

        // Start observable
        observableWriter.observeOn(AndroidSchedulers.mainThread()).
                subscribe(observerWrite);
    }

    // Write to data pool
    private void readDataPool(){
        Observable<Integer> observableRead = Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
                while (exit){
                    Log.d("------",dataPool.size()+"");
                    if(dataPool.size()>0){
                        emitter.onNext(dataPool.poll());
                    }
                    Thread.sleep(1000);
                }
                // Submit data
                emitter.onComplete();
            }
            // Set the main thread
        }).subscribeOn(Schedulers.newThread());


        Observer<Integer> observerRead = new Observer<Integer>(){
            @Override
            public void onSubscribe(Disposable d) {
                Log.d("observerRead","Start");
            }

            @Override
            public void onNext(Integer integer) {
                // Show the data in the progress bar
                progressBar.setProgress(integer);
            }

            @Override
            public void onError(Throwable e) {
                Log.d("observerRead","error");
            }

            @Override
            public void onComplete() {
                Log.d("observerRead","Complete");
            }
        };

        // Start observable
        observableRead.observeOn(AndroidSchedulers.mainThread()).
                subscribe(observerRead);
    }
}

 

Android平台的GBSlideBar滑动选择工具条教程 滑动选择器(Slider)是用户界面中常见的组件,常用于设定数值范围或进行多项选择。用户通过左右滑动来选择值或选项,这一过程需要高度的交互性和流畅的体验。在Android平台上,所有的UI组件都是以视图(View)的形式存在的。视图是界面元素的基础,可以是按钮、文本框、图片等。视图的结构可以简单理解为一个矩形区域,它拥有自己的位置、尺寸、边框、背景等属性。这些属性决定了视图在屏幕上的显示方式和外观。创建自定义视图的第一步是继承View类或其子类,并实现其构造函数。 阅读详情

相关推荐

嵌入式调光控制库:轻量级软启/渐变/记忆逻辑实现

调光控制是智能照明系统的核心基础功能,涉及亮度调节、人机交互与电气安全多重需求。其底层原理依赖于对相位角或PWM占空比的精确时序控制,并需融合软启动、渐变过渡、状态记忆等工程化逻辑。这类轻量级调光行为逻辑层,不直接操作硬件寄存器,而是以确定性、无动态内存、可配置的方式封装用户意图到目标亮度值(0–100%)的映射过程,显著提升产品鲁棒性与跨平台复用能力。广泛应用于TRIAC交流调光、LED直流PWM驱动及DALI/Matter等智能照明协议网关中,尤其适合资源受限的Cortex-M系列MCU和FreeRTO

weixin_28949937的博客 579

Android工具类RxTool使用

使用环境: 项目创建之初,快速开发使用 使用方法: 1项目Object下的build.gradle添加: allprojects { repositories { maven{url "https://jitpack.io"} } } 2APP下build.gradle添加: implemen...

一个人的暗 5298

高通Camera PDAF调试实战:从Type2到Type3的避坑指南与Log分析技巧

本文深入解析高通Camera平台PDAF调试实战,重点对比Type2与Type3的核心差异,提供详细的配置迁移方案和Log分析技巧。针对常见兼容性问题如对焦速度变慢、低光失效等,给出具体解决方案,并分享性能优化案例与高级调试工具链,帮助开发者快速提升PDAF调试效率。

weixin_29164185的博客 413

Rxjava原理与场景全面解析篇,值得一看!

Android架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!上面分享的字节跳动公司2021年的面试真题解析大全,笔者还把一线互联网企业主流面试技术要点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。【Android高级架构视频学习资源】Android部分精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!

2401_84875887的博客 972

信号与系统——卷积、相关运算与FFT关系以及工程应用(三)

卷积运算、相关运算

qq_35028634的博客 6612

ACT代码梳理:新手学具身智能,不需要学会一堆理论,先跑起来再说

我是一个刚接触具身智能的小白。第一次看 ACT 项目,什么 Transformer、VAE、Mujoco、rollout,全是天书。但我没打算先把理论补完。太难,也太慢。我的策略是:直接上手,边做边学,卡在哪就学到哪。这篇文章是我的第一站——带你一起看懂 ACT 项目的整体架构,了解它的核心模块和流程。开始前,我列了 本文出现的18 个关键词,是我一开始完全搞不懂的。你可以先扫一眼,如果不认识的超过 10 个,那我们就是同路人,可以放心往下看了。

qq_17405041的博客 1207

android自定义View-欢迎页倒计时ProgressBar(配合RxJava2)

平常是使用其他app的时候发现欢迎页右上角或者其他部位会有一个倒计时的ProgressBar, 最近有空就自己实现了下。 大体上分为三个步骤, 首先是自定义属性,然后onDraw中绘制view,最后在使用的时候配合RxJava2实现progress刷新。 贴上代码实现: 1 attrs文件中:

MrCoder的博客 1052

Python爬虫实战:构建药监局药品批准信息本地查询系统

在医药信息化时代,药品批准信息的快速查询对于医药从业者、研究人员和普通消费者都具有重要意义。国家药品监督管理局(NMPA)提供了官方的药品查询系统,但有时我们需要建立本地数据库以便批量分析或离线查询。本文将详细介绍如何使用Python爬虫技术,结合最新的异步爬虫框架和技术栈,构建一个完整的药监局药品信息本地查询系统。本系统将实现以下功能:自动化爬取药监局官网的药品批准信息数据清洗和结构化存储建立本地查询接口数据定期更新机制pythonimport os"""药品类型枚举"""

2201_76125261的博客 728

DialogPlus实现版本升级下载的弹框dialog样式

先上效果图,升级带下载功能 第一步:加入依赖 implementation 'com.orhanobut:dialogplus:1.11@aar' 第二步实现布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/re...

拖鞋王子猪 948

Transformer实战(30)——Transformer注意力机制可视化

在本节中,我们讨论了人工智能面临的最重要问题之一:可解释人工智能 (explainable artificial intelligence, XAI)。随着语言模型的不断发展,可解释性成为一个严峻的问题。本节中,我们从 Transformer 的角度出发,研究了 Transformer 架构中的自注意力机制,尝试通过各种可视化工具理解这些机制的内部过程。

盼小辉丶的博客 2642

MAX30102心率血氧传感器原理图设计,已量产(e-Health传感器)

在最近的便携健康监测设备项目中,我们采用了集成算法的 MAX30102 心率血氧模块 —— 这类带内置 MCU 算法的传感器能直接输出心率 / 血氧数值,大幅降低了主控资源占用。但硬件电路的稳定性直接决定了 PPG 信号的采集精度,下面结合实际项目里的原理图,拆解下这个模块的设计细节。

不脱发的程序猿 1280

Android Jetpack Compose — Slider滑动条

Jetpack Compose的Slider组件提供了灵活而强大的功能,使你能够轻松地创建具有交互性和可定制外观的滑动条。无论是调整音量、选择百分比还是进行数值范围的选择,Slider都是一个非常实用的工具,可以增强你的应用的用户体验。在Android Jetpack Compose中,Slider(滑动条)是一个常用的用户界面控件,它允许通过滑动条来选择一个范围或数值。水平和垂直方向的滑动:Slider可以在水平方向或垂直方向上进行滑动,以适应不同的布局需求。参数可以设置滑动条的最小值和最大值,如。

江小白的博客 5574

vscode的launch:program ‘‘ does not exist

如图 一般是由于launch.json文件没有配置好的缘故。在右下角的ADD configuration如选第二个登录: 看到program这一栏,这一栏很重要,一般是选择你CMakelist,编译出来的可执行文件 看我CMakelist, 我生成的可执行文件是test_,所以路径可以这样输入: 我在之前cmake的时候已经有了test_这个文件了 然后就可以运...

狂小虎/Anthony Dave的博客 KuangXiaoHu's Blogs 5万+

Android 滑动条、Slider、Seekbar深度自定义

为了更好的满足日常开发中对Slider控件的各种需要,以下我们来看下基于nifty-slider来定制我们所需的各种功能及交互效果

a 5915

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

android:scrollbars 滑动滚动条代码控制

Android中的View对于ScrollBar和Scroll的支持是非常灵活的,不仅仅是UI样式可变,计算参数的方式也是可变的。在Android中,任何View都可以显示出ScrollBar,唯一的条件是自身高度不足以显示全部内容。

Dream It Possible 6105

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【Android自定义控件】实现可滑动的进度条

本文为Android自定义控件,可滑动的进度条,记录了从0到1开发的整个过程,加深对自定义View的理解,方便复习。

Ho博客 5785

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Android:自定义View实现多种滑动条

Android自定义View的滑动条实现

weixin_49083184的博客 1434

Android 的 ScrollView (滚动条)

另外用这玩意的时候要小心异步的玩意,就是addView后,有可能还没有显示完, 如果这个时候直接调用该方法的话,可能会无效,这就需要自己写handler来更新了~一般对于可能显示不完的情况,我们可以直接在布局的外层套上一个: ScrollView或者HorizontalScrollView!嘿嘿,原来是一个FrameLayout的容器,不过在他的基础上添加了滚动,允许显示的比实际多的内容!,可以是单一的组件,又或者一个布局包裹着的复杂的层次结构!()参数依次为x,y滚到对应的x,y位置!

leyang0910的博客 2765

Android进度条ProgressBar使用详解

先介绍一下ProgressBar几种比较常用的属性 布局中设置: android:max="100" ——最大显示进度 android:progress="50"——第一显示进度 android:secondaryProgress="80"——第二显示进度 android:indeterminate="true"——设置是否精确显示,true表示不精确显示进度,false表示精确显示进度 ...

小旭的专栏 2万+

Android动画、滑动条

背景从小到大逐渐占满全屏、背景动画、图片左右摇晃、图片动画、滑动条、调整图片大小、SeekBar、TranslateAnimation、ScaleAnimation、安卓、Android

qq_73672074的博客 444

Android 基础知识4-3.8 SeekBar(拖动条)详解

拖动条类似进度条,不同的是用户可以控制,比如,应用程序中用户可以对音效进行控制,这就可以使用拖动条来实现。由于拖动条可以被用户控制,所以需要对其进行事件监听,这就需要实现SeekBar.onSeekBarChangeListener接口。在SeekBar中共需要监听3个事件,分别是:数值的改变(onProgressChanged)、开始拖动(onStartTrackingTouch)、停止拖动(onStopTrackingTouch)。在onProgressChanged中我们可以得到当前数值的大小。

yyxhzdm的博客 1万+

Android—SeekBar(滑动条)

SeekBar介绍 在我们使用音乐播放器或者是视频播放器时,下面都会有一个进度条,拖动进度条即可改变 音乐的进度和视频播放的进度,那么在安卓里面也有相应的工具类,它就是SeekBar。 使用Seekbar主要看三个属性: 属性名 备注 android:max=”100” 滑动条最大值,这里设置为100 android:progress=”30” 滑动条初始值,这里设置为30

一个优秀的废人 3029

Android快速滑动条/快速滑块/快速滚动条标准实现,Java

Android快速滑动条/快速滑块标准实现,Java。

Zhang Phil 1049

mistral-7b-grok模型评估与测试:全面性能分析与基准测试结果

mistral-7b-grok是一款高性能的AI模型,在自然语言处理任务中展现出卓越的性能。本文将对该模型进行全面的评估与测试,深入分析其各项性能指标和基准测试结果,为用户提供详细的参考。 ## 模型评估关键指标解析 ### 评估损失(eval_loss) 评估损失是衡量模型在测试数据上表现的重要指标,数值越低表示模型泛化能力越强。mistral-7b-grok模型的评估损失为0.934799

gitblog_00096的博客 467

自定义拖动条android,Android自定义滑动带(横条指示器)

一.滑动带什么是Android滑动带,我们举个栗子image.png就是图中的黑色长条,最典型的就是用在和viewpager或者多个fragment相关的地方,因此也有人称这个东西为Indicator(指示器)。那我为什么称它为滑动带呢?有个使用和典型场景,有个控件叫TabLayout,它经常和viewpager一起使用,TabLayout的内部会自带这个横条指示器,看看内部的定义。image.p...

weixin_42214654的博客 3734

android SeekBar自定义样式滑动条的使用

seekbar是android常用的一款手动滑动和自动滑动的滑动条控件,可以作为手动选择数值的控件,也可作为进度条来使用,下面来介绍seekbar作为进度条的常用配置 一、样式设置,在xml布局文件中引入下面的代码 <SeekBar android:id="@+id/sb_quota" style="@style/mprogress_horizontal"//样

u010184245的专栏 6033
上一篇: Android中自定义蓝牙的MTU
下一篇: DatePicker控件和DatePickerDialog的实现和比较
MasonYyp
博客等级 码龄9年 301粉丝 297原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值