| |
|
开发:
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; } } 本示例模仿支付宝余额界面,通过点击充值与提现按钮使余额数字产生滚动效果。
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(); } }
<LinearLayout xm 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” 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 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |