IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 利用RiseNumberTextView组件简单实现数字滚动效果,android面试试题 -> 正文阅读

[移动开发]利用RiseNumberTextView组件简单实现数字滚动效果,android面试试题

}

public RiseNumberTextView(Context context,AttributeSet attr){

super(context,attr);

}

public RiseNumberTextView(Context context,AttributeSet attr,int defStyle)

{

super(context,attr,defStyle);

}

public interface EndListener {

public void onEndFinish();

}

/判断滚动状态/

public boolean isRunning() {

return (mPlayingState == RUNNING);

}

/实现浮点型数字滚动/

private void runFloat(){

ValueAnimator valueAnimator = ValueAnimator.ofFloat(fromNumber, number);

valueAnimator.setDuration(duration);

valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

@Override

public void onAnimationUpdate(ValueAnimator valueAnimator) {

setText(fnum.format(Float.parseFloat(valueAnimator.getAnimatedValue().toString())));

if (valueAnimator.getAnimatedFraction()>=1){

mPlayingState = STOPPED;

if (mEndListener!=null)

mEndListener.onEndFinish();

}

}

});

valueAnimator.start();

}

/实现整数型数字滚动/

private void runInt(){

ValueAnimator valueAnimator = ValueAnimator.ofInt((int)fromNumber, (int)number);

valueAnimator.setDuration(duration);

valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

@Override

public void onAnimationUpdate(ValueAnimator valueAnimator) {

setText(valueAnimator.getAnimatedValue().toString());

if (valueAnimator.getAnimatedFraction()>=1){

mPlayingState = STOPPED;

if (mEndListener!=null)

mEndListener.onEndFinish();

}

}

});

valueAnimator.start();

}

/判断整数型数字的位数/

static int sizeOfInt(int x) {

for (int i = 0;; i++)

if (x <= sizeTable[i])

return i + 1;

}

@Override

protected void onFinishInflate() {

super.onFinishInflate();

fnum= new DecimalFormat("##0.00");

}

/定义开始滚动/

@Override

public void start() {

if (!isRunning()) {

mPlayingState = RUNNING;

if (numberType==1)

runInt();

else

runFloat();

}

}

/*

**

这边定义了如何选择滚动效果的初始数字

如果数字小于100,则初始数字为500

如果数字大于1000,则初始数字为:显示数字-10^(显示数字的位数-2)

*/

@Override

public RiseNumberTextView withNumber(float number) {

this.number=number;

numberType=2;

if (number>1000){

fromNumber=number-(float)Math.pow(10,sizeOfInt((int)number)-2);

}else {

fromNumber=number/2;

}

return this;

}

@Override

public RiseNumberTextView withNumber(int number) {

this.number=number;

numberType=1;

if (number>1000){

fromNumber=number-(float)Math.pow(10,sizeOfInt((int)number)-2);

}else {

fromNumber=number/2;

}

return this;

}

@Override

public RiseNumberTextView setDuration(long duration) {

this.duration=duration;

return this;

}

@Override

public void setOnEnd(EndListener callback) {

mEndListener=callback;

}

}

四、组件编写完毕,开始使用


本示例模仿支付宝余额界面,通过点击充值与提现按钮使余额数字产生滚动效果。

  1. 在MainActivity中声明一个RiseNumberTextView组件,并设置两个按钮点击事件,使得点击按钮触发数字滚动

package com.hymn.rise;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import lib.RiseNumberTextView; //记得导入组件类

public class MainActivity extends AppCompatActivity {

private RiseNumberTextView RNTextView; //声明一个数字滚动组件

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

RNTextView=(RiseNumberTextView)findViewById(R.id.text);//给组件套上样式

/* 设置按钮点击事件 */

findViewById(R.id.chongzhi).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

init();

}

});

findViewById(R.id.tixian).setOnClickListener(new View.OnClickListener() {

public void onClick(View w ) {

init();

}

});

init();

}

private void init(){

RNTextView.withNumber(99999).start();

}

}

  1. 编写activity_main.xml,使用线性布局放置一个数字滚动组件与两个按钮

<LinearLayout xm
lns:android=“http://schemas.android.com/apk/res/android”

xmlns:tools=“http://schemas.android.com/tools”

android:layout_width=“match_parent”

android:layout_height=“300dp”

android:orientation=“vertical”

tools:context=".MainActivity">

<LinearLayout

android:layout_width=“match_parent”

android:layout_height=“70dp”

android:layout_weight=“2”

android:background="#03A9F4"

android:orientation=“vertical”

android:padding=“15dp”>

<TextView

android:layout_width=“match_parent”

android:layout_height=“wrap_content”
th=“match_parent”

android:layout_height=“300dp”

android:orientation=“vertical”

tools:context=".MainActivity">

<LinearLayout

android:layout_width=“match_parent”

android:layout_height=“70dp”

android:layout_weight=“2”

android:background="#03A9F4"

android:orientation=“vertical”

android:padding=“15dp”>

<TextView

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-01-24 11:01:03  更:2022-01-24 11:02:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:43:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码