栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

利用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();

}

}

@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;

}

}

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


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

    在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();

}

}

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

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">

android:layout_width=“match_parent”

android:layout_height=“70dp”

android:layout_weight=“2”

android:background="#03A9F4"

android:orientation=“vertical”

android:padding=“15dp”>

android:layout_width=“match_parent”

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

android:layout_height=“300dp”

android:orientation=“vertical”

tools:context=".MainActivity">

android:layout_width=“match_parent”

android:layout_height=“70dp”

android:layout_weight=“2”

android:background="#03A9F4"

android:orientation=“vertical”

android:padding=“15dp”>

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/716853.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号